Сергей Борщ (22.03.2007 13:31, просмотров: 1) ответил SergeyD на ИМХО
Может, но 1) Вам надо запомнить содержимое VICIrqStatus чтобы потом разрешить их взад.
2) Если в момент пока прерывания будут так "запрещены" произойдет какое-то прерывание и его запрос успеет сняться (например прерывание EXT_INT), прерывание будет потеряно.
3) Если в какой-то процедуре в момент такого "запрещения" нужно будет включить какое-либо прерывание, чтобы оно начало выполняться когда прерывания разрешать, что получится?
Поэтому вариантов два:
1) Работать не в User а в System mode и использовать ИАРовские функции __enable_interrupt() и __disable_interrupt(), которые запрещают и разрешают прерывания правильно - манипулируя битами I и F в регистре CPSR.
2) Если же вам очень нужно работать в User mode, то делайте так:
Ints.c:
<c>#include <inarm.h>
#pragma swi_number=0x00
__swi void EnableInts()
{
__enable_interrupt();
}
#pragma swi_number=0x01
__swi void DisableInts()
{
__disable_interrupt();
}</c>
Файл main.c:
<c>#pragma swi_number=0x00
extern __swi void EnableInts();
#pragma swi_number=0x01
extern __swi void DisableInts();
int main()
{
EnableInts();
........
DisableInts();
}</c>