根本概念
S3C2440A 的通用异步收发器(UART )配有 3 个独立异步串行 I/O 端口,2440的每个UART均不占用定时器来产生波特率。并且每个UART都拥有一个独立用于收 发的缓冲区FIFO。实现一个与pc双向通讯的串口程序。 实现波特率为9600,n,8,1。
外设总线是指地点控制总线,也就是我们访问寄存器时使用的地点转换为实际信号的总线
紧张寄存器
UART线路控制寄存器ULCONn决定通讯所需的奇偶校验位、数据位、停止位等信息。红外 模式是2440专门为红外设备设计的,这里我们使用平凡模式。
UART控制寄存器
ART控制寄存器的低四位用于指定串口收发时的工作方式,分别是不使能吸收,停止或查询方式和 DMA方式。这里我们不消DMA方式,并且还要允许吸收,自然是设置为01了。[3:2]两个比特于此类 似,不过是用于设置发送的。
UART控制寄存器UCONn的4~9位就比力简单了,分别设置为正常传输、正常操作、不产生吸收 错误状态停止和脉冲方式。使用脉冲而不是电平很显然是因为不能在正在收数据的时候产生停止, 而是应该在数据吸收完备之后再产生停止。
UART控制寄存器UCONn的10~15比特,起始这一块主要是用于设置波特率的。 [11:10]用于选择uart的时钟源的。分别是PCLK,UEXTCLK和 FCLK。这里的UEXTCLK指的是外部时钟, PCLK和FCLK在时钟设置主题中我们设置成了400M和50M。一旦时钟被选择,那么波特率就可以通过 公式(int)( 被选时钟 / (波特率 * 16)) – 1来计算,并将这个公式计算的结果存入UBRDIVn寄存器。
好比 我们选择使用PCLK,即50M,波特率为9600,那么公式计算的结果就是324.52,取整得325,把这个 数存到UBRDIVn波特率就设置好了,简直不要太方便。假如我们把uart的时钟设置为FCLK,那么uart 的实际工作频率就由该寄存器的[15:12]决定。
发送数据缓冲寄存器:类似51的SUBF寄存器,要发送的数据写入这个寄存器,2440会自动把数据放入位移 寄存器发送。
吸收缓冲寄存器:吸收到的数据从这个寄存器读出来。
波特率分频寄存器用于保存我们计算好的那个初值。上面说过,这个初值在9600下是325。
此外,由于需要使用引脚产生实际信号,UART对应的GPIO也要设置好;在数据吸收时需要使用停止,所以 相干的停止也要设置好。UART在停止设置方面需要注意的是UART停止有子终端掩码和子终端挂起寄存器。 因此在设置和处理停止时要加以处理。
第21~41行:设置UART0的收发引脚
第24、27行:设置8位数据位、无奇偶校验位、1位停止位、平凡模式操作
第29~33行:收发都是轮询或停止方式
第30行:平凡传输,平凡操作,不产生错误停止,不产生超市错误停止,收发都是脉冲方式停止。这个脉 冲方式是指,假设收到一个字节,这个字节是正在收的时候产生还是收完了以后产生。接纳脉冲方式就是指 收到以后再产生停止
第35行:波特率分频值,(50*1000000)/(9600*16)-1
第36行:允许UART0子停止 第37~38行:使能停止并注册停止服务函数
数据的发送
数据的接受
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |