你的位置:首页 > 操作系统

[操作系统]LPC54100 LPC54101 LPC54102 LPC541xx系列串口用法


(使用库,中断模式,无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);  }}