查看: 675|回复: 0

[经验] DSP28335 SCI通信问题总结以及问题总结

[复制链接]

该用户从未签到

发表于 2021-3-6 21:11:26 | 显示全部楼层 |阅读模式
分享到:
刚接触DSP不久,和其他很多人一样也是从例程学起。
     在学习的过程中难免会遇到一些问题,我希望通过把这些问题写出来,一方面希望各位大神指点;也希望通过这种方式帮助后面的新学者一种提示吧,开始第一步始终是很难的,我是深有体会的;最后也希望大家踊跃讨论,集思广益嘛,互相学习。本人文采很差,我尽量把问题表述清楚。
    进入正题:最近几天一直在学习SCI通信,自己以为应该不难,以前有51的串口经验。但是事实上,并没有想象中的那么容易。
   1、首先是非FIFO模式的中断设置服务程序,不能直接进入发送中断;需要先发送一个字节的数据才能进入中断;
      按照51的模式,发送数据的时候,直接TI = 1,直接进入串口数据发送中断服务程序,接着在中断函数中将 TI = 0;
      
  1. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"=""> void TXD_ISR() interrupt 4</font>
  2. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">       {</font>
  3. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">               if(TI)</font>
  4. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">               {</font>
  5. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">                          TI = 0  ;</font>
  6. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">                          SBUF = xxx;</font>
  7. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">               }</font>
  8. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">       }</font>
  9. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">      但是28335没有这个标志位,不知道这个算不算 ScibRegs.SCICTL2.bit.TXRDY,datasheet上怎么写  if(ScibRegs.SCICTL2.bit.TXRDY == 1)   ScibRegs.SCITXBUF = msg[x];会自动清零的;并且SCI复位的时候这位始终为1;按照常理,如果只要中断寄存器配置好,按照51的模式可以直接进入中断,但是事实是,这不能进入中断,调试事实数据发现:PieCtrlRegs.PIEIFR9.bit.INTx4  = 0这个没有置一,也就不能发生中段;</font>
  10. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">   我是遇到这样的问题,不知道大家有没有发现这个问题;如果有谁想到解决办法也可以在提出来,互相学习;有的可能会说,有FIFO干嘛不用呀,可以减少CPU负担。也是呀,我但是也想对呀,于是也写了一个FIFO中断程序,但是按照开发板上的例程,我也遇到如下问题;就是问题2啦!</font>
  11. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">2、利用FIFO中断数据发送不完全,</font>
  12. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">   FIFO配置如下:</font>
  13. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">    void scic_fifo_init()</font>
  14. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">{</font>
  15. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">    ScicRegs.SCIFFTX.all=0xE060;</font>
  16. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">    ScicRegs.SCIFFRX.all=0x206f;</font>
  17. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">    ScicRegs.SCIFFCT.all=0x0;</font>
  18. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">}</font>
  19. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">中断服务函数</font>
  20. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">interrupt void SCIb_TX_FIFO_ISR()</font>
  21. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">{</font>
  22. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">        unsigned char i;</font>
  23. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">    if(TX_Len != 0)</font>
  24. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">    {</font>
  25. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">            if(TX_Len > 16)</font>
  26. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">            {</font>
  27. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">                    for(i = 0; i < 16;i++)</font>
  28. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">                    {</font>
  29. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">                            ScibRegs.SCITXBUF = msg[txdataindex1++];</font>
  30. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">                    }</font>
  31. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">                    TX_Len -= 16;</font>
  32. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">        </font>
  33. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">            }</font>
  34. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">            else</font>
  35. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">            {</font>
  36. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">                    for(i = 0;i < TX_Len;i++)</font>
  37. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">                    {</font>
  38. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">                            ScibRegs.SCITXBUF = msg[txdataindex1++];</font>
  39. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">                    }</font>
  40. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">                    ScibRegs.SCICTL1.bit.TXENA = 0;</font>
  41. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">                    ScibRegs.SCICTL1.bit.RXENA = 1;</font>
  42. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">                    txdataindex1 = 0;</font>
  43. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">                    receivefinishflag = 0x00;</font>
  44. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">            }</font>
  45. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">    }</font>
  46. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">    ScibRegs.SCIFFTX.bit.TXFFINTCLR = 1;</font>
  47. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">    PieCtrlRegs.PIEACK.bit.ACK9 = 1;</font>
  48. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">}</font>
