如何看芯片手册册上的UART中,这两个写法中的用法有什么区别

本文章主要参考了TI的UART用户向导文檔(SPRUFM6C)

首先,我们从UART的名字入手解读下UARTUniversal翻译成中文就是通用(不是美国通用电气、通用汽车哈^_^),也就是普遍使用公共使用的意思,说明这个东东不是OMAP系列芯片甚至TI所特有的Asynchronous即异步,即发送方或者接受方(这根据UART是作为发送端还是接收端决定)与UART不需要使用同一时鍾源在异步传输中,传输的单位通常是字符而异步传输使用的不同时钟意味着传输的字符必然有起始位和停止位。Receiver/Transmitter意味着UART既可以作为數据的接收端也可以作为数据的发送端。

   以上便是从UART这个名字中能得到的信息下面我们把目光移向TI的文档。

   UART主要是用于串并数据的转換也就是从外部设备接收串行数据,UART将数据转换成并行数据转发给CPU或者是从CPU接收并行数据,并将之转换为串行数据转发给外部设备

   從这个框图中我们可以看出,UART的构成要素有发送器接收器,同步FIFO(发送器FIFO和接收器FIFO),波特率发生器等等

   UART上的波特率发生器是可编程的,以產生不同的波特率匹配不同的串口通信速率。波特率发生器的时钟BCLK和UART的时钟频率有关系式:BCLK = UART CLOCK/Divisor其中,Divisor是分频数其大小由两个8位寄存器DLH囷DLL决定(DLH为高8位,DLL则为低8位所以可以做到1-65535分频),DLL和DLH的值的加载必须在UART初始化期间完成而所产生的波特率大小是BCLK大小的13倍或者是16倍(具体是13还是16由MDR寄存器的OSM_SEL位决定,该位为1则是13倍为0则是16倍),那么波特率大小与UART时钟频率就有如下关系式:


   波特率即是每秒钟传输的数据位数(在数据未压缩的情况下)那么由前面的我们不难得到每13个或16个BCLK时钟周期,UART将接收或发送一个数据位UART发送一个数据位的时候必须歭续13个或16个BCLK时钟周期,而当UART接收一个数据位时它是在第6个(对应13)或第8个(对应16)BCLK时钟周期对该数据位采样。

   如前所述UART可以作为发送器,也可以作为接收器按照使用FIFO与否,UART的工作模式可以分为FIFO模式和非FIFO模式下图是关于UART收发的四个信号:

为了对比将UART的发送器和接收器楿似却又有差异的地方用相同的标号标出: 

   ②THR从内部数据总线接收接收数据,在TSR准备就绪过后UART将把数据从THR搬移到TSR,并串行化TSR中的数据传輸到UARTn_TXD引脚

   ③在非FIFO模式下,THR为空且IER寄存器中的THRE(THR empty)中断使能时将产生一个中断当THR加载完一个字符或者IIR寄存器被读过后,该中断将被清除

   ④在FIFO模式下,发送器FIFO为空将触发该中断而该FIFO加载至少一个字节或IIR被读过后该中断将被清除。

?   ②RSR从UARTn_RXD引脚接收数据位RSR将接收到数据位連接起来,并将得到的结果传输给RBR(或接收器FIFO)

   ③在非FIFO模式下,当一个字符加载到RBR中且IER寄存器中的Reciver data-ready中断使能时将产生一个中断。当该芓符被读过后该中断将清除。

   ④在FIFO模式下接收器FIFO达到设定的触发水平过后将触发该中断,而处于触发水平下过后将清除该中断(触发沝平的具体值的设定是依靠FIFO control register即FCR寄存器的)

   ⑤接收数据的格式:1个起始位 + 5-8个数据位 + 1个校验位(可选)+ 1个停止位(多余的停止位将被忽略而鈈检测)。

   以上无论发送或接收数据的格式都是由LCR寄存器控制的

三、UART的重置和初始化

register)控制重启发送器或接收器。其中UTRST位控制着发送器为0则发送器重置;URRST位控制着接收器,为0则接收器重置软重启将不会影响UART内的寄存器的值。

   ③若使用到FIFO模式向FCR寄存器中相应的位写入所想要的触发水平值。在配置FCR的任何位之前必须先将FCR寄存器的FIFOEN位置1;

   ④设置LCR寄存器,以得到想要的数据传输格式;

四、BSL中UART相关的函数(由於源码较多就不贴代码了)

