реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Обработчик прерываний. SAM3S4B
sinh
сообщение Mar 26 2013, 05:34
Сообщение #1





Группа: Участник
Сообщений: 11
Регистрация: 15-11-12
Пользователь №: 74 397



Имеется МК SAM3S4B, столкнулся со следующей проблемой: не заходит в обработчик прерывания, вроде бы все делаю правильно: (разрешил глобольные прерывания __enable_irq();, разрешил прерывания в NVIC NVIC_EnableIRQ(..);, разрешил прерывания по приему/передачи USART_EnableIt(BOARD_USART_BASE, US_IER_RXRDY);
Обработчик имеет следующий вид:
CODE
void USART1_IrqHandler(void)
{
uint32_t status;

status = BOARD_USART_BASE->US_CSR;

if ((status & US_CSR_RXRDY) == US_CSR_RXRDY) {
recvDone = true;
USART_DisableIt(USART1, US_IDR_RXRDY)
}
if ((status & US_CSR_TXEMPTY) == US_CSR_TXEMPTY) {
sentDone = true;
USART_DisableIt(USART1, US_IDR_TXEMPTY)
}

}


Вот на этом коде не работает:
CODE

USART_ReadBuffer(BOARD_USART_BASE);
USART_EnableIt(BOARD_USART_BASE,US_IER_RXRDY);
while(!recvDone);

recvDone предварительно установлен false. Что я забыл или не учел?
Go to the top of the page
 
+Quote Post
ankir
сообщение Mar 31 2013, 17:29
Сообщение #2





Группа: Новичок
Сообщений: 1
Регистрация: 31-03-13
Пользователь №: 76 297



Цитата(sinh @ Mar 26 2013, 09:34) *
...recvDone предварительно установлен false. Что я забыл или не учел?

recvDone объявлен как volatile?
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Apr 1 2013, 05:49
Сообщение #3


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Проект на Си или C++?


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
sinh
сообщение Apr 1 2013, 16:57
Сообщение #4





Группа: Участник
Сообщений: 11
Регистрация: 15-11-12
Пользователь №: 74 397



Цитата(ankir @ Mar 31 2013, 21:29) *
recvDone объявлен как volatile?

нет


Цитата(demiurg_spb @ Apr 1 2013, 09:49) *
Проект на Си или C++?

main на C++, подключаемые файлы C(стартап и т.п.)
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Apr 1 2013, 17:05
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(sinh @ Apr 1 2013, 19:57) *
нет
main на C++, подключаемые файлы C(стартап и т.п.)

Поздравляю: вы допустили две ошибки сразу.

Объявите переменную как volatile и обработчик как extern "C":
Код
extern "C" void USART1_IrqHandler(void)
{
....
}
Go to the top of the page
 
+Quote Post
sinh
сообщение Apr 1 2013, 17:09
Сообщение #6





Группа: Участник
Сообщений: 11
Регистрация: 15-11-12
Пользователь №: 74 397



Спасибо, завтра попробую.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 08:35
Рейтинг@Mail.ru


Страница сгенерированна за 0.01385 секунд с 7
ELECTRONIX ©2004-2016