复制代码

但是出现一个问题;当TX_Len > 16的时候发送的数据时,发送的数据的个数是 :暂时标记为 n = TX_Len  % 16;
举个例子:msg = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20}
若TX_Len  = 10;发送的数据为0,1,2,3,4,5,6,7,8,9
若TX_Len  = 10;发送的数据为0,1,2,3
为啥会出现这种情况呢,
  1. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">for(i = 0; i < 16;i++)</font>
  2. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">{</font>
  3. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">        ScibRegs.SCITXBUF = msg[txdataindex1++];//这句也执行了,但是却没有相应</font>
  4. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">}</font>
复制代码

   TX_Len -= 16;//=执行了这句
我觉得肯定是哪里的寄存器设置有问题,但是也说不出来,在网上也找了很多资料也没有找见,偶尔我看到一个论坛上说,万一不行就用TI自带的例程,里面有中断模式的例程,TI的例程寄存器设置为:
  1. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">void scib_fifo_init()</font>
  2. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">{</font>
  3. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">   ScibRegs.SCICCR.all =0x0007;    // 1 stop bit,  No loopback</font>
  4. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">                                   // No parity,8 char bits,</font>
  5. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">                                   // async mode, idle-line protocol</font>
  6. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">   ScibRegs.SCICTL1.all =0x0003;   // enable TX, RX, internal SCICLK,</font>
  7. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">                                   // Disable RX ERR, SLEEP, TXWAKE</font>
  8. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">   ScibRegs.SCICTL2.bit.TXINTENA =1;</font>
  9. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">   ScibRegs.SCICTL2.bit.RXBKINTENA =1;</font>
  10. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">   ScibRegs.SCIHBAUD    =0x0000;</font>
  11. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">   ScibRegs.SCILBAUD    =SCI_PRD;</font>
  12. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">   ScibRegs.SCICCR.bit.LOOPBKENA =1; // Enable loop back</font>
  13. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">   ScibRegs.SCIFFTX.all=0xC028;</font>
  14. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">   ScibRegs.SCIFFRX.all=0x0028;</font>
  15. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">   ScibRegs.SCIFFCT.all=0x00;</font>
  16. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">
  17. </font>
  18. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">   ScibRegs.SCICTL1.all =0x0023;     // Relinquish SCI from Reset</font>
  19. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">   ScibRegs.SCIFFTX.bit.TXFIFOXRESET=1;</font>
  20. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">   ScibRegs.SCIFFRX.bit.RXFIFORESET=1;</font>
  21. <font size="4" style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">}   </font>
复制代码

比较FIFO设置你会发现主要的区别在哪里嘛,当然中断数据比较不算哈;
其实主要区别就在,我的FIFO初始化的将
ScibRegs.SCICTL2.bit.TXRDY  清零;ScibRegs.SCIFFTX.bit.TXFFINTCLR = 1;而TI的标准例程是没有清零的;
按照ti标准重新设置;运行一切OK;
经验教训:作为初学者,我建议尽量参照ti例程走,开发板配套的很多例程也是从这上面修改来的,并且大多数例程没有给中断模式的,只有查询模式;
3、SCI的FIFO模式确实有很多优点,但是我想到一个问题;当用FIFO接收数据的时候,也采用中断模式;怎么设置 RXFFIL4 -0 ,也就是接收中断比较值;
   比如我设为16,只有当接收数据大于等于16的时候才能发生中断,但是有一个问题是我接收到的数据很可能小于16个那不是一直进不了接收中断啦,
   并且这是经常遇到的情况,
   有一种方法是将RXFFIL4-0设置为1,这样失去FIFO的优势啦,不知道大家有没有好的解决办法。希望大家讨论。


总结:这是本人在学习SCI的问题和一些总结,希望大家指正,希望对大家有帮助,也希望大家一起讨论,互相帮助,谢谢各位。
回复

使用道具 举报

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

本版积分规则

关闭

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



手机版|小黑屋|与非网

GMT+8, 2024-11-25 01:58 , Processed in 0.111553 second(s), 15 queries , MemCache On.

ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

苏公网安备 32059002001037号

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.