社区导航

 

搜索
查看: 1893|回复: 2

关于Stellaris系列UART的FIFO新认识,经典

[复制链接]

7490

TA的帖子

4945

TA的资源

版主

Rank: 6Rank: 6

资源大师勋章

发表于 2012-6-15 16:49 | 显示全部楼层 |阅读模式

关于Stellaris系列UART的FIFO新认识,经典!(ZZ 21ic)

【经典提问】
  有没有办法去掉UART的FIFO,或者怎样才能实现每收发一个字符就中断一次呢?Stellaris系列ARM的UART好像无法做到这一点,存在缺陷!


【精妙解答】
  误解了,根本就不是缺陷,这恰恰是优点!

  看来许多人还没有真正理解FIFO的作用和优点,仍然停留在每收发一个字符就要中断处理一次的老思路上。UART收发FIFO主要是为了解决收发中断过于频繁而导致的CPU效率不高的问题。

  FIFO的必要性。在进行UART通信时,中断方式比轮询方式要简便且效率高。但是,如果没有收发FIFO,则每传输一个数据(5~8位)都要中断处理一次,效率仍然不高。如果有了收发FIFO,则可以在连续收发若干个数据(可多至14个)后才产生一次中断,然后一起处理。这就大大提高了收发效率。

  接收超时问题。如果没有接收超时功能,则在对方已经发送完毕而接收FIFO未填满时并不会触发中断(FIFO满才会触发中断),结果造成最后接收的有效数据得不到处理的问题。有了接收超时功能后,如果接收FIFO未填满而对方发送已经停,则在不超过3个数据的接收时间内就会触发超时中断,因此数据会照常得到处理。

  总之,FIFO的设计是优秀而合理的,它已经帮你想到了收发过程中存在的任何问题,只要初始化配置UART后,就可以放心收发了,FIFO和中断例程会自动搞定一切!

  完全不必要担心FIFO大大减少了中断产生的次数而“可能”造成数据丢失的问题!

  发送时,只要发送FIFO不满,数据只管往里连续放,放完后就直接退出发送子程序。随后,FIFO真正发送完成后会自动产生中断,通知主程序说:我已经完成真正的发送。

  接收时,如果对方是连续不间断发送,则填满FIFO后会以中断的方式通知主程序说:现在有一批数据来了,请处理。

  如果对方是间断性发送,也不要紧,当间隔时间过长时(2~3个字符传输时间),也会产生中断,这次是超时中断,通知主程序说:对方可能已经发送完毕,但FIFO未满,也请处理。

  不知大家是否已经明白其中的自动机制?


【相关库函数】
1. UARTConfigSet()
  配置UART,例如:
     //   配置UART2:波特率9600,数据位8,停止位1,无校验
     UARTConfigSet(UART2_BASE, 9600, UART_CONFIG_WLEN_8 |
                                     UART_CONFIG_STOP_ONE |
                                     UART_CONFIG_PAR_NONE);

2. UARTFIFOLevelSet()
  设置UART收发FIFO的深度,可以设置的深度有2、4、8、12、14

3. UARTSpaceAvail()
  确认在发送FIFO里是否有可利用的空间。

4. UARTCharsAvail()
  确认在接收FIFO里是否存在字符。

5. UARTCharPutNonBlocking()
  该函数要与UARTSpaceAvail()配合使用,如果已确认发送FIFO里有可用空间,则将字符直接放入发送FIFO,不等待。

6. UARTCharGetNonBlocking()
  该函数要与UARTCharsAvail()配合使用,如果已确认接收FIFO里有字符,则直接从接收FIFO里读取字符,不等待。

7. UARTCharPut()
  将字符放到发送FIFO里,如果没有可用空间则一直等待。

8. UARTCharGet()
  从接收FIFO里读取字符,如果没有字符则一直等待。

9. UARTIntEnable()
  使能一个或多个UART中断,例如:
     //   同时使能接收中断(接收FIFO溢出)和接收超时中断
     UARTIntEnable(UART2_BASE, UART_INT_RX | UART_INT_RT);


回复

使用道具 举报

2596

TA的帖子

19

TA的资源

五彩晶圆(中级)

Rank: 8Rank: 8

发表于 2012-6-15 16:57 | 显示全部楼层
这个红阳之前发过了,还被评了精

回复

使用道具 举报

21

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2012-6-17 14:29 | 显示全部楼层
好贴 新手学习了

回复

使用道具 举报

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

关闭

站长推荐上一条 1/7 下一条

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

词云| Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2020-7-14 00:00 , Processed in 0.135374 second(s), 23 queries , Gzip On, MemCache On.

快速回复 返回顶部 返回列表