(使用库,中断模式,无FIFO)
//初始化函数void uart_init(baudRate){ UART_BAUD_T baud; UART_CFG_T cfg; //使能时钟 Chip_Clock_EnablePeriphClock(SYSCON_CLOCK_FRG); //配置波特率 //获取时钟频率 baud.clk = Chip_Clock_GetAsyncSyscon_ClockRate(); //希望得到的波特率 baud.baud = baudRate; baud.ovr = 0; baud.mul = 0; baud.div = 0; if (ROM_UART_CalBaud(&baud) != LPC_OK) { //计算分频系数失败 printf("Error calculating baud rate\r\n"); } /* 设置小数分频器 */ Chip_SYSCON_SetUSARTFRGCtrl(baud.mul, 0xFF); //使能串口0时钟 Chip_Clock_EnablePeriphClock(SYSCON_CLOCK_USART0); //配置IO口P0.0和P0.1为串口功能 Chip_IOCON_PinMuxSet(LPC_IOCON, 0, 0, (IOCON_FUNC1 | IOCON_MODE_INACT | IOCON_DIGITAL_EN)); Chip_IOCON_PinMuxSet(LPC_IOCON, 0, 1, (IOCON_FUNC1 | IOCON_MODE_INACT | IOCON_DIGITAL_EN)); //获取串口需要的空间 size = ROM_UART_GetMemSize(); //申请串口需要的空间 drv_mem = (uint32_t *)malloc(size); //调用初始化函数初始化串口0 UART0 = ROM_UART_Init(drv_mem, LPC_USART0_BASE, NULL); //配置串口 //8位数据使能接收中断 cfg.cfg = UART_CFG_8BIT | UART_CFG_BRKRX; //设置分频值,直接使用ROM_UART_CalBaud计算的结果 cfg.div = baud.div; cfg.ovr = baud.ovr; cfg.res = UART_BIT_DLY(baudRate); //配置串口0 ROM_UART_Configure(UART0, &cfg); //使能中断 NVIC_ClearPendingIRQ(UART0_IRQn); NVIC_EnableIRQ(UART0_IRQn); LPC_USART0->INTENSET |= (1<<0);}//中断服务函数void UART0_IRQHandler(void){ uint8_t dat; //发送中断 if (LPC_USART0->INTSTAT & (1<<2)) { //等待发送完成 ROM_UART_WaitTx(UART0); } //接收中断 if (LPC_USART0->INTSTAT & (1<<0)) { //读取数据 dat = LPC_USART0->RXDAT; printf("%c", dat); }}
原标题:LPC54100 LPC54101 LPC54102 LPC541xx系列串口用法
关键词: