Перейти к содержанию
    

EFR32MG12 Прерывание по завершению LDMA

Здравствуйте.

Я начал работать с 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.

Изменено пользователем Aleksandr Baranov

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Там же где и всегда, или в

startup_...c

или в

startup_...s

от компилятора зависит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как выяснилось, проблема не в DMA, а в переходе на любую ISR. Точно так же не происходит переход на handler Uart Receive. Причем, я вижу в отладчике, как взводится бит "pending" в NVIC, и вижу, что в нужном месте таблицы векторов - адрес нужной ISR, а VTOR правильно указывает на начало таблицы векторов.

Я сделал достаточно много проектов на STM32, и там не встречал подобных проблем. Нет ли чего-то специфичного в EFR32, что я упускаю?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я сделал достаточно много проектов на STM32, и там не встречал подобных проблем. Нет ли чего-то специфичного в EFR32, что я упускаю?

Ничего специфичного нет - такой же CM с таким же NVIC. Может, глобально прерывания запрещены?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ничего специфичного нет - такой же CM с таким же NVIC. Может, глобально прерывания запрещены?

Если бы они были запрещены, ничего бы не происходило вообще, а так программа переходит неизвестно куда. Буду дальше копать, спасибо.

Изменено пользователем Aleksandr Baranov

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если бы они были запрещены, ничего бы не происходило вообще, а так программа переходит неизвестно куда. Буду дальше копать, спасибо.

Попробуйте возбудить нужный IRQ (или другой) программно через соответствующий регистр NVIC.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как оказалось, файл конфигурации векторов прерываний, используемый в проекте, был неправильным. Когда я в нем усомнился и заменил - все заработало. Никому нельзя верить :biggrin:

Большое спасибо за участие.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...