سلام خدمت همه ی دوستان
می خواستم وقفه ی keil رو برای تایمر فعال کنم ولی هر کاری کردم نشد که نشد.
برنامه ی تایمر با وقفه داخل فرومای دیگه ام کار نمیکنه.
خواهشن هر کسی میتونه راهنمایی کنه ...
(تایمر عمل میکنه ولی وقفه نمیده)
[tt]#include <AT91SAM7X256.H> /* AT91SAMT7X256 definitions */
#include <delay.H>
//int k=0;
void timer0_Handler(void)__irq
{
while(1){*AT91C_PIOB_SODR=(1<<21);delay_ms(2 00);*AT91C_PIOB_CODR=(1<<21);delay_ms(200);}
//if(k%2)
// *AT91C_PIOB_SODR=(1<<21);
// else
// *AT91C_PIOB_CODR=(1<<21);
//k++;
//*AT91C_AIC_EOICR=*AT91C_TC0_SR;
}
int main (void)
{
*AT91C_WDTC_WDMR=(1<<15); //*AT91C_WDR_MR=(1<<15); *AT91C_WDTC_WDMR=AT91C_WDTC_WDDIS;
*AT91C_RSTC_RMR=0xA5000001; //*AT91C_RSTC_MR=0xA5000001;
*AT91C_CKGR_MOR=0xf01; //strtup time
*AT91C_CKGR_PLLR=0xec3f57;//50Mhz
*AT91C_PMC_MCKR=0x03;
*AT91C_PMC_SCER=0x01;
*AT91C_PMC_PCER=(1<<AT91C_ID_PIOB);
*AT91C_PIOB_PER=(1<<21);
*AT91C_PIOB_OER=(1<<21);
*AT91C_PMC_PCER=(1<<AT91C_ID_TC0);//|(1<<AT91C_ID_PIOB); //|(1<<0)|(1<<30)|(1<<31)
*AT91C_PIOB_PDR=(1<<23);
*AT91C_PIOB_MDER=(1<<23);
*AT91C_PIOB_ASR=(1<<23);
*AT91C_PIOB_SODR=(1<<21);delay_ms(500);*AT91 C_PIOB_CODR=(1<<21);delay_ms(500);
*AT91C_PIOB_SODR=(1<<21);delay_ms(500);*AT91 C_PIOB_CODR=(1<<21);delay_ms(500);
*AT91C_TC0_CMR=0x3C004; //
*AT91C_TC0_RA=0x5f5e; // (50M/1024)*0.5
*AT91C_TC0_RC=0xBEBC; // (50M/1024)*1
*AT91C_TC0_CCR=AT91C_TC_CLKEN | AT91C_TC_SWTRG;
AT91C_AIC_SVR[AT91C_ID_TC0]=(unsigned long)timer0_Handler; //
AT91C_AIC_SMR[AT91C_ID_TC0]=0x07; // AT91C_AIC_SRCTYPE_INT_POSITIVE_EDGE|5
*AT91C_AIC_ICCR=(1<<AT91C_ID_TC0); //
*AT91C_TC0_IER=AT91C_TC_CPBS; //
//*AT91C_AIC_ISCR=(1<<AT91C_ID_TC0);
*AT91C_AIC_IECR=(1<<AT91C_ID_TC0); //
while(1);
}
[/tt]
من تو برنامهی بالا فعلا فقط میخوام یه بار عمل کنه تا بعد ...
می خواستم وقفه ی keil رو برای تایمر فعال کنم ولی هر کاری کردم نشد که نشد.
برنامه ی تایمر با وقفه داخل فرومای دیگه ام کار نمیکنه.
خواهشن هر کسی میتونه راهنمایی کنه ...
(تایمر عمل میکنه ولی وقفه نمیده)
[tt]#include <AT91SAM7X256.H> /* AT91SAMT7X256 definitions */
#include <delay.H>
//int k=0;
void timer0_Handler(void)__irq
{
while(1){*AT91C_PIOB_SODR=(1<<21);delay_ms(2 00);*AT91C_PIOB_CODR=(1<<21);delay_ms(200);}
//if(k%2)
// *AT91C_PIOB_SODR=(1<<21);
// else
// *AT91C_PIOB_CODR=(1<<21);
//k++;
//*AT91C_AIC_EOICR=*AT91C_TC0_SR;
}
int main (void)
{
*AT91C_WDTC_WDMR=(1<<15); //*AT91C_WDR_MR=(1<<15); *AT91C_WDTC_WDMR=AT91C_WDTC_WDDIS;
*AT91C_RSTC_RMR=0xA5000001; //*AT91C_RSTC_MR=0xA5000001;
*AT91C_CKGR_MOR=0xf01; //strtup time
*AT91C_CKGR_PLLR=0xec3f57;//50Mhz
*AT91C_PMC_MCKR=0x03;
*AT91C_PMC_SCER=0x01;
*AT91C_PMC_PCER=(1<<AT91C_ID_PIOB);
*AT91C_PIOB_PER=(1<<21);
*AT91C_PIOB_OER=(1<<21);
*AT91C_PMC_PCER=(1<<AT91C_ID_TC0);//|(1<<AT91C_ID_PIOB); //|(1<<0)|(1<<30)|(1<<31)
*AT91C_PIOB_PDR=(1<<23);
*AT91C_PIOB_MDER=(1<<23);
*AT91C_PIOB_ASR=(1<<23);
*AT91C_PIOB_SODR=(1<<21);delay_ms(500);*AT91 C_PIOB_CODR=(1<<21);delay_ms(500);
*AT91C_PIOB_SODR=(1<<21);delay_ms(500);*AT91 C_PIOB_CODR=(1<<21);delay_ms(500);
*AT91C_TC0_CMR=0x3C004; //
*AT91C_TC0_RA=0x5f5e; // (50M/1024)*0.5
*AT91C_TC0_RC=0xBEBC; // (50M/1024)*1
*AT91C_TC0_CCR=AT91C_TC_CLKEN | AT91C_TC_SWTRG;
AT91C_AIC_SVR[AT91C_ID_TC0]=(unsigned long)timer0_Handler; //
AT91C_AIC_SMR[AT91C_ID_TC0]=0x07; // AT91C_AIC_SRCTYPE_INT_POSITIVE_EDGE|5
*AT91C_AIC_ICCR=(1<<AT91C_ID_TC0); //
*AT91C_TC0_IER=AT91C_TC_CPBS; //
//*AT91C_AIC_ISCR=(1<<AT91C_ID_TC0);
*AT91C_AIC_IECR=(1<<AT91C_ID_TC0); //
while(1);
}
[/tt]
من تو برنامهی بالا فعلا فقط میخوام یه بار عمل کنه تا بعد ...
دیدگاه