Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: EFR32MG12 Прерывание по завершению LDMA
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
Aleksandr Baranov
Здравствуйте.
Я начал работать с 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.
x893
Там же где и всегда, или в
startup_...c
или в
startup_...s
от компилятора зависит.
Aleksandr Baranov
Как выяснилось, проблема не в DMA, а в переходе на любую ISR. Точно так же не происходит переход на handler Uart Receive. Причем, я вижу в отладчике, как взводится бит "pending" в NVIC, и вижу, что в нужном месте таблицы векторов - адрес нужной ISR, а VTOR правильно указывает на начало таблицы векторов.
Я сделал достаточно много проектов на STM32, и там не встречал подобных проблем. Нет ли чего-то специфичного в EFR32, что я упускаю?
aaarrr
Цитата(Aleksandr Baranov @ Aug 21 2017, 02:17) *
Я сделал достаточно много проектов на STM32, и там не встречал подобных проблем. Нет ли чего-то специфичного в EFR32, что я упускаю?

Ничего специфичного нет - такой же CM с таким же NVIC. Может, глобально прерывания запрещены?
Aleksandr Baranov
Цитата(aaarrr @ Aug 20 2017, 20:07) *
Ничего специфичного нет - такой же CM с таким же NVIC. Может, глобально прерывания запрещены?

Если бы они были запрещены, ничего бы не происходило вообще, а так программа переходит неизвестно куда. Буду дальше копать, спасибо.
jcxz
Цитата(Aleksandr Baranov @ Aug 21 2017, 15:13) *
Если бы они были запрещены, ничего бы не происходило вообще, а так программа переходит неизвестно куда. Буду дальше копать, спасибо.

Попробуйте возбудить нужный IRQ (или другой) программно через соответствующий регистр NVIC.
Aleksandr Baranov
Как оказалось, файл конфигурации векторов прерываний, используемый в проекте, был неправильным. Когда я в нем усомнился и заменил - все заработало. Никому нельзя верить biggrin.gif
Большое спасибо за участие.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.