以TMS320F2803x为例,其SCI Reference Guide (SPRUGH1C)对SCI模块的波特率自适应作了如下描述:
1、置位SCIFFCT寄存器的CDC位,同时,向SCIFFCT寄存器的ABDCLR位写1来清除ABD位;
2、初始化波特率寄存器为1或者低于500kbps的波特率上限;
3、允许SCI以期望的波特率来接收来自主机的字符“A”或者“a”;
4、如果第一个字符是“A”或者“a”,自动波特率检测硬件将检测出波特率,并且置位ABD位;
5、自动检测硬件将更新波特率寄存器,同时产生一个中断;
6、通过向SCIFFCT寄存器的ABDCLR位写1来清除ABD位,并通过向CDC位写0来禁止自动波特率捕获;
7、读取接收缓冲器中的字符“A”或者“a”来清空缓冲器和缓冲器状态;
8、如果在CDC位为1时,ABD位被置位,则会触发SCI发送FIFO中断,在中断服务函数之后,CDC位必须使用软件清除。
作者注:如果单纯地对波特率进行自适应,还可以检测一个bit的时间,根据该时间来计算出波特率,这就需要设置一个很短的定时器(比如10us),在该定时器中对位时间进行计数。