پاسخ : پاسخ : کار با تایمر SAM7X
تا آخر شب خودم مینویسم برات
اگه دیدی چیزی ننوشتم بهم پیغام خصوصی بده
نوشته اصلی توسط rezaf
سلام. این کار رو هم انجام دادم کد رو به شکل زیر تغییر دادم حتی بقیه برنامه رو برای تست بی خیال شدم و حلقه رو آوردم بالاتر روشن خاموش شدن LED تو تابع وقفه رو هم منتقل کردم به تابع main داخل حلقه while. عددای PLL رو هم مثل شما دادم اما بازممممممممممم فقطططططط یکککک بار LED روشن و خاموش میشه. هر جور acknowledge و clear لازم بود تو تابع وقفه انجام دادم حس می کنم تو تابع main هم باید یه کارایی انجام بدم که وقفه ها ادامه پیدا کنه. :cry:
: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; } } }
اگه دیدی چیزی ننوشتم بهم پیغام خصوصی بده
دیدگاه