ARM嵌入式UART初始化程序解释
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
UART初始化程序解释
姓名:xxx
学号:20185228000
0x4004 8080) 位描述
复位值
允许I/O 配置模块的时钟0 12允许UART 的时钟0
0x4004 8098) 位描述
复位值
0x00
DIV 的值为0x0 可以关
UART相关寄存器配置
LPC_SYSCON->SYSAHBCLKCTRL |= (1<<16); // 使能IOCON时钟LPC_IOCON->PIO1_6 &= ~0x07;
LPC_IOCON->PIO1_6 |= 0x01; //把P1.6脚设置为RXD
LPC_IOCON->PIO1_7 &= ~0x07;
LPC_IOCON->PIO1_7 |= 0x01; //把P1.7脚设置为TXD
LPC_SYSCON->SYSAHBCLKCTRL &= ~(1<<16); // 禁能IOCON时钟
LPC_SYSCON->UARTCLKDIV = 0x1;//时钟分频值为1
LPC_SYSCON->SYSAHBCLKCTRL |= (1<<12);//允许UART时钟
复位值0
00x4000 800C)
0x4000 800C)
复位值
0奇校验。发送字符和附带的校验位中1 的个数为奇数Array
偶校验。发送字符和附带的校验位中1 的个数为偶数
0x4000 800C)
复位值
0 U0LCR[6] 为高电平有效时,输出
复位值UART除数锁存LSB寄存器与U0DLM寄存器一0x010
0x4000 8000 当DLAB = 1) 位域描述
UART 除数锁存是UART 波特率发生器的一部分,并且保持使用的值,与分数分频器一起对UART_PCLK 时钟分频来产生波特率时钟,波特率时钟是波特率的16 倍。U0DLL 和U0DLM 寄存器一起构成一个16 位除数,其中U0DLL 包含除数的低8 位,U0DLM 包含除数的高8 位;值0x0000 被看作是0x0001,因为除数是不允许为0。当访问UART 除数锁存寄存器时,U0LCR 中的除数锁存访问位(DLAB)必须为1
复位值UART除数锁存MSB寄存器与U0DLL寄存器一0x000
0x4000 8004 当DLAB = 1) 位域描述
0x4000 8008, 只写) 位域描述
复位
值
U0FCR 控制UART0 RX 和TXFIFOs 的操作。
0x4000 8008, 只写) 位域描述
复位
值
U0FCR 控制UART0 RX 和TXFIFOs 的操作。
相关寄存器配置及波特率计算
LPC_UART->LCR = 0x83; //8位传输,1个停止位,无几偶校验,允许访问除数锁
; //计算该波特率要求的除数锁存寄
//写除数锁存器高位值
//写除数锁存器低位值
DLM 和DLL 为标准UART 波特率除数寄存器。
UART相关寄存器配置
void UART_init(uint32_t baudrate)
{
uint32_t DL_value;
LPC_SYSCON->SYSAHBCLKCTRL |= (1<<16); // 使能IOCON时钟
LPC_IOCON->PIO1_6 &= ~0x07;
LPC_IOCON->PIO1_6 |= 0x01; //把P1.6脚设置为RXD
LPC_IOCON->PIO1_7 &= ~0x07;
LPC_IOCON->PIO1_7 |= 0x01; //把P1.7脚设置为TXD
LPC_SYSCON->SYSAHBCLKCTRL &= ~(1<<16); // 禁能IOCON时钟
LPC_SYSCON->UARTCLKDIV = 0x1;//时钟分频值为1
LPC_SYSCON->SYSAHBCLKCTRL |= (1<<12);//允许UART时钟
LPC_UART->LCR = 0x83; //8位传输,1个停止位,无几偶校验,允许访问除数锁存器DL_value= SystemCoreClock/16/baudrate; //计算该波特率要求的除数锁存寄存器值LPC_UART->DLM = DL_value/ 256;//写除数锁存器高位值
LPC_UART->DLL = DL_value% 256;//写除数锁存器低位值
LPC_UART->LCR = 0x03; //DLAB置0
LPC_UART->FCR = 0x07; //允许FIFO,清空RxFIFO和TxFIFO
}
谢谢观看