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);
}
}