int main() { uartinit(9600); while(1) { for(j = 0; j < 10; j++) { check = transmit(4); //check = transmit(d); if(!(check == 0)) { printf("Transmit error"); } } } } void uartinit(uint32_t brate) { uint32_t regVal, Fdiv; NVIC_DisableIRQ(UART0_IRQn); //Enable Pins 0_1 and 0_2 for UART0 LPC_IOCON->PIO0_1 &= ~0x07; /* UART0 I/O config */ LPC_IOCON->PIO0_1 |= 0x02; /* UART0 RXD LOC0 */ LPC_IOCON->PIO0_2 &= ~0x07; LPC_IOCON->PIO0_2 |= 0x02; /* UART0 TXD LOC0 */ /* Enable UART 0 clock */ LPC_SYSCON->PRESETCTRL |= (0x1<<2); LPC_SYSCON->SYSAHBCLKCTRL |= (0x1<<12); LPC_SYSCON->UART0CLKDIV = 0x1; /* divided by 1 */ LPC_UART0->LCR = 0x83; /* 8 bits, no Parity, 1 Stop bit */ regVal = LPC_SYSCON->UART0CLKDIV; Fdiv = ((SystemCoreClock/regVal)/16)/brate ; /*baud rate */ LPC_UART0->DLM = Fdiv / 256; LPC_UART0->DLL = Fdiv % 256; LPC_UART0->LCR = 0x03; /* DLAB = 0 */ LPC_UART0->FDR = 0x10; /* set to default value: 0x10 */ LPC_UART0->FCR = 0x07; /* Enable and reset TX and RX FIFO. */ /* Read to clear the line status. */ regVal = LPC_UART0->LSR; /* Ensure a clean start, no data in either TX or RX FIFO. */ while ( (LPC_UART0->LSR & (LSR_THRE|LSR_TEMT)) != (LSR_THRE|LSR_TEMT) ); NVIC_EnableIRQ(UART0_IRQn); //Re-enable interrupt after changes //LPC_UART0->IER = IER_RBR | IER_THRE | IER_RLS; /* Enable UART interrupt */ } int transmit(char val) { //printf("Trying transmit\n"); while(!(LPC_UART0->LSR & (0x01<<5))); LPC_UART0->THR = val; //printf("Transmitted\n"); return 0; } |