Arkadaşlar merhaba lpc23xx timer capture öğrenmeye çalışıyorum , bir butona 1 saniye basıldı yani lojik 0 oldu sonra 2 saniye bırakıldı sonra tekrardan devam edildi ,yukarıdaki işlem için yükselen ve düşen kenarları yakalamam gerekiyor. Yükselen kenarı yakalayabiliyorum fakat düşen kenarda nasıl bir işlem yapmam gerekiyor. Aşağıdaki kodlarda yükselen kenarı yakalıyorum lojik 1 , lojik 0 daki süreyi nasıl ölçebilirim.
void init_timer ( void )
{
PINSEL3 |= 0x00300000;
PCONP = (PCONP & 0xFFE87FDE) | (1UL<<1);
T0TCR = 0x02; // timer control durduruldu
T0PR = 12; // ön bölücü kristal değeri
T0CCR = 0x0005; //101
T0TCR = 0x01; // timer control başlatıldı
VICVectAddr4 = (unsigned long) TIMER0_IRQHandler; /* set interrupt vector 4 */
VICVectPriority4 = 15 ; /* default priority is 15 (lowest), can be set between 0-15 */
VICIntEnable |= (1UL<<4); /* Enable TIMER0 Interrupt */
}
void TIMER0_IRQHandler (void) __irq
{
value=T0CR0; // read the capture value
T0IR = (0x00); /* Clear CAP0.0 interrupt flag */
T0IR = (1UL<<4); /* Clear CAP0.0 interrupt flag */
T0IR = (1UL<<5); /* Clear CAP0.1 interrupt flag */
VICVectAddr = 0; /* Acknowledge Interrupt */
// interrupt
sprintf(str,"%d",value);
u1_string_gonder("logic 1 -");
u1_string_gonder(str);
u1_string_gonder("\n");
T0TCR = 0x02; // timer control durduruldu
T0TCR = 0x01; // timer control başlatıldı
}