Estou aqui tentando "compreender", e não copiar o exemplo.
Vejam o codigo a baixo..
- Código: Selecionar todos
__irq void T0_IRQHandler (void) {
unsigned short flag;
/*gerar um clock de 5khz*/
if(flag){
IOSET = 1;
flag = 0x00;
}else{
IOCLR = 1;
flag = 0xff;
}
T0IR = 1; /* zera flag de interrupção*/
VICVectAddr = 0; /* zera registrador que indica canal que gerou int*/
}
void init_tmr0(void){
/* INICIALIZAÇAO DA INTERRUPÇAO PELO TIMER 0 */
T0MR0 = 1199; /* 100uS at 12.0 MHz */
T0MCR = 3; /*abilita e cria interrupt em MR0*/
T0TCR = 1; /* liga timer0*/
VICVectAddr0 = (unsigned long)T0_IRQHandler;/* coloca endereço*/
VICVectCntl0 = 0x24; /*liga IRQ, canal 4 tmr0*/
VICIntEnable |= 0x20; // abilita int do tmr0 canal 4
}
pelo que eu consegui compreender.
VIC"ENDEREÇO"0....15.{
Escrevo neste registrador, o endereço da rotina que vai ser apontada,
}QUE:{
VIC"CONTROLE"0....15
Esta com o bit5 IRQ em 1, e os BITS 0..4, cuja valor esta apontando para qual canal vai acionar a interrupção, que no meu caso é o canal 4}
Lembrando que devo abilitar o bit do TMR0 no registrador
VICIntEnable, para que seja ligado o canal que irá para o barramento que gera a interrupção.
É isto mesmo ?
Abraços