打印

关于DSP的IQmath函数的使用

[复制链接]
2127|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ZXLRHL|  楼主 | 2013-6-27 10:40 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
我基本把IQmath函数的计数文档全部了解完了,应用了一些函数计算也正确。今天在使用的时候,除法运算计算结果不正确,各位大神麻烦指点啊,谢谢!

  _iq5  Baud_Dem = 0;
  _iq5  LspClk = 0;
  LspClk = 2;
  //计算波特率
  if(LspClk)
  {
   LspClk = _IQ5div(_IQ5(60000000),_IQ5(4));//SysCtrlRegs.LOSPCP=2;//60为sysclk;
  }
  else
  {
   LspClk = _IQ5(60000000);
  }
  Baud_Dem = _IQ5mpy(_IQ5(Config->uBaud), _IQ5(8)); //Config->uBaud * 8;

  Baud_Dem = _IQ5div(_IQ5(LspClk), _IQ5(Baud_Dem));  //就是这一句结果出现问题,设置波特率4800,计算结果应该为390.6,而这一步结果为54.6


相关帖子

沙发
ZXLRHL|  楼主 | 2013-6-27 10:57 | 只看该作者
我刚在观察WATCH窗口时发现,LspClk变量虽然我定义的是_IQ5,D但是它在显示long型时为480000000,在_IQ5的范围之外,我就又把变量以及计算函数全部设置成_IQ2,结果就正确了,虽然计算结果是对了,但是还是不知道原因,有大神清楚的吗?麻烦讲解下啊,谢谢!

使用特权

评论回复
板凳
zhangmangui| | 2013-6-27 12:24 | 只看该作者
ZXLRHL 发表于 2013-6-27 10:57
我刚在观察WATCH窗口时发现,LspClk变量虽然我定义的是_IQ5,D但是它在显示long型时为480000000,在_IQ5的 ...

应该还是范围问题吧  看看下面的范围


使用特权

评论回复
地板
独孤求败2030| | 2013-7-16 12:46 | 只看该作者
楼上所言甚是

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:生活累,一小半源于生存,一小半源于攀比。

28

主题

100

帖子

0

粉丝