本文将开始分析定时器OSTM0初始化的代码,其他已发布的代码分析可参看以下链接
一、系统时钟初始化R_SYSTEM_ClockInit();
二、定时器初始化R_SYSTEM_TimerInit();
email:1256153255@qq.com
website for get 瑞萨RH850开发板 and 瑞萨E1仿真器
言归正传开始介绍本文的内容。
3、UART初始化
Code segment 3.1
图3.1
从上面可知,RH850F1L的LIN和UART是共用的,因此LIN和UART不能同时使用。
Code segment 3.1->Line86,将port0_2设置为输出模式,用于UART的TX。从图3.1的Alternate Mode表可知,P0_2的 2nd Alternative Mode的Output是RLIN30TX。
Code segment 3.1->Line87,将port0_3设置为输入模式,用于UART的RX。从图3.1的Alternate Mode表可知,P0_3的 2nd Alternative Mode的Input是RLIN30RX。
Code segment 3.1->Line89:函数R_RLIN30_UartInit()展开。
Code segment 3.2是UART寄存器的初始化配置,包括禁能LIN,设置波特率、停止位等。
Code segment 3.2
Code segment 3.1->Line266,禁能UART的RX和TX
图3.2
Code segment 3.2->Line267,调整为LIN Reset模式
图3.3
图3.4
Code segment 3.2->Line270,RLN30LMD=0x01u;
RLN30LMD的bit1 bit0 = 01,表示将LIN/UART共用模式调整为UART模式
图3.5
Code segment 3.2->Line274串口参数配置
UBLS=0,UART数据位长8bit
UBOS = 0:LSB First
USBLS:停止位长1bit
UPS[1:0]=00,无奇偶校验
URPS=0,接收正常输出,不用发转
UTPS=0,发送正常输出,不用发转
图3.6
Code segment 3.2->Line282无error检测
图3.7
Code segment 3.2->Line285 bit sampleing count和prescaler clock设置
NSPB[3:0]=5(0101) → 6 samplings
LPRS[2:0]=0(000) → 不分频
图3.8
图3.9
Code segment 3.2->Line289 设置波特率
到了这里应该也会有朋友要问了,这个0x02B5(693)值和9600bps的波特率有什么关系,不急不急,慢慢来分析。
从图3.9得知
baud rate = frequency * RLN3nLWBR.LPRS[2:0] ÷ (RLN3nLBRP01 + 1) ÷ RLN3nLWBR.NSPB[3:0]
= 40MHz * (1/1) ÷ (0x02B5+1) ÷ 6
≈ 9600bps
Code segment 3.2->Line294 取消LIN Reset模式
在Code segment 3.2->Line267设置为LIN Reset模式,此处取消设置
Code segment 3.2->Line298 使能UART的TX和RX
在Code segment 3.2->Line266设置为禁能UART的TX和RX,此处打开。
图3.10
Code segment 3.1 ->Line93 使能UART发送中断MASK
*IC_ptr &= ~0x80;将bit7置为0,使能UART中断处理
图3.11
Code segment 3.1 ->Line92 使能UART发送中断
*IC_ptr |= 0x40;将bit6置为1,使能中断向量表中的UART中断
到此为止,UART的初始化设置已全部分析完成。