ايران ويج

نسخه‌ی کامل: راه اندازی rtt در at91sam7x256
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
با سلام من میخوام با rtt ثانیه بشمارم ولی نمیدونم چرا دقیق شمارش نمیکنه مثلا تو شصت ثانیه بین چهار تا 5 ثانیه جا میمونه
اینم از کدش و هدر هاش
کد php:
void rtt(void__irq
}
    ;++
a
    
()AT91C_BASE_AIC->AIC_EOICR RTT_GetStatus
    
(delay_ms(5
{
 
()
int main
}
    ;(
AIC_ConfigureInt(AT91C_ID_SYS
    
;(AIC_EnableInt(AT91C_ID_SYS
    
    
;(RTT_SetPrescaler(32768
    
;(RTT_EnableIT(AT91C_RTTC_RTTINCIEN

    
;()lcd_init
    
;()lcd_clear
(while(1
    
}
        ;(
lcd_gotoxy(0,0
        
;(lcd_puts(a
        
;(delay_ms(100
{


 بعد هودم نفهمیدم این delay داخل زیرروال وقفه رو چرا به کار بردم که .چون وقتی بر میدارم دیگه شمارشش یه جوری میشه یعنی یه به صورت نجومی بالا میره بعد ال سی دی دیگه هیچی نمایش نمیده.
لطفا راهنمایی کنین.
یه سوال دیگه هم اینکه ایا راهی هست برا تغذیه rtt که با خاموش و sleep شدن میکرو باز rtt فعال باشه و زمان رو نگهداره؟
در این برنامه هنگامی که داخل حلقه while وقفه اتفاق می افتد روند ارسال دیتا به ال سی دی متوقف می شود و بنا بر این هیچ چیز روی ال سی دی نشان داده نمیشود و برنامه از خط بعد ادامه پیدا می کند.
راه حل:
شما  تمام تاخیر ها رو بردار  و تابع init ال سی دی رو هم قبل از enable کردن تایمر بگذار و تابع نمایش روی ال سی دی رو توی روتین مربوط به وقفه قرار بده یعنی:


   
   
کد:
void rtt(void) __irq
}
    ;++a
    ()AT91C_BASE_AIC->AIC_EOICR = RTT_GetStatus
    ;(lcd_puts(a
{
کد:
()int main
}
    ;(AIC_ConfigureInt(AT91C_ID_SYS
    ;(AIC_EnableInt(AT91C_ID_SYS
    
    ;(RTT_SetPrescaler(32768
   

    ;()lcd_init
    ;()lcd_clear
کد:
;(RTT_EnableIT(AT91C_RTTC_RTTINCIEN
کد:
(while(1
    }
       
{
{