پاسخ : پاسخ : کار با تایمر SAM7X
تا آخر شب خودم مینویسم برات
اگه دیدی چیزی ننوشتم بهم پیغام خصوصی بده
نوشته اصلی توسط rezaf
سلام. این کار رو هم انجام دادم کد رو به شکل زیر تغییر دادم حتی بقیه برنامه رو برای تست بی خیال شدم و حلقه رو آوردم بالاتر روشن خاموش شدن LED تو تابع وقفه رو هم منتقل کردم به تابع main داخل حلقه while. عددای PLL رو هم مثل شما دادم اما بازممممممممممم فقطططططط یکککک بار LED روشن و خاموش میشه. هر جور acknowledge و clear لازم بود تو تابع وقفه انجام دادم حس می کنم تو تابع main هم باید یه کارایی انجام بدم که وقفه ها ادامه پیدا کنه. :cry:
:angry:
:angry:کد:
void timer1_c_irq_handler (void)
{
volatile unsigned int dummy;
dummy = AT91C_BASE_TC1->TC_SR;
dummy = dummy;
T_Counter++;
TimerFlag = 1;
dummy = AT91C_BASE_TC1->TC_CV;
*AT91C_AIC_EOICR = 0;
AT91C_BASE_AIC->AIC_EOICR = AT91C_BASE_TC0->TC_SR; // Interrupt Ack
AT91C_BASE_AIC->AIC_ICCR = (1 << AT91C_ID_TC0); // Interrupt Ack
AT91C_BASE_TC1->TC_CCR |= AT91C_TC_CLKEN | AT91C_TC_SWTRG;
AT91C_BASE_AIC->AIC_EOICR = AT91C_BASE_AIC->AIC_EOICR; //interrupt acknowledge
}
int main (void)
{
unsigned int dummy ;
AT91F_PIO_CfgOutput(AT91C_BASE_PIOA, AT91C_PIO_PA2); //LED 1
AT91F_PIO_CfgOutput(AT91C_BASE_PIOA, AT91C_PIO_PA3); //LED 2
AT91C_BASE_PMC->PMC_PCER = 1 << AT91C_ID_TC1; // Enable peripheral clock
AT91C_BASE_TC1->TC_CCR = AT91C_TC_CLKDIS; // Disable TC clock
AT91C_BASE_TC1->TC_IDR = 0xFFFFFFFF; // Disable interrupts
dummy = AT91C_BASE_TC1->TC_SR; // Clear status register
AT91C_BASE_TC1->TC_CMR = AT91C_TC_CLKS_TIMER_DIV1_CLOCK | AT91C_TC_CPCTRG; // Set mode
AT91C_BASE_TC1->TC_CCR = AT91C_TC_CLKEN ; // Enable the Clock counter
AT91C_BASE_TC1->TC_IER = AT91C_TC_CPCS;
AT91C_BASE_AIC->AIC_IDCR = 0x1 << AT91C_ID_TC1;
AT91C_BASE_AIC->AIC_SVR[AT91C_ID_TC1] = (unsigned int) timer1_c_irq_handler;
AT91C_BASE_AIC->AIC_SMR[AT91C_ID_TC1] = AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL | 4 ;
AT91C_BASE_AIC->AIC_ICCR = 0x1 << AT91C_ID_TC1;
AT91C_BASE_AIC->AIC_IECR = 0x1 << AT91C_ID_TC1;
AT91C_BASE_TC1->TC_RC = 93857;
AT91C_BASE_TC1->TC_CCR = AT91C_TC_SWTRG;
while(1)
{
if(TimerFlag==1)
{
AT91F_PIO_SetOutput(AT91C_BASE_PIOA, AT91C_PIO_PA2); //timer int LED notification
delay_ms(100);
AT91F_PIO_ClearOutput(AT91C_BASE_PIOA, AT91C_PIO_PA2);
TimerFlag = 0;
}
}
}
اگه دیدی چیزی ننوشتم بهم پیغام خصوصی بده








دیدگاه