161|0

6943

帖子

19

资源

纯净的硅(中级)

串口通信与中断的关系 [复制链接]

 串口通信分为发送/接收两部分,发送一般不需要中断即可完成发送,接收一般需要使用中断来接收。

            发送方可以选择使用中断,也可以选择不使用中断。使用中断的工作情景是:发送方先设置好中断并绑定一个中断处理程序,然后发送方丢一帧数据给transmitter,transmitter耗费一段时间来发送这一帧数据,这段时间内发送方CPU可以去做别的事情,等transmitter发送完成后会产生一个TXD中断,该中断会导致事先绑定的中断处理程序执行,在中断处理程序中CPU会切换回来继续给transmitter放一帧数据,然后CPU切换离开;不使用中断的工作情景是:发送方事先禁止TXD中断(当然也不需要给相应的中断处理程序了),发送方CPU给一帧数据到transmitter,然后transmitter耗费一段时间来发送这帧数据,这段时间CPU在这等着(CPU没有切换去做别的事情),待发送方发送完成后CPU再给它一帧数据继续发送直到所有数据发完。CPU是怎么知道transmitter已经发送完了?原来是有个状态寄存器,状态寄存器中有一个位叫发送缓冲区空标志,transmitter发送完成(发送缓冲区空了)就会给这个标志位置1,CPU就是通过不断查询这个标志位为1还是0来知道发送是否已经完成的。

            接收方可以选择使用中断,也可以选择不使用中断。使用中断的工作情景是:接收方先设置好中断并绑定一个中断处理程序,然后接收方会耗费一段时间从receiver中来接收一帧数据,这段时间内接收方CPU可以去做别的事情,等receiver接收数据完成后会产生一个RXD中断,该中断会导致事先绑定的中断处理程序执行,在中断处理程序中CPU会切换回来从receiver中读取数据,然后CPU切换离开;不使用中断的工作情景是:接收方事先禁止RXD中断(当然也不需要给相应的中断处理程序了),接收方会耗费一段时间从receiver中接收一帧数据,这段时间CPU在这等着(CPU没有切换去做别的事情),待接收方接收完成后CPU会继续等着直到所有数据接收完。CPU是怎么知道receiver已经接收完了?原来是有个状态寄存器,状态寄存器中有一个位叫接收缓冲区满标志,receiver接收完成(接收缓冲区满了)就会给这个标志位置1,CPU就是通过不断查询这个标志位为1还是0来知道接收是否已经完成的。

            因为串口通信是异步的,异步的意思就是说发送方占主导权。也就是说发送方随时想发就能发,但是接收方只有时刻等待才不会丢失数据。所以这个差异就导致发送方可以不用中断,而接收方不得不使用中断模式。

    串行通信接口的时钟设计

            串口通信为什么需要时钟?因为串口通信需要一个固定的波特率,所以transmitter和receiver都需要一个时钟信号。
            时钟信号从哪里来?源时钟信号是外部APB总线(PCLK_PSYS,66MHz)提供给串口模块的(这就是为什么我们说串口是挂在APB总线上的),然后进到串口控制器内部后给波特率发生器(实质上是一个分频器),在波特率发生器中进行分频,分频后得到一个低频时钟,这个时钟就是给transmitter和receiver使用的。
           串口通信中时钟的设置主要看寄存器设置。重点的有:寄存器源设置(为串口控制器选择源时钟,一般选择为PCLK_PSYS,也可以是SCLK_UART),还有波特率发生器的2个寄存器。
           波特率发生器有2个重要寄存器:UBRDIVn和UDIVSLOTn,其中UBRDIVn是主要的设置波特率的寄存器,UDIVSLOTn是用来辅助设置的,目的是为了校准波特率的。


回复
您需要登录后才可以回帖 登录 | 注册

最新文章 更多>>
    关闭
    站长推荐上一条 1/6 下一条

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

    电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2021 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表