Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Обработчик прерываний. SAM3S4B
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
sinh
Имеется МК 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. Что я забыл или не учел?
ankir
Цитата(sinh @ Mar 26 2013, 09:34) *
...recvDone предварительно установлен false. Что я забыл или не учел?

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

нет


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

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

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

Объявите переменную как volatile и обработчик как extern "C":
Код
extern "C" void USART1_IrqHandler(void)
{
....
}
sinh
Спасибо, завтра попробую.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.