Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Принудительный запуск прерывания IAR MSP430
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > MSP430
veteq
Как принудительно вызвать функцию прерывания Timer_A0 не используя для этого таймер MSP430, т.е. вызвать как обычную функцию.


#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer_A0(void)
{
...
}

d7d1cd
А если установить флаг прерывания самостоятельно?
rezident
Цитата(veteq @ Oct 9 2012, 21:15) *
Как принудительно вызвать функцию прерывания Timer_A0 не используя для этого таймер MSP430, т.е. вызвать как обычную функцию.

Разрешить прерывание от CCR0
Код
TACCTL0 |= CCIE;

Разрешить маскируемые прерывания
Код
__enable_interrupt();

или
Код
__bis_SR_register(GIE);

Установить флаг вызова прерывания от CCR0
Код
TACCTL0 |= CCIFG;

Вот только "как обычную" не получится. Потому, что при этом будет вызвано хотя и программно, но все же аппаратное прерывание.
MrYuran
Вложить внутрь прерывания обычную функцию и проконтролировать, чтобы не заинлайнил.
(#pragma noinline ?)
И вызывать из любого места.
Издержки - вызов функции внутри прерывания (сохранение контекста плюс call/ret )
rezident
Цитата(MrYuran @ Oct 10 2012, 10:25) *
Издержки - вызов функции внутри прерывания (сохранение контекста плюс call/ret )
К сожалению, не только CALL/RET (или даже CALLA/RETA), но еще и сохранение на стеке PC и SR при переходе по вектору прерывания и дополнительно RETI при выходе из прерывания.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.