void EINT0_IRQHandler (void) { uint8_t NumberOfBit = 0; uint16_t RC5_Byte = 0; uint8_t MSB, LSB = 0; Timer0_MicroSeconds (444); for (NumberOfBit = 0; NumberOfBit <= 13; NumberOfBit++) { RC5_Byte |= ((LPC_GPIO2->FIOPIN & (1<<10)) >> NumberOfBit); Timer0_MicroSeconds (889); } MSB = (RC5_Byte & 0xFF00) >> 8; LSB = (RC5_Byte & 0x00FF) >> 0; // Clear interrupt LPC_SC->EXTINT = (1<<0); UART0_SendByte (MSB); UART0_SendByte (LSB); } int main (void) { UART0_Init (); UART0_Bitrate (115200); Timer0_Init (1);// value "1" just for init EINT0_init (); LPC_GPIO0->FIODIR |= (1<<22); LPC_GPIO0->FIOSET |= (1<<22); for (;;) { LPC_GPIO0->FIOPIN ^= (1<<22); Timer0_MicroSeconds (500); } return (0); } |
// main programm int main (void) { Timer32b_0_Init ();// Set clock to the Timer 32-bit No. 0 UART_Init (115200);// Set UART bitrate as 115200 bps LPC_SYSCON->SYSAHBCLKCTRL |= (1<<6); LPC_GPIO0->DIR|= (1<<1); LPC_GPIO0->DATA|= (1<<1); LPC_GPIO0->DIR &=~(1<<4);// PIO 0.4 as input LPC_GPIO0->DATA |= (1<<4);// PIO 0.4 with pull-up LPC_GPIO0->IS &=~(1<<4);// Interrupt sensitive on edge change (not on level) LPC_GPIO0->IBE &=~(1<<4);// Interrupt on pin PIO 0.4 is controlled through register GPIO0IEV LPC_GPIO0->IEV&=~(1<<4);// falling egde on pin PIO 0.4 triggers an interrupt LPC_GPIO0->IE |= (1<<4);// GPIO at PIO 0.4 Interrupt Enable NVIC_EnableIRQ (EINT0_IRQn);// 31 PIO_0 GPIO interrupt status of port 0 for (;;) { Timer32b_0_ms (500); LPC_GPIO0->DATA^= (1<<1);// toggle the LED on pin PIO 0.1 } return (0); } void Timer32b_0_Init (void) { LPC_SYSCON->SYSAHBCLKCTRL |= (1<<9); } void Timer32b_0_us (uint32_t Microseconds) { LPC_TMR32B0->TCR = 0x02;/* reset timer */ LPC_TMR32B0->PR = 0x00;/* set prescaler to zero */ LPC_TMR32B0->MR0 = Microseconds * ((SystemCoreClock/(LPC_TMR32B0->PR+1))/1000000); LPC_TMR32B0->IR = 0xff;/* reset all interrrupts */ LPC_TMR32B0->MCR = 0x04;/* stop timer on match */ LPC_TMR32B0->TCR = 0x01;/* start timer */ /* wait until delay time has elapsed */ while (LPC_TMR32B0->TCR & 0x01); } void PIOINT0_IRQHandler (void) { uint8_t NumberOfBit = 0; uint16_t RC5_Byte = 0; uint8_t MSB, LSB = 0; if (LPC_GPIO0->MIS & (1<<4))// If set the interrupt at PIO 0.4 { Timer32b_0_us (444); for (NumberOfBit = 0; NumberOfBit <= 13; NumberOfBit++) { RC5_Byte |= ((LPC_GPIO0->DATA & (1<<4)) >> NumberOfBit); Timer32b_0_us (889); } MSB = (RC5_Byte & 0xFF00) >> 8; LSB = (RC5_Byte & 0x00FF) >> 0; LPC_GPIO0->IC |= (1<<4);// Clear interrupt at PIO 0.4 asm ("nop"); asm ("nop"); UART_SendByte (MSB); UART_SendByte (LSB); } return; } |