|
|
View previous topic :: View next topic |
Author |
Message |
hundil Guest
|
timer1 steup |
Posted: Thu May 27, 2004 2:49 am |
|
|
Hiiii....
Can I setup & enable/disable Tİmer1 in an ISR (for example in #INT_EXT)
without any limitation ?
Thanks anybody who answers
The ISR is as follows:
#INT_EXT
void pass_fonk()
{
enable_interrupts(INT_TIMER1);
setup_timer_1(T1_INTERNAL | T1_DIV_BY_1);
if(rise_edge){
rise_edge=FALSE;
set_timer1(0xFC17);
value_i=0;
value_o=0;
akim_s =0;
ort=0;
ext_int_edge(H_TO_L);
}
else
{
rise_edge=TRUE;
set_timer1(0xE4A7);
ext_int_edge(L_TO_H);
/* value_i=(value_i/ort) * 250.0/1023.0; //2.22
value_o=(value_o/ort) * 250.0/1023.0; //value_o=value_o/ort * 250.0/1023.0;
akim_s =(akim_s /ort) * 100.0/1023.0; */
_i++;
if(_i==50){
// if(TS==1) printf("\f500"); // sistem
// printf("\iVI:%U \oVO:%U \aA:%U " ,(unsigned)value_i, (unsigned)value_o, (unsigned)akim_s);
_i=0;
}
if(bb==1)
stb_fonk();
switch_fonk();
//}
sayac+=ort;
}
enable_interrupts(INT_TIMER1);
if(input(PIN_B0))
rise_edge=FALSE;
enable_interrupts(INT_EXT);
} |
|
|
Ttelmah Guest
|
Re: timer1 steup |
Posted: Thu May 27, 2004 4:51 am |
|
|
hundil wrote: | Hiiii....
Can I setup & enable/disable Tİmer1 in an ISR (for example in #INT_EXT)
without any limitation ?
Thanks anybody who answers
The ISR is as follows:
#INT_EXT
void pass_fonk()
{
enable_interrupts(INT_TIMER1);
setup_timer_1(T1_INTERNAL | T1_DIV_BY_1);
if(rise_edge){
rise_edge=FALSE;
set_timer1(0xFC17);
value_i=0;
value_o=0;
akim_s =0;
ort=0;
ext_int_edge(H_TO_L);
}
else
{
rise_edge=TRUE;
set_timer1(0xE4A7);
ext_int_edge(L_TO_H);
/* value_i=(value_i/ort) * 250.0/1023.0; //2.22
value_o=(value_o/ort) * 250.0/1023.0; //value_o=value_o/ort * 250.0/1023.0;
akim_s =(akim_s /ort) * 100.0/1023.0; */
_i++;
if(_i==50){
// if(TS==1) printf("\f500"); // sistem
// printf("\iVI:%U \oVO:%U \aA:%U " ,(unsigned)value_i, (unsigned)value_o, (unsigned)akim_s);
_i=0;
}
if(bb==1)
stb_fonk();
switch_fonk();
//}
sayac+=ort;
}
enable_interrupts(INT_TIMER1);
if(input(PIN_B0))
rise_edge=FALSE;
enable_interrupts(INT_EXT);
} |
I'd do the actual 'setup' externally (you want to put as little code inside any ISR as possible). Also changing the value, the operating edge etc., will very probably result in the interrupt having been triggered, so I'd suggest setting all the values, then clearing the interrupt flag (the compiler now supports this), and then enabling the interrupt.
Best Wishes |
|
|
hundil Guest
|
timer and ISR |
Posted: Thu May 27, 2004 6:34 am |
|
|
Hiii again....
I am definitely sure that there is no other interrupt occured in the INT_EXT ISR. (during execution of INT_EXT)
There are 3-4 different INTs, and most of routines are working fine.
My main routine is almost empty with
do{ }while(true)
I need much more variables to take them into the main routine
What about your suggestion ?
Best wishes
hundil |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|