This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/LAUNCHXL-F28069M:同时使用 SCIA 和 SCIB 可防止 SCIB 接收。

Guru**** 2035740 points
Other Parts Discussed in Thread: C2000WARE
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/717080/ccs-launchxl-f28069m-scia-and-scib-used-at-the-same-time-prevents-scib-from-receiving

器件型号:LAUNCHXL-F28069M
主题中讨论的其他器件:C2000WARE

工具/软件:Code Composer Studio

您好!

我正在通过 SCIB 接收 GPS 数据、我想通过 SCIA 发送该数据。 我已经基于示例项目"Example_2806xSci_Echoback.c"。

当我仅使用 SCIB (我使用引脚77 scibtx 和75 scibrx)接收 GPS 数据时、代码工作正常、它读取数据、然后对其进行处理以提取我感兴趣的信息(纬度、经度、速度和另一个参数)。 然后、我将 SCIA (引脚3 sciarx 和4 sciatx)连接到外部显示屏、这看起来也很正常、我已经测试了这种连接、对代码的 SCIB 部分进行了注释、屏幕从 SCIA 接收到了正确的数据。

但是、当我尝试在同一代码中同时使用 scia 和 scib 时、scib 似乎无法正确接收 GPS 数据。 我认为我可能会遇到时序问题、因为我创建了其他可能需要很长时间才能完成的函数、因此 scib 没有足够的时间来接收所有数据、但我对此非常不熟悉、因此我可能错过了重要的部分。

此外、我还想问使用中断是否更难实现我的目标、我从未使用过中断、因此我不熟悉中断的工作方式...

这是带有注释的主循环代码。 有些函数具有 wierd 名称、因为我用我的语言加泰罗尼亚语将它们命名为:

for (;;)
   {
   scia_msg ("velocitat_val=");
   scia_msg (vel);                          // vel 是包含显示信息的字符数组
   scia_xmit (255);
   scia_xmit (255);
   scia_xmit (255);

      }
         while (ScibRegs.SCIFFRX.bit.RXFFST){                              //同时有 GPS 发送的和 scib 接收的第
             ReceivedChar = ScibRegs.SCIRXBUF.ALL;
              missatge[index]= ReceivedChar;                        //这将创建从 GPS 接收的字节的字符数组,该数组发送         以       '$'开头的句子,然后发送信息。
             索引++;
             如果('$'=ReceivedChar){
                 索引= 0;
                 analitza_paraula ();                                                            //此函数分析从 GPS 接收到的数组"missatge",以提取信息并更新变量"latutitude"、"longitude"、speed 等。
             }
          }
   }

我只发布了主循环、如果我注释掉第一行、从 scia_msg ("velocitat_val=");到最后一个 scia_xmit (255); 代码正常工作并从 GPS 中提取正确的信息、但如果我添加代码 SCIB 的前5行似乎无法读取数据、则永远不会输入 if ('$'=ReceivedChar){}条件、while (ScibRegs...) 环路。

是否有人知道原因是什么?

非常感谢大家的关注、我现在真的很坚持

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    如有必要、我可以发布整个代码、但我认为主要部分是主循环

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    更新我确实通过 scib 接收数据、但是当 scib 与 scia 一起使用时、接收到的 NMEA 语句似乎跳过了一些字节。

    然后、我添加了一个类似如下的计数器、从而添加了一种"延迟":

    int 计数器= 0;

    for (;;)

    IF (计数器>= 900000)

    //发送 scia 数据的函数

    计数器= 0;

    COUNTER++;

    这种情况每半秒发送一次或更少的数据、scib 读取数据就很好!

    但是、这不是正确的实现方式、这是如何实现的? 我可以使用中断吗? 我尝试从 F2806x_CpuTimers 示例导入代码、但遇到错误、我对这些计时器的工作方式没有信心。

    任何建议都将非常有帮助、非常感谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Joan、

    由于您现在可以使用它、因此您确实可以使用延迟来纠正这一轻微的计时问题。  (但是、您可能需要进行双精度检查并确保波特率匹配)。  您可能已经知道、C2000Ware 还具有一个带有中断的环回示例:

    C:\ti\c2000\C2000Ware_ \device_support\f2806x\examples\c28\scia_loopback _interrupts\

    使用中断应该会有所帮助。  如果您想更熟悉中断、请参阅 F2806x 多日技术讲座、网址为:

    http://processors.wiki.ti.com/index.php/C2000_Archived_Workshops#C2000_Piccolo_Multi-Day_Workshop_-_Revision_5.0_May_2014_.28ExpKit_F28069.3B_CCSv6.0.29

    请参阅模块4和实验5练习(第二部分)。  由于实验课程使用实验套件、因此我随附了一份文档、以帮助转换使用 LaunchPad 的方向。

    但愿这对您有所帮助。 如果您的问题得到了解答、请单击绿色的"验证答案"按钮。 谢谢。

    - Ken

    e2e.ti.com/.../8540.F28069_2D00_MDW_2D00_LP_5F00_Supplement.pdf