[an error occurred while processing this directive]
|
это у меня только или у всеx. От компилил проет прерывания идут от таймера, перезапустил емулятор и прерывания перестают идти, помагает только полное закрытие программы. И ещ один глюк.
Вот так работает
GPTGCTL1_0 = 0x0003;//GPTGCTL1_0 | 0x0003;
GPTCTL2_0 = 0x0080;
GPTCTL1_0 = 0x0080; //dual 32 non prescaler
Вот так не считает таймер в симуляторе в эмуляторе работает
GPTCTL2_0 = 0x0080;
GPTCTL1_0 = 0x0080; //dual 32 non prescaler
GPTGCTL1_0 = 0x0003;//GPTGCTL1_0 | 0x0003;
странный глюк ведь токо поменял последовательность регистров.
Еще не понятки с циклами, в вечном цикле инкрементируется volatile переменная в симуляторе за 1 инкрементировение таймер инкрементируется 8 раз, в эмуляторе все на оборот N раз инкрементируется переменная и 1 раз таймер, и NOP у симулятора выполняется почемуто 8 циклов.
Может есть патчи по этому поводу, или я что то не так делаю. вот весь код программы
extern void VECSTART(void);
volatile unsigned int counter;
volatile unsigned int x;
interrupt void isrTimer()
{
x++;
}
void main()
{
CSL_init();
_disable_interrupts();
IRQ_setVecs((unsigned long)(&VECSTART));
GPTGPINT_0 = 0x0000;
GPTGPEN_0 = 0x0000;
GPTCNT1_0 = 0x0000;
GPTCNT2_0 = 0x0000;
GPTCNT3_0 = 0x0000;
GPTCNT4_0 = 0x0000;
GPTPRD1_0 = 0x0050;
GPTPRD2_0 = 0x0000;
GPTPRD3_0 = 0x0000;
GPTPRD4_0 = 0x0000;
GPTGCTL1_0 = 0x0007;
GPTCTL2_0 = 0x0080;
GPTCTL1_0 = 0x0080; //dual 32 non prescaler
IRQ_plug(IRQ_EVT_TINT0,&isrTimer);
IRQ_clear(IRQ_EVT_TINT0);
IRQ_enable(IRQ_EVT_TINT0);
_enable_interrupts();
for(;;)
{
counter++;
};
}
E-mail: info@telesys.ru