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

ЭЛЕМЕНТЫ И КОМПОНЕНТЫ 43 WWW.SOEL.RU СОВРЕМЕННАЯ ЭЛЕКТРОНИКА ◆ № 4 2015 Листинг 3 uint16_t Buffer[10] = {0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A}; // Обработчик прерывания DMA1 void DMA1_Channel6_IRQHandler(void) { DMA_ClearITPendingBit(DMA1_IT_TC6); DMA_Cmd(DMA1_Channel6, DISABLE); } // Функция инициализации DMA1 для USART2 void init_DMA1_USART2() { RCC->APB2ENR |= RCC_APB2ENR_IOPDEN | RCC_APB2ENR_AFIOEN; RCC->APB1ENR |= RCC_APB1ENR_USART2EN; AFIO->MAPR |= AFIO_MAPR_USART2_REMAP; GPIOD->CRL &= !GPIO_CRL_CNF5; GPIOD->CRL |= GPIO_CRL_CNF5_1 | GPIO_CRL_MODE5_0 | GPIO_CRL_CNF6_0; USART2->BRR = USART_BRR; USART2->CR1 = USART_CR1_UE | USART_CR1_TE | USART_CR1_RE; RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); DMA_InitTypeDef DMA_InitStruct; DMA_StructInit(&DMA_InitStruct); DMA_InitStruct.DMA_DIR = DMA_DIR_PeripheralDST; DMA_InitStruct.DMA_PeripheralBaseAddr = (uint32_t) &(USART2->DR); DMA_InitStruct.DMA_MemoryBaseAddr = (uint32_t) Buffer; DMA_InitStruct.DMA_BufferSize = 10; DMA_InitStruct.DMA_MemoryInc = DMA_MemoryInc_Enable; DMA_InitStruct.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; DMA_InitStruct.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; DMA_InitStruct.DMA_Mode = DMA_Mode_Normal; DMA_Init(DMA1_Channel6, &DMA_InitStruct); USART_DMACmd(USART2, USART_DMAReq_Tx, ENABLE); DMA_Cmd(DMA1_Channel6, ENABLE); DMA_ITConfig(DMA1_Channel6, DMA_IT_TC, ENABLE); NVIC_EnableIRQ(DMA1_Channel6_IRQn); } // Главный модуль программы void main() { init_DMA1_USART2(); while(1); } П РИМЕРЫ ПРОГРАММ В листинге 1 приведён пример про- граммного кода набора функций настройки DMA для работы с USART1_ TX, созданных на основе изложенно- го материала. Приведённые функции используем в программе, которая позволит пере- дать содержимое буфера в порт USART1 через DMA без участия процессора. Пример такой программы приведён в листинге 2. В качестве данных буфера будет загружена фраза «Добрый день!». Естественно, перед использованием программы необходимо будет выпол- нить инициализацию USART1. Данная программа обладает опре- делённым недостатком, связанным с необходимостью проверять флаг окончания передачи. Избавиться от этого недостатка поможет использо- вание прерываний от канала DMA. В качестве нового примера исполь- зования прерываний от DMA рас- смотрим программу, приведённую в листинге 3. В этой программе формируется буфер данных для передачи в порт USART2 и производится инициали- зация канала 6 DMA1 с разрешением прерываний. По окончании переда- чи произойдёт прерывание, которое вызовет обработчик DMA1_Channel6_ IRQHandler. В этом обработчике обну- ляется бит прерывания и отключается 6-й канал DMA1. Подробнее познакомиться с блоком DMA поможет первоисточник [2]. Л ИТЕРАТУРА 1. www.st.com . 2. www.st.com/web/en/resource/tech- nical/document/reference_manual/ CD00246267.pdf. Wi-Fi /Bluetooth модули Atmel ® Rainbow Electronics предлагает со склада и под заказ новейшие Wi-Fi/Bluetooth модули Atmel ® семейства SmartConnect www.gsm-rainbow.ru Москва Екатеринбург Санкт-Петербург Новосибирск Киев Минск (495) 665-0201 (343) 272-0020 (812) 324-0902 (383) 211-9087 (+38 044) 520-0478 (+375 17) 220-7692 info@rtcs.ru eburg@rainbow.ur.ru spb@rtcs.ru nsk@rtcs.ru chip@rainbow.com.ua chip@rainbow.by WINC3400 – Wi-Fi/Bluetooth модули WINC1500 – Wi-Fi модули  Wi-Fi 802.11b/g/n и Bluetooth 4.0  встроенный стек TCP/IP и Bluetooth Smart  скорость передачи данных до 72 Мбит/с  мощность выходного сигнала до +20 дБм  чувствительность –96 дБм  габариты 22 × 15 мм  стандарт Wi-Fi – 802.11b/g/n  встроенный стек TCP/IP и TLS  скорость передачи данных до 72 Мбит/с  мощность выходного сигнала до +19 дБм  чувствительность –91 дБм  низкое энергопотребление  габариты 22 × 15 мм Р еклама © СТА-ПРЕСС

RkJQdWJsaXNoZXIy MTQ4NjUy