Tuesday, March 28, 2006
Interrupt no eZ80F91
Como ativar e atender a ISR no eZ80F91 em linguagem C:
Como exemplo vamos ativar a ISR de TMR3, com cristal de 50MHz
faremos um contador com TMR3 com carga de 0x071F, causando ISR em
TMR3 de aproximadamente 100Hz (100ms).
O objetivo deste é crementar os registros DOWN 0,1, ... 9, 10 registros
de uma unidade se os seus valores forem diferentes de zero.
por exemplo: se down[1] = 10, ele levará 10 x 100ms = 1s para tingir 00.
==========================================
no inicio, na área de prototipos, declamos:
interrupt void isr_timer3(void);
void set_vector(unsigned short int, void (*handler)(void));
void ini_tmr3(void);
==========================================
quando declaramos interrupt ou #pragma interrupt a função terminará
com EI e RETI.
==========================================
as funções:
ini_tmr3 - inicializar o TMR3 e ativar a Interrupt do eZ80
set_vector - está será criada pelo proprio compilador ZDSII criando
vetor para atender o chamado, desta forma quando o chamarmos
deverá conter o vetor TMR3 e a seguir o endereço do serviço.
veja abaixo:
isr_timer3 - para atender a chamada de TMR3
=============================================
void ini_tmr3(void){
TMR3_RR_H = 0x07;
TMR3_RR_L = 0xA4;
TMR3_CTL = 0x1F;
TMR3_IER = 0x01;
PA_DDR = 0xEB;
set_vector(0x60, isr_timer3);
}
===============================================
#pragma interrupt
void isr_timer3(void)
{ char v;
asm("in0 a,(76H)"); //TMR3_IIR tirar chamada de interrpt
for(v=0; v < 10; v++){
if(down[v] != 0 ) down[v]--;
}
}
===============================================
por alvaroluiz@click21.com.br
Outras Assuntos Técnicos
Como exemplo vamos ativar a ISR de TMR3, com cristal de 50MHz
faremos um contador com TMR3 com carga de 0x071F, causando ISR em
TMR3 de aproximadamente 100Hz (100ms).
O objetivo deste é crementar os registros DOWN 0,1, ... 9, 10 registros
de uma unidade se os seus valores forem diferentes de zero.
por exemplo: se down[1] = 10, ele levará 10 x 100ms = 1s para tingir 00.
==========================================
no inicio, na área de prototipos, declamos:
interrupt void isr_timer3(void);
void set_vector(unsigned short int, void (*handler)(void));
void ini_tmr3(void);
==========================================
quando declaramos interrupt ou #pragma interrupt a função terminará
com EI e RETI.
==========================================
as funções:
ini_tmr3 - inicializar o TMR3 e ativar a Interrupt do eZ80
set_vector - está será criada pelo proprio compilador ZDSII criando
vetor para atender o chamado, desta forma quando o chamarmos
deverá conter o vetor TMR3 e a seguir o endereço do serviço.
veja abaixo:
isr_timer3 - para atender a chamada de TMR3
=============================================
void ini_tmr3(void){
TMR3_RR_H = 0x07;
TMR3_RR_L = 0xA4;
TMR3_CTL = 0x1F;
TMR3_IER = 0x01;
PA_DDR = 0xEB;
set_vector(0x60, isr_timer3);
}
===============================================
#pragma interrupt
void isr_timer3(void)
{ char v;
asm("in0 a,(76H)"); //TMR3_IIR tirar chamada de interrpt
for(v=0; v < 10; v++){
if(down[v] != 0 ) down[v]--;
}
}
===============================================
por alvaroluiz@click21.com.br
Outras Assuntos Técnicos