查看: 15704|回复: 10

[求助] 关于增大K60单片机UART的接收FIFO缓冲区深度的若干问题

[复制链接]

该用户从未签到

9

主题

45

帖子

0

新手上路

Rank: 1

积分
195
最后登录
1970-1-1
发表于 2012-2-14 13:20:53 | 显示全部楼层 |阅读模式
求教安哥版主:
飞思卡尔的K60 MCU的UART部分,有一个UART先进先出参数寄存器UARTx_PFIFO,该寄存器提供发送与接收缓冲区的可编程能力,即可以用软件配置UART的发送与接收缓冲区的深度。上电复位默认情况下,该寄存器的各位都是清0的,默认发送与接收缓冲区
深度都是1数据字。但该寄存器只能在C2[RE]和C2[TE]位清0的时候被写入新的数据。
我的程序现在是把接收缓冲区深度增大至8数据字,意思是想提高接收缓冲区的深度,目的是想一次性接收多字节数据才触发接收
数据寄存器满中断。传统的默认情况是只要允许并配置了接收数据寄存器满中断的话,只要接收1字节数据就触发了中断。所以
配置接收缓冲区深度为8数据字如下:
  UART_PFIFO_REG(uartch) |= (UART_PFIFO_RXFE_MASK | UART_PFIFO_RXFIFOSIZE(2));
接着,我配置UART的先进先出接收水位标寄存器UARTx_RWFIFO,该寄存器提供一个接收FIFO/缓冲区可编程的阈值,该寄存器中的
字段为RXWATER,必须设置RXWATER字段的值比PFIFO[RXFIFOSIZE]和PFIFO[RXFE]指定的FIFO长度要少并且大于0。我的程序配置该字段的数值为4数据字,意思是当接收到4数据字的时候触发接收数据寄存器满中断:
  UART_RWFIFO_REG(uartch) = UART_RWFIFO_RXWATER(4);
按照上面的配置方法,通过超级终端调试软件让UART一次性接收4字节数据,可是程序就是不能触发接收数据寄存器满中断,
进入不了中断服务程序,这是什么原因?

 
我知道答案 目前已有10人回答
回复

使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2012-2-14 15:16:11 | 显示全部楼层

    RE:关于增大K60单片机UART的接收FIFO缓冲区深度的若干问题

    FIFO在处理的时候,是数据接受完以后才会发生中断。比如,你开了一个200空间的数组作为接收缓冲区,当200个数据存放满以后才会产生终端。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    9

    主题

    45

    帖子

    0

    新手上路

    Rank: 1

    积分
    195
    最后登录
    1970-1-1
     楼主| 发表于 2012-2-18 09:06:18 | 显示全部楼层

    回复:关于增大K60单片机UART的接收FIFO缓冲区深度的若干问题

    回复第 2 楼 于2012-02-14 07:16:11发表:
    FIFO在处理的时候,是数据接受完以后才会发生中断。比如,你开了一个200空间的数组作为接收缓冲区,当200个数据存放满以后才会产生终端。 

    安哥,我是像你那样处理的啊,就如我上面所说,我开了4字节空间的接收缓冲区,可是我发了4字节数据后,它就是不能产生接收中断,如果我不配置接收缓冲区大小,采用默认的1字节接收缓冲区的话,每次发1字节数据都能产生接收中断的,这是怎么回事,还请安哥指点啊。。。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    4

    帖子

    0

    新手上路

    Rank: 1

    积分
    1
    最后登录
    1970-1-1
    发表于 2012-10-10 10:36:00 | 显示全部楼层

    回复:关于增大K60单片机UART的接收FIFO缓冲区深度的若干问题

    你这个问题现在解决没,我现在也碰到同样的问题了。我定义的水纹线是3个数据字,FIFO的深度是128个数据字,通过上位机发三个字节的数据下来,没有进入中断,而是发生了接收数据溢出(S1(OR)=1)的错误。汗啊
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    4

    帖子

    0

    新手上路

    Rank: 1

    积分
    1
    最后登录
    1970-1-1
    发表于 2012-10-10 22:31:04 | 显示全部楼层

    回复:关于增大K60单片机UART的接收FIFO缓冲区深度的若干问题

    我现在进去中断了,和你的代码是一样配置的,只是在初始化的时候将FIFO中的数据全部清除掉了。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    12

    主题

    136

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    256
    最后登录
    2021-1-15
    发表于 2012-10-11 09:15:10 | 显示全部楼层

    RE:关于增大K60单片机UART的接收FIFO缓冲区深度的若干问题

    要看手册,现在的uart只有 0,1 最多可以配置成8个缓冲;
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    8

    帖子

    0

    新手上路

    Rank: 1

    积分
    7
    最后登录
    1970-1-1
    发表于 2012-10-11 10:00:36 | 显示全部楼层

    RE:关于增大K60单片机UART的接收FIFO缓冲区深度的若干问题

    Kinetis系列的问题可以参考
    https://www.nxpic.org.cn/bbs/article_891_292642.html
    下载此帖附件看看即可
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    3

    帖子

    0

    新手上路

    Rank: 1

    积分
    3
    最后登录
    1970-1-1
    发表于 2013-3-11 09:55:47 | 显示全部楼层

    RE:关于增大K60单片机UART的接收FIFO缓冲区深度的若干问题

    请问楼主,现在这个问题解决了没,我现在也是和你遇到了同样的问题!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    3

    帖子

    0

    新手上路

    Rank: 1

    积分
    16
    最后登录
    2018-5-15
    发表于 2015-4-2 09:17:51 | 显示全部楼层
    王城骊 发表于 2012-10-10 22:31
    我现在进去中断了,和你的代码是一样配置的,只是在初始化的时候将FIFO中的数据全部清除掉了。 ...

    你好,请问你的中断是在串口中断里吗?我的一只进不去
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    9

    主题

    219

    帖子

    0

    高级会员

    Rank: 4

    积分
    653
    最后登录
    2017-11-19
    发表于 2015-4-24 17:19:28 | 显示全部楼层
    安 发表于 2012-2-14 15:16
    FIFO在处理的时候,是数据接受完以后才会发生中断。比如,你开了一个200空间的数组作为接收缓冲区,当200个 ...

    这样在实际使用的时候岂不是更不好用了?非要等到200个数据满了之后才能产生中断吗?
    如果数据没有这么长应该怎么办呢?主动查询标志位?
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-9-6 21:12 , Processed in 0.107886 second(s), 30 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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