Как стать автором
Обновить

Запуск DMA на К1986ВЕ92FI пошагово

Уровень сложностиСредний
Время на прочтение8 мин
Количество просмотров5.9K
Всего голосов 27: ↑26 и ↓1+33
Комментарии8

Комментарии 8

Давно уже отказался от К1986, вместо этого присмотрелся к Artery AT32, взял F437. И оказалось что не зря, достать легко, работает как надо, проблем никаких, примеров от производителя прилично. Только борд примерко 3-4к стоит, сам контроллер примерно за 800р найти можно.

(Да, это реклама, жду повышения социального рейтинга)

А нормальной читаемой библиотеки у микроконтроллера так и не появилось? Почему везде "магические константы"?

Я почти не пользуюсь SPL, "магические константы" нужны один раз при настройке. Для миландровских МК аналог куба сделали, генерирующий код инициализации периферии.

По миландровскому ПДП подробных материалов негусто, все моменты требующие внимания как раз расписаны подробно.

у меня на ассемблере код понятнее чем здесь приведенный на си

Тов VitGo явно статью внимательно не читали. Иначе, как спец по программированию, сразу бы указали на ошибку и несоответствие документации. Я этот кусок взял из статьи и отредактировал, остальное писал с нуля.

я не специалист по 1986, так что комментировать соответствие докам не могу...

но код ваш не читаем :-(

вот например инит дма на асме, и никаких магических чисел

@.CHARSET CP1251

@ GNU AS
.syntax unified
.cpu cortex-m4
.thumb
.fpu fpv4-sp-d16

.INCLUDE   "/src/inc/rcc.inc"
.INCLUDE   "/src/inc/dma.inc"
.INCLUDE   "/src/inc/tim2-5.inc"

.section .asmcode

@.desc name=DMA_INIT type=proc
@ +---------------------------------------------------------------------+
@ |    Запуск автоматического копирования данных буфера в TIM3_CCR1     |
@ |      при помощи DMA 1 (поток 6 канал 2) по запросу  (TIM4_UP)       |
@ +---------------------------------------------------------------------+
@.enddesc

.global DMA_INIT
DMA_INIT:
              @ тактирование DMA1
                    LDR        R0, =PERIPH_BB_BASE + ( RCC_BASE + RCC_AHB1ENR ) * 32 + RCC_AHB1ENR_DMA1EN_N * 4
                    STR        R1, [ R0 ]

                    LDR        R0, = DMA1

@ настройки DMA
                    @  размер периферии       размер памяти    инкремент памяти
.EQU  size          , DMA_SxCR_PSIZE_16B + DMA_SxCR_MSIZE_16B + DMA_SxCR_MINC

                    @         канал 2          циклически   из памяти в периферию    высший приоритет
.EQU  mode          , 2 << DMA_SxCR_CHSEL_N + DMA_SxCR_CIRC + DMA_SxCR_DIR_MTP     + DMA_SxCR_PL_VHIGH

                    LDR        R1, = mode + size
                    STR        R1, [ R0, DMA_S6CR ]   @ установим настройки

               @ старт DMA1 Stream 6
               @ сброс флагов, если есть установленные то без этого dma работать не будет
               @ но при первом запуске все флаги итак сброшены, поэтому и не сбрасываем
@                    MOV        R1, DMA_HIFCR_CFEIF6 + DMA_HIFCR_CDMEIF6 + DMA_HIFCR_CTEIF6 + DMA_HIFCR_CHTIF6 + DMA_HIFCR_СTCIF6
@                    STR        R1, [ R0, DMA_LIFCR ]

                    MOV        R1, 31                      @ количество передач = 31
                    STR        R1, [ R0, DMA_S6NDTR ]

                    LDR        R1, = VALUES                @ адрес массива данных
                    STR        R1, [ R0, DMA_S6M0AR ]

                    LDR        R1, = TIM3 + TIM2T5_CCR1    @ адрес регистра сравнения TIM3_CCR1
                    STR        R1, [ R0, DMA_S6PAR ]

                @ включим DMA1 при помощи bitbanding
                    LDR        R0, = PERIPH_BB_BASE + ( DMA1_BASE + DMA_S6CR ) * 32
                    MOV        R1, 1
                    STR        R1, [ R0, DMA_SxCR_EN_N * 4 ]

                    BX         LR

@ массив яркости светодиода
.align 4
VALUES:             .SHORT      10, 30, 50, 90, 70, 60, 40
                    .SHORT      25
                    .SHORT      10, 30, 50, 90, 70, 60, 55
                    .SHORT      50, 45, 40, 35, 30, 20, 15
                    .SHORT      10, 5, 1, 1, 1, 1, 1, 1, 1

Подскажите как приобрести К1986ВЕ92FI?

Я писал на почту Миландра. Если как юрлицо, то выставляют счёт. Как физлицо я покупал миландровские мк больше пяти лет назад, а за это время много законов успело поменяться, поэтому проще в Миландр позвонить и узнать.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории