在线时间587 小时
UID3253488
注册时间2016-3-21
NXP金币0

TA的每日心情 | 怒 2017-1-4 08:05 |
---|
签到天数: 11 天 连续签到: 1 天 [LV.3]偶尔看看II
版主
  
- 积分
- 2569

- 最后登录
- 2019-3-28
|
城里人真会玩---LPC4337串口自动波特率
USART自动波特率功能可用于测量基于的入站波特率“AT”协议(Hayes命令)如果启用,自动波特率功能将测量该位时间,并设置除数锁存寄存器DLM和DLL因此。
通过设置ACR启动位来启动自动波特率。自动波特率可以通过清零来停止ACR启动位。自动波特率完成并读取该位后,启动位将清零将返回自动波特率的状态(挂起/完成)。
有两种自动波特率测量模式可供选择,可由ACR模式选择位。在模式0中,波特率在USART的两个连续下降沿上测量Rx引脚(起始位的下降沿和最低有效位的下降沿)。在模式1下,波特率在下降沿和随后的上升沿之间测量USART Rx引脚的边沿(起始位的长度)。ACR AutoRestart位可用于自动重新启动波特率测量,如果a发生超时(速率测量计数器溢出)。如果该位置位,速率测量将在USART Rx引脚的下一个下降沿重新启动。自动波特率功能可以产生两个中断。
?如果中断使能(IER ABToIntEn置1),则IIR ABTOInt中断将置1并且自动波特率测量计数器溢出)。
?如果中断使能,则IIR ABEOInt中断将置1(IER ABEOIntEn置1并且自动波特率已成功完成)。必须通过设置相应的ACR来清除自动波特率中断ABTOIntClr和ABEOIntEn位。
在自动波特率期间,小数波特率发生器必须禁用(DIVADDVAL = 0)。此外,当使用自动波特率时,应该先对DLM和DLL寄存器进行写操作ACR寄存器写。 USART支持的最小和最大波特率为USART_PCLK的功能,数据位数,停止位和奇偶校验位。 功能还是很强大的,具体的请看用户手册的Chapter 40: LPC43xx/LPC43Sxx USART0_2_3这一部分比我讲的详细多了。
在使用时要借助串口的接收中断,以及要打开最重要的Auto-Bau中断,具体看代码吧
[code]/*
* PIN Mux to UART
*/
scu_pinmux(2, 0, MD_PDN, FUNC1); /* P2.00 -> UART0_TXD */
scu_pinmux(2, 1, MD_PLN | MD_EZI | MD_ZI, FUNC1); /* P2.01 -> UART0_RXD */
/*
* Config the uart bau..
*/
UARTConfigStruct.Baud_rate = 115200; /* Baudrate = 115200bps*/
UARTConfigStruct.Databits = UART_DATABIT_8; /* Word Length Select=8 data bit*/
UARTConfigStruct.Parity = UART_PARITY_NONE; /* Parity Select = None parity*/
UARTConfigStruct.Stopbits = UART_STOPBIT_1; /* Stop Bit Select = 1 Stop bit*/
UARTConfigStruct.Clock_Speed = 0;
UART_Init(LPC_USART0, &UARTConfigStruct);
/*
* Config the UART FIFO
*/
UARTFIFOConfigStruct.FIFO_DMAMode = DISABLE; /* FIFO_DMAMode = DISABLE */
UARTFIFOConfigStruct.FIFO_Level = UART_FIFO_TRGLEV2; /* FIFO_Level=UART_FIFO_TRGLEV0 */
UARTFIFOConfigStruct.FIFO_ResetRxBuf = ENABLE; /* FIFO_ResetRxBuf = ENABLE */
UARTFIFOConfigStruct.FIFO_ResetTxBuf = ENABLE; /* FIFO_ResetTxBuf = ENABLE */
UART_FIFOConfig(LPC_USART0, &UARTFIFOConfigStruct); /* FIFO_State = ENABLE */
/*
* Config UART Interrupt
*/
UART_IntConfig((LPC_USARTn_Type *)LPC_USART0, UART_INTCFG_ABEO, ENABLE);
UART_IntConfig((LPC_USARTn_Type *)LPC_USART0, UART_INTCFG_ABTO, ENABLE);
NVIC_SetPriority(USART0_IRQn, 1);
NVIC_EnableIRQ(USART0_IRQn);
|
|