Aleksandr Baranov 1 13 августа, 2017 Опубликовано 13 августа, 2017 (изменено) · Жалоба Здравствуйте. Я начал работать с UART EFR32. Инициализировал UART, вызвав функции из UARTDRV: void XmodemCommInit(USART_TypeDef *usart) { UARTDRV_HandleData_t UARTHandleData; UARTDRV_Handle_t UARTHandle = &UARTHandleData; UARTDRV_Init_t init = XMODEM_USART_INIT; //#-template defined in header UARTDRV_Init(UARTHandle, &init); //UART initialization UARTDRV_Receive(UARTHandle, rxdma, 4, rxCallback); //LDMA initialization } Увидел, что байты передаются на терминал, принимаются LDMA и записываются в буфер rxdma. Но прерывания по завершению ДМА не происходит. Вернее, в функцию LDMA_IRQHandler( void ) управление не передается. Где та таблица векторов, которая содержит имя функции " LDMA_IRQHandler( void )" ? Что я вообще мог по неопытности упустить? Спасибо. PS. Драйвера установились, когда я установил Simplicity Studio. Изменено 13 августа, 2017 пользователем Aleksandr Baranov Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 55 13 августа, 2017 Опубликовано 13 августа, 2017 · Жалоба Там же где и всегда, или в startup_...c или в startup_...s от компилятора зависит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aleksandr Baranov 1 20 августа, 2017 Опубликовано 20 августа, 2017 · Жалоба Как выяснилось, проблема не в DMA, а в переходе на любую ISR. Точно так же не происходит переход на handler Uart Receive. Причем, я вижу в отладчике, как взводится бит "pending" в NVIC, и вижу, что в нужном месте таблицы векторов - адрес нужной ISR, а VTOR правильно указывает на начало таблицы векторов. Я сделал достаточно много проектов на STM32, и там не встречал подобных проблем. Нет ли чего-то специфичного в EFR32, что я упускаю? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 21 августа, 2017 Опубликовано 21 августа, 2017 · Жалоба Я сделал достаточно много проектов на STM32, и там не встречал подобных проблем. Нет ли чего-то специфичного в EFR32, что я упускаю? Ничего специфичного нет - такой же CM с таким же NVIC. Может, глобально прерывания запрещены? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aleksandr Baranov 1 21 августа, 2017 Опубликовано 21 августа, 2017 (изменено) · Жалоба Ничего специфичного нет - такой же CM с таким же NVIC. Может, глобально прерывания запрещены? Если бы они были запрещены, ничего бы не происходило вообще, а так программа переходит неизвестно куда. Буду дальше копать, спасибо. Изменено 21 августа, 2017 пользователем Aleksandr Baranov Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 236 21 августа, 2017 Опубликовано 21 августа, 2017 · Жалоба Если бы они были запрещены, ничего бы не происходило вообще, а так программа переходит неизвестно куда. Буду дальше копать, спасибо. Попробуйте возбудить нужный IRQ (или другой) программно через соответствующий регистр NVIC. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aleksandr Baranov 1 24 августа, 2017 Опубликовано 24 августа, 2017 · Жалоба Как оказалось, файл конфигурации векторов прерываний, используемый в проекте, был неправильным. Когда я в нем усомнился и заменил - все заработало. Никому нельзя верить Большое спасибо за участие. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться