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

This page is powered by Blogger. Isn't yours?