/** \brief TODO init_UART_RS485_EDUCIAA Initialization method */ uint8_t init_UART_RS485_EDUCIAA(void) { /** \details * TODO description init_UART_RS485_EDUCIAA * * \param none * * \return uint8_t: TBD (to support errors in the init function) * */ /* UART initialization */ /** UART0 (RS485/Profibus) */ Chip_UART_Init(LPC_USART0); Chip_UART_SetBaud(LPC_USART0, 115200); Chip_UART_SetupFIFOS(LPC_USART0, UART_FCR_FIFO_EN | UART_FCR_TRG_LEV0); Chip_UART_TXEnable(LPC_USART0); Chip_SCU_PinMux(9, 5, MD_PDN, FUNC7); /*!< P9_5: UART0_TXD */ Chip_SCU_PinMux(9, 6, MD_PLN|MD_EZI|MD_ZI, FUNC7); /*!< P9_6: UART0_RXD */ Chip_UART_SetRS485Flags(LPC_USART0, UART_RS485CTRL_DCTRL_EN | UART_RS485CTRL_OINV_1); Chip_SCU_PinMux(6, 2, MD_PDN, FUNC2); /*!< P6_2: UART0_DIR */ return TRUE; }
void ciaaUARTInit(void) { /* UART0 (RS485/Profibus) */ Chip_UART_Init(LPC_USART0); Chip_UART_SetBaud(LPC_USART0, 115200); Chip_UART_TXEnable(LPC_USART0); Chip_SCU_PinMux(9, 5, MD_PDN, FUNC7); /* P9_5: UART0_TXD */ Chip_SCU_PinMux(9, 6, MD_PLN|MD_EZI|MD_ZI, FUNC7); /* P9_6: UART0_RXD */ Chip_UART_SetRS485Flags(LPC_USART0, UART_RS485CTRL_DCTRL_EN | UART_RS485CTRL_OINV_1); Chip_SCU_PinMux(6, 2, MD_PDN, FUNC2); /* P6_2: UART0_DIR */ /* Restart FIFOS: set Enable, Reset content, set trigger level */ Chip_UART_SetupFIFOS(LPC_USART0, UART_FCR_FIFO_EN | UART_FCR_TX_RS | UART_FCR_RX_RS | UART_FCR_TRG_LEV0); /* dummy read */ Chip_UART_ReadByte(LPC_USART0); /* enable rx interrupt */ Chip_UART_IntEnable(LPC_USART0, UART_IER_RBRINT); NVIC_EnableIRQ(USART0_IRQn); RingBuffer_Init(uarts[0].rrb, rxbuf[0], 1, UART_BUF_SIZE); RingBuffer_Init(uarts[0].trb, txbuf[0], 1, UART_BUF_SIZE); /* UART2 (USB-UART) */ Chip_UART_Init(LPC_USART2); Chip_UART_SetBaud(LPC_USART2, 115200); Chip_UART_TXEnable(LPC_USART2); Chip_SCU_PinMux(7, 1, MD_PDN, FUNC6); /* P7_1: UART2_TXD */ Chip_SCU_PinMux(7, 2, MD_PLN|MD_EZI|MD_ZI, FUNC6); /* P7_2: UART2_RXD */ Chip_UART_IntEnable(LPC_USART2, UART_IER_RBRINT); NVIC_EnableIRQ(USART2_IRQn); RingBuffer_Init(uarts[1].rrb, rxbuf[1], 1, UART_BUF_SIZE); RingBuffer_Init(uarts[1].trb, txbuf[1], 1, UART_BUF_SIZE); /* UART3 (RS232) */ Chip_UART_Init(LPC_USART3); Chip_UART_SetBaud(LPC_USART3, 115200); Chip_UART_TXEnable(LPC_USART3); Chip_SCU_PinMux(2, 3, MD_PDN, FUNC2); /* P2_3: UART3_TXD */ Chip_SCU_PinMux(2, 4, MD_PLN|MD_EZI|MD_ZI, FUNC2); /* P2_4: UART3_RXD */ Chip_UART_IntEnable(LPC_USART3, UART_IER_RBRINT); NVIC_EnableIRQ(USART3_IRQn); RingBuffer_Init(uarts[2].rrb, rxbuf[2], 1, UART_BUF_SIZE); RingBuffer_Init(uarts[2].trb, txbuf[2], 1, UART_BUF_SIZE); }
//================================================[UART Management]========================================================== void Board_UART_Init(LPC_USART_T *pUART) { if(pUART==LPC_USART0) { /* UART0 (RS485/Profibus) */ Chip_UART_Init(LPC_USART0); Chip_UART_SetBaud(LPC_USART0, 115200); Chip_UART_SetupFIFOS(LPC_USART0, UART_FCR_FIFO_EN | UART_FCR_TRG_LEV0); Chip_UART_TXEnable(LPC_USART0); Chip_SCU_PinMux(9, 5, MD_PDN, FUNC7); /* P9_5: UART0_TXD */ Chip_SCU_PinMux(9, 6, MD_PLN|MD_EZI|MD_ZI, FUNC7); /* P9_6: UART0_RXD */ Chip_UART_SetRS485Flags(LPC_USART0, UART_RS485CTRL_DCTRL_EN | UART_RS485CTRL_OINV_1); Chip_SCU_PinMux(6, 2, MD_PDN, FUNC2); /* P6_2: UART0_DIR */ uart0RxBufferData.buffer = NULL; uart0RxBufferData.size=0; uart0RxBufferData.index=0; uart0RxBufferData.flagNewPacket=0; uart0RxBufferData.timeoutCounter=0; //NVIC_SetPriority(USART0_IRQn, 1); //NVIC_EnableIRQ(USART0_IRQn); } else if(pUART==LPC_USART3) { /* UART3 (RS232) */ Chip_UART_Init(LPC_USART3); Chip_UART_SetBaud(LPC_USART3, 115200); Chip_UART_SetupFIFOS(LPC_USART3, UART_FCR_FIFO_EN | UART_FCR_TRG_LEV0); Chip_UART_TXEnable(LPC_USART3); Chip_SCU_PinMux(2, 3, MD_PDN, FUNC2); /* P2_3: UART3_TXD */ Chip_SCU_PinMux(2, 4, MD_PLN|MD_EZI|MD_ZI, FUNC2); /* P2_4: UART3_RXD */ uart3RxBufferData.buffer = NULL; uart3RxBufferData.size=0; uart3RxBufferData.index=0; uart3RxBufferData.flagNewPacket=0; uart3RxBufferData.timeoutCounter=0; //NVIC_SetPriority(USART3_IRQn, 1); //NVIC_EnableIRQ(USART3_IRQn); } /* Restart FIFOS: set Enable, Reset content, set trigger level */ Chip_UART_SetupFIFOS(pUART, UART_FCR_FIFO_EN | UART_FCR_TX_RS | UART_FCR_RX_RS | UART_FCR_TRG_LEV0); /* dummy read */ Chip_UART_ReadByte(pUART); /* enable rx interrupt */ Chip_UART_IntEnable(pUART, UART_IER_RBRINT); }
static void ciaaDriverUart_hwInit(void) { /* UART0 (RS485/Profibus) */ Chip_UART_Init(LPC_USART0); Chip_UART_SetBaud(LPC_USART0, 115200); Chip_UART_SetupFIFOS(LPC_USART0, UART_FCR_FIFO_EN | UART_FCR_TRG_LEV0); Chip_UART_TXEnable(LPC_USART0); Chip_SCU_PinMux(9, 5, MD_PDN, FUNC7); /* P9_5: UART0_TXD */ Chip_SCU_PinMux(9, 6, MD_PLN|MD_EZI|MD_ZI, FUNC7); /* P9_6: UART0_RXD */ Chip_UART_SetRS485Flags(LPC_USART0, UART_RS485CTRL_DCTRL_EN | UART_RS485CTRL_OINV_1); Chip_SCU_PinMux(6, 2, MD_PDN, FUNC2); /* P6_2: UART0_DIR */ /* UART2 (USB-UART) */ Chip_UART_Init(LPC_USART2); Chip_UART_SetBaud(LPC_USART2, 115200); Chip_UART_SetupFIFOS(LPC_USART2, UART_FCR_FIFO_EN | UART_FCR_TRG_LEV0); Chip_UART_TXEnable(LPC_USART2); Chip_SCU_PinMux(7, 1, MD_PDN, FUNC6); /* P7_1: UART2_TXD */ Chip_SCU_PinMux(7, 2, MD_PLN|MD_EZI|MD_ZI, FUNC6); /* P7_2: UART2_RXD */ /* UART3 (RS232) */ Chip_UART_Init(LPC_USART3); Chip_UART_SetBaud(LPC_USART3, 115200); Chip_UART_SetupFIFOS(LPC_USART3, UART_FCR_FIFO_EN | UART_FCR_TRG_LEV0); Chip_UART_TXEnable(LPC_USART3); Chip_SCU_PinMux(2, 3, MD_PDN, FUNC2); /* P2_3: UART3_TXD */ Chip_SCU_PinMux(2, 4, MD_PLN|MD_EZI|MD_ZI, FUNC2); /* P2_4: UART3_RXD */ }
void serial_info_init(struct __serial_info *serial) { uint32_t config = 0; /* Set Baud Rate */ Chip_UART_SetBaud(LPC_USART, serial->baud_rate); /* Set Data Bits */ switch(serial->data_bits) { case word_len5: config |= UART_LCR_WLEN5; break; case word_len6: config |= UART_LCR_WLEN6; break; case word_len7: config |= UART_LCR_WLEN7; break; case word_len8: config |= UART_LCR_WLEN8; break; default: config |= UART_LCR_WLEN8; serial->data_bits = word_len8; break; } /* Set Stop Bits */ switch(serial->stop_bits) { case stop_bit1: config |= UART_LCR_SBS_1BIT; break; case stop_bit2: config |= UART_LCR_SBS_2BIT; break; default: config |= UART_LCR_SBS_1BIT; serial->stop_bits = stop_bit1; break; } /* Set Parity Bits */ switch(serial->parity) { case parity_none: config |= UART_LCR_PARITY_DIS; break; case parity_odd: config |= (UART_LCR_PARITY_EN | UART_LCR_PARITY_ODD); break; case parity_even: config |= (UART_LCR_PARITY_EN | UART_LCR_PARITY_EVEN); break; default: config |= UART_LCR_PARITY_DIS; serial->parity = parity_none; break; } Chip_UART_ConfigData(LPC_USART, config); Chip_IOCON_PinMuxSet(LPC_IOCON, 0, 7, (IOCON_FUNC1 | IOCON_MODE_INACT | IOCON_DIGMODE_EN)); // CTS Chip_IOCON_PinMuxSet(LPC_IOCON, 0, 17, (IOCON_FUNC1 | IOCON_MODE_INACT | IOCON_DIGMODE_EN)); // RTS switch(serial->flow_control) { case flow_none: Chip_UART_ClearModemControl(LPC_USART, UART_MCR_RTS_CTRL | UART_MCR_AUTO_RTS_EN | UART_MCR_AUTO_CTS_EN); Chip_UART_ClearRS485Flags(LPC_USART, UART_RS485CTRL_DCTRL_EN | UART_RS485CTRL_NMM_EN | UART_RS485CTRL_OINV_1); break; case flow_rts_cts: Chip_UART_ClearRS485Flags(LPC_USART, UART_RS485CTRL_DCTRL_EN | UART_RS485CTRL_NMM_EN | UART_RS485CTRL_OINV_1); Chip_UART_SetModemControl(LPC_USART, UART_MCR_AUTO_RTS_EN | UART_MCR_AUTO_CTS_EN); break; case flow_rs422: Chip_IOCON_PinMuxSet(LPC_IOCON, 0, 17, (IOCON_FUNC0 | IOCON_MODE_INACT | IOCON_DIGMODE_EN)); // RTS Chip_GPIO_SetPinState(LPC_GPIO, 0, 17, 0); Chip_UART_ClearModemControl(LPC_USART, UART_MCR_RTS_CTRL | UART_MCR_AUTO_RTS_EN | UART_MCR_AUTO_CTS_EN); Chip_UART_ClearRS485Flags(LPC_USART, UART_RS485CTRL_DCTRL_EN | UART_RS485CTRL_NMM_EN | UART_RS485CTRL_OINV_1); break; case flow_rs485: Chip_UART_ClearModemControl(LPC_USART, UART_MCR_RTS_CTRL | UART_MCR_AUTO_RTS_EN | UART_MCR_AUTO_CTS_EN); Chip_UART_SetRS485Flags(LPC_USART, UART_RS485CTRL_DCTRL_EN | UART_RS485CTRL_NMM_EN | UART_RS485CTRL_OINV_1); break; default: break; } }
/** \brief Main function * * This is the main entry point of the software. * * \returns 0 * * \remarks This function never returns. Return value is only to avoid compiler * warnings or errors. */ int main(void) { /*Put initializations in a separate function hw_init(void) or something like that...*/ Chip_SCU_PinMux(1,0,MD_PUP|MD_EZI|MD_ZI,FUNC0); /* GPIO0[4], SW1 */ Chip_SCU_PinMux(1,1,MD_PUP|MD_EZI|MD_ZI,FUNC0); /* GPIO0[8], SW2 */ Chip_SCU_PinMux(1,2,MD_PUP|MD_EZI|MD_ZI,FUNC0); /* GPIO0[9], SW3 */ Chip_SCU_PinMux(1,6,MD_PUP|MD_EZI|MD_ZI,FUNC0); /* GPIO1[9], SW4 */ Chip_GPIO_SetDir(LPC_GPIO_PORT, 0,(1<<4)|(1<<8)|(1<<9),0); Chip_GPIO_SetDir(LPC_GPIO_PORT, 1,(1<<9),0); /* LEDs */ Chip_SCU_PinMux(2,0,MD_PUP,FUNC4); /* GPIO5[0], LED0R */ Chip_SCU_PinMux(2,1,MD_PUP,FUNC4); /* GPIO5[1], LED0G */ Chip_SCU_PinMux(2,2,MD_PUP,FUNC4); /* GPIO5[2], LED0B */ Chip_SCU_PinMux(2,10,MD_PUP,FUNC0); /* GPIO0[14], LED1 */ Chip_SCU_PinMux(2,11,MD_PUP,FUNC0); /* GPIO1[11], LED2 */ Chip_SCU_PinMux(2,12,MD_PUP,FUNC0); /* GPIO1[12], LED3 */ Chip_GPIO_SetDir(LPC_GPIO_PORT, 5,(1<<0)|(1<<1)|(1<<2),1); Chip_GPIO_SetDir(LPC_GPIO_PORT, 0,(1<<14),1); Chip_GPIO_SetDir(LPC_GPIO_PORT, 1,(1<<11)|(1<<12),1); Chip_GPIO_ClearValue(LPC_GPIO_PORT, 5,(1<<0)|(1<<1)|(1<<2)); Chip_GPIO_ClearValue(LPC_GPIO_PORT, 0,(1<<14)); Chip_GPIO_ClearValue(LPC_GPIO_PORT, 1,(1<<11)|(1<<12)); /*Hardware GPIO initialization (leds, buttons ...)*/ /*UART initialization*/ /* UART0 (RS485/Profibus) */ Chip_UART_Init(LPC_USART0); Chip_UART_SetBaud(LPC_USART0, 115200); Chip_UART_SetupFIFOS(LPC_USART0, UART_FCR_FIFO_EN | UART_FCR_TRG_LEV0); Chip_UART_TXEnable(LPC_USART0); Chip_SCU_PinMux(9, 5, MD_PDN, FUNC7); /* P9_5: UART0_TXD */ Chip_SCU_PinMux(9, 6, MD_PLN|MD_EZI|MD_ZI, FUNC7); /* P9_6: UART0_RXD */ Chip_UART_SetRS485Flags(LPC_USART0, UART_RS485CTRL_DCTRL_EN | UART_RS485CTRL_OINV_1); Chip_SCU_PinMux(6, 2, MD_PDN, FUNC2); /* P6_2: UART0_DIR */ /* UART2 (USB-UART) */ Chip_UART_Init(LPC_USART2); Chip_UART_SetBaud(LPC_USART2, 115200); Chip_UART_SetupFIFOS(LPC_USART2, UART_FCR_FIFO_EN | UART_FCR_TRG_LEV0); Chip_UART_TXEnable(LPC_USART2); Chip_SCU_PinMux(7, 1, MD_PDN, FUNC6); /* P7_1: UART2_TXD */ Chip_SCU_PinMux(7, 2, MD_PLN|MD_EZI|MD_ZI, FUNC6); /* P7_2: UART2_RXD */ /* UART3 (RS232) */ Chip_UART_Init(LPC_USART3); Chip_UART_SetBaud(LPC_USART3, 115200); Chip_UART_SetupFIFOS(LPC_USART3, UART_FCR_FIFO_EN | UART_FCR_TRG_LEV0); Chip_UART_TXEnable(LPC_USART3); Chip_SCU_PinMux(2, 3, MD_PDN, FUNC2); /* P2_3: UART3_TXD */ Chip_SCU_PinMux(2, 4, MD_PLN|MD_EZI|MD_ZI, FUNC2); /* P2_4: UART3_RXD */ /*Chip_UART_IntDisable((LPC_USART_T *)LPC_USART2, UART_IER_THREINT);*/ /* this one calls write */ /*ciaaDriverUart_txConfirmation(device);*/ /* enable THRE irq (TX) */ /* Chip_UART_IntEnable((LPC_USART_T *)LPC_USART2, UART_IER_THREINT);*/ uint64_t j; uint8_t size = 28; uint8_t i = 0; uint8_t data = 0; char message[] = "Follow the white rabbit...\n\r"; /* just send the F ...! */ /* Chip_UART_Send((LPC_USART_T *) LPC_USART2, message, index); */ /*looking for a 'a' character*/ /* perform the needed initialization here */ while(1) { /* do nothing */ data = i = 0; /*wait for keyboard character*/ while (data == 0) { data = Chip_UART_ReadByte((LPC_USART_T *)LPC_USART2); switch (data){ case 'r': /*Toggle Red Led*/ Chip_GPIO_SetPortToggle(LPC_GPIO_PORT,LED2_PORT,LED_2); break; case 'v': /*Toggle Green Led*/ Chip_GPIO_SetPortToggle(LPC_GPIO_PORT,LED3_PORT,LED_3); break; case 'a': /*Toggle Yellow Led*/ Chip_GPIO_SetPortToggle(LPC_GPIO_PORT,LED1_PORT,LED_1); break; default: data = 0; } } /*Send string*/ while(((Chip_UART_ReadLineStatus((LPC_USART_T *)LPC_USART2) & UART_LSR_THRE) != 0) && (i < size)) { /* send first byte */ Chip_UART_SendByte((LPC_USART_T *)LPC_USART2, message[i]); /* bytes written */ /*delay*/ for (j=0;j<50000;j++){ asm ("nop"); } i++; } } return 0; }