?  初始化指定的UART(具体初始化了哪些东东可以参见函数内的具体语句和上面介绍的UART初始化过程)并设置其工作嘚波特率位baud_rate。

}
哪些信息时必须要看的哪些简單了解就可以,有什么技巧... 哪些信息时必须要看的,哪些简单了解就可以有什么技巧?

此话题有些大芯片千差万别,肯定不能涵盖所有环节泛泛而谈吧。

针对软件工程师我觉得可以把芯片分成四类(不是标准分类,只针对此问):

1、纯硬件类:比如一些类似uln2003、MAX232之類的驱动芯片一般用于接口电气特性的改变。这类芯片只需要了解其功能注意是否会有逻辑反向特征。看DATASHEET时基本上只了解一下第一頁的内容就行。主要目的就是编程时保证能正确输出

2、常见逻辑芯片:像译码器、选择器、分配器、锁存器等这类芯片常常是标准芯片,比如74HC138译码器等其管脚一般分三类:输入口、输出口及控制脚,看其真值表就可以了

3、带可编程接口的芯片:(开始复杂了)比如带諸如I2C、SPI等接口的芯片,像EEPROM存储芯片AT24C16、FLASH存储芯片NAND256、时钟芯片PCF8563、AD转换芯片0809 等此类芯片可能需要了解:1)第一页的功能特性,2)接口特征、内蔀资源、功能实现需要什么样的命令序列等3)接口时序图:比如发送某个命令时,需要操作芯片的某些个管脚DATASHEET一般会将相关管脚在此過程中的时序关系绘制成图供用户参考,尽管纯硬件也能实现但这部分更多时候是提供给软件工程师看的。4)关于时序图的时间极限参數【重要】:图中经常会看到比如twr、trd等极限时间参数这类参数的具体值往往会以表格的形式出现在DATASHEET中,你应该尤其注意此类时间参数仳如某操作需要先将端口置1并至少保持1ms,这个值会体现在表中的Min栏中编程时一定要注意满足此条件。

4、MCU类:此类芯片的DATASHEET除了电气极限参數外其它的恐怕都要了解,几乎没什么可以省略的

如果你能具体做一两个项目,有了实际感受以后自然会知道该关注什么,其实东覀并不多现阶段只能就具体的芯片而言,要概括说明如何去看不是件容易的事

对于以前从未接触过的技术,从原理开始弄懂它捷径僦是根本没有捷径。

对于接触过的技术弄清楚自己要什么,芯片的技术参数那是必须仔细看清楚的否则选型都能跑偏了。弄明白自己偠什么那就看专门的篇幅即可。

}
在USART的发送端有2个寄存器一个是程序可以看到的USART_DR寄存器,另一个是程序看不到的移位寄存器,对应USART数据发送有两个标志,一个是TXE=发送数据寄存器空另一个是TC=发送结束

当USART_DR中嘚数据传送到移位寄存器后TXE被设置,此时移位寄存器开始向TX信号线按位传输数据但因为TDR已经变空,程序可以把下一个要发送的字节(操莋USART_DR)写入TDR中而不必等到移位寄存器中所有位发送结束,所有位发送结束时(送出停止位后)硬件会设置TC标志

  另一方面,在刚刚初始化好USART還没有发送任何数据时也会有TXE标志,因为这时发送数据寄存器是空的TXEIE和TCIE的意义很简单,TXEIE允许在TXE标志为'1'时产生中断而TCIE允许在TC标志为'1'时產生中断。

  至于什么时候使用哪个标志需要根据你的需要自己决定。但我认为TXE允许程序有更充裕的时间填写TDR寄存器保证发送的数據流不间断。TC可以让程序知道发送结束的确切时间有利于程序控制外部数据流的时序。

RXNE--读寄存器DR清零也可软件手动清零

先说TC。即Transmission Complete发送一个字节后才进入中断,这里称为“发送后中断”和原来8051的TI方式一样,都是发送后才进中断需要在发送函数中先发送一个字节触发Φ断。发送函数如下

在中断处理程序中发送完该字符串后,不用关闭TC的中断使能TCIE只需要清掉标志位TC;这样就能避免TC == SET 导致反复进入中断叻。

再说判断TXE即Tx DR Empty,发送寄存器空当使能TXEIE后,只要Tx DR空了就会产生中断。所以发送完字符串后必须关掉,否则会导致重复进入中断這也是和TC不同之处。

在串口初始化函数中就不用打开TXE的中断了(是在发送函数中打开的)

}

我要回帖

更多关于 如何看芯片手册 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信