СОВРЕМЕННАЯ ЭЛЕКТРОНИКА №4/2015

ЭЛЕМЕНТЫ И КОМПОНЕНТЫ 40 WWW.SOEL.RU СОВРЕМЕННАЯ ЭЛЕКТРОНИКА ◆ № 4 2015 Как только будет передана поло- вина байтов, будет установлен флаг HTIF и сгенерировано прерывание, если такое прерывание разрешено битом HTIE. В конце обмена будет установлен флаг его завершения TCIF и сгенерировано прерывание, если такое прерывание разрешено битом TCIE. Р ЕЖИМ ЦИКЛИЧНОСТИ Режим цикличности использует- ся для управления непрерывным потоком данных с помощью кольце- вых буферов, например, от АЦП в ре- жиме сканирования. Эта особенность может быть разрешена битом CIRC в регистре DMA_CCRx. Когда режим цикличности активизирован, то зна- чение числа данных, которые будут переданы за один цикл, автомати- чески перезагружается начальным значением, запрограммированным на этапе конфигурации канала, и DMA-запросы продолжают обслу- живаться. Р ЕЖИМ « ПАМЯТЬ – ПАМЯТЬ » Каналы DMA могут также рабо- тать без запроса от периферии. Такой режим называют «память–память». Если установлен «1» бит MEM2MEM в регистре DMA_CCRx, то канал ини- циализирует обмен сразу, как только он программно разрешается битом EN в регистре DMA_CCRx. Обмен оста- навливается в тот момент, когда значе- ние в регистре DMA_CNDTRx достигает нуля. Режим «память–память» не может использоваться одновременно с режи- мом цикличности. О БРАБОТКА ОШИБОК Генерация ошибки обмена по DMA может возникнуть при опера- ции чтения или записи в зарезер- вированном адресном простран- стве. Если происходит ошибка обме- на по DMA во время доступа на чтение или запись, то канал автома- тически отключается посредством ап- паратного сброса бита EN в реги- стре конфигурации соответствую- щего канала DMA_CCRx. Выставляет- ся флаг запроса прерывания от ошиб- ки обмена в регистре DMA_IFR канала TEIF и генерируется прерывание, если оно разрешено битом TEIE в регистре DMA_CCRx. П РЕРЫВАНИЯ Запрос на прерывание может гене- рироваться событиями «завершение половины обмена», «завершение пол- ного обмена» или «ошибка обмена» в каждом DMA-канале. Для удобства обработки доступны отдельные биты разрешения прерываний, представлен- ные в таблице 2. К АРТА ЗАПРОСОВ DMA Сводная таблица запросов на обслу- живание для DMA1 и DMA2 приведена соответственно в таблицах 3 и 4. Для каждого канала существует несколь- ко источников запроса, которые объ- единяются с помощью логической операции «ИЛИ». Любой из каналов может быть разрешён или запрещён программно. Высшей приоритетно- стью обслуживания обладает первый канал. П РОГРАММИРОВАНИЕ DMA Для использования блока DMA в программе необходимо выпол- нить его инициализацию и настрой- ку параметров. Рассмотрим эти опе- рации на примере подключения пере- датчика последовательного порта USART1_TX к каналу 4 DMA1 для пере- дачи 64 байт. Начнём с настройки адреса источника и приёмника дан- ных канала DMA. Инициализация контроллера DMA, так же как и любого периферийного устройства, начинается с подачи на него тактовых импульсов. Делается это с помощью операции: if ((RCC->AHBENR & RCC_AHBENR_ DMA1EN) != RCC_AHBENR_DMA1EN) RCC->AHBENR |=RCC_AHBENR_DMA1EN; Далее следует указать адрес регистра периферии, с которой будет работать канал DMA: DMA1_Channel4->CPAR = (uint32_t)&USART1->DR; // Адрес регистра периферии Теперь определимся с источником данных. Пусть это будет массив сим- волов: Таблица 2. Запросы прерываний от DMA Событие прерывания Флаг события Бит управления разрешением Завершение половины обмена HTIF HTIE Завершение полного обмена TCIF TCIE Ошибка обмена TEIF TEIE Таблица 3. Сводная таблица запросов для DMA1 Периферия Канал 1 Канал 2 Канал 3 Канал 4 Канал 5 Канал 6 Канал 7 ADC1 ADC1 SPI/I2S SPI1_RX SPI1_TX SPI/I2S2_RX SPI/I2S2_TX USART USART3_TX USART3_RX USART1_TX USART1_RX USART2_RX USART2_TX I2C I2C2_TX I2C2_RX I2C1_TX I2C1_RX TIM1 TIM1_CH1 TIM1_CH2 TIM1_CH4 TIM1_TRIG TIM1_COM TIM1_UP TIM1_CH3 TIM2 TIM2_CH3 TIM2_UP TIM2_CH1 TIM2_CH2 TIM2_CH4 TIM3 TIM3_CH3 TIM3_CH4 TIM3_UP TIM3_CH1 TIM3_TRIG TIM4 TIM4_CH1 TIM4_CH2 TIM4_CH3 TIM4_UP Таблица 4. Сводная таблица запросов для DMA2 Периферия Канал 1 Канал 2 Канал 3 Канал 4 Канал 5 ADC3 ADC3 SPI/I2S3 SPI/I2S3_RX SPI/I2S3_TX UART4 UART4_RX UART4_TX SDIO SDIO TIM5 TIM5_CH4 TIM5_TRIG TIM5_CH3 TIM5_UP TIM5_CH2 TIM5_CH1 TIM6/DAC1 TIM6_UP/DAC1 TIM7/DAC2 TIM7_UP/DAC2 TIM8 TIM8_CH3 TIM8_UP TIM8_CH4 TIM8_TRIG TIM8_COM TIM8_CH1 TIM8_CH2 © СТА-ПРЕСС

RkJQdWJsaXNoZXIy MTQ4NjUy