张传演,卓秀然,孟召伟,钱 丹,李红斌,蔡 伟
(1.中国人民解放军73022部队 浙江 杭州 310024;2.福建省气象服务中心 福建 福州 350001)
串口(SCI)是微控制器(MCU)与外围设备等进行异步串行通信的接口[1]。C*Core系列芯片中含2个相同且独立SCI,采用异步方式传送数据,但数据接受/发送速率 (波特率)统一,SCI模块中有一个波特率发生器,产生波特率时钟。
SCI接受器与发生器利用波特率发生器设定速率,但设定值与实际值之间具有误差,称为容限误差。一定范围的容限值,不影响SCI数据传输的正确性。但随着波特率、芯片主频大小变化,容限值会超出允许误差范围,造成SCI传输和接受的数据不匹配现象。确定设定波特率、主频与波特率容限值之间关系,研究与解决传输与接受双方数据不匹配问题成为C*Core芯片工程应用中十分重要的工作。
SCI使用标准的异步串行传送数据格式发送和接受串行数据[2],串行数据格式如图1所示,图中含两种帧,分别为10位和11位,帧的传输种类由SCI控制寄存器中的M位决定:M=1,帧长 11 位;M=0,帧长 10 位。
SCI异步传送帧数据时,要求SCI对方按统一波特率接受/发送数据,确保数据传输速率相等。为了统一波特率,SCI发送器及接收器中都含有一个波特率发生器如图2所示。

图1 SCI数据格式Fig.1 SCI data format

图2 SCI发送器框图Fig.2 SCI transmitter block diagram
波特率发生器是一个13位的分频器,由波特率寄存器(SCIBD)设置分频因子(SBR[12:0])对系统时钟分频[3]。 SCI波特率可由式(1)计算得出:

通过上式可知,波特率发生器输出的时钟经16分频后得到发送时钟,但可直接作为接受器时钟。……