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.

[参考译文] TMS320F280039C:TMS320F280039C 的 SCI 实验室的 C2000 Academy 程序中出错

Guru**** 2548220 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1189025/tms320f280039c-error-in-c2000-academy-program-for-sci-lab-for-tms320f280039c

器件型号:TMS320F280039C

大家好、

在下面的中、计时器的启动代码不应是  CPUTimer_startTimer (myCPUTIMER 0_BASE);

此外、当我在终端窗口中运行代码时、它会打印消息  

它是的一半

    

请告诉我发生这种情况的原因。

谢谢。

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

    您好!

    感谢您试用 C2000 Academy 并提供反馈。 您能详细说明一下问题是什么吗? 计时器是否未启动?

    此致、Santosh

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

    您好、Santosh、

    基本上 、CPUTimer_startTimer (INT_myCPUTIMEER0)不会像 Academy 实验中提到的那样启动计时器。 基址应为参数、但在这里、中断是参数。

    正确的语法应为 CPUTimer_startTimer (uint32_t base)。

    对于第二个问题,终端上打印的消息将被跳过。

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

    Prayag、您好!

    非常感谢您指出上一版本中引入的错误。 它准时出现。 我们已准备好下一个版本、它将在版本中修复。

    第一部分:  

    //
    //启动 CPU 定时器0
    //
    CPUTimer_startTimer (myCPUTIMEER0_BASE)

    第二期:

    for (;;)

    MSG ="\r\n 输入数字0-9:\0";
    sci_writeCharArray (mySCIA_BASE、(uint16_t*) msg、24);

    //
    //从 FIFO 读取字符。
    //
    receivedChar = SCI_readCharBlockingFIFO (mySCIA_BASE);
    SCI_writeCharBlockingFIFO (mySCIA_BASE、receivedChar);


    //将字符转换为数字
    delayCount = receivedChar -'0';

    rxStatus = SCI_getRxStatus (mySCIA_BASE);
    if (((rxStatus & SCI_RXSTATUS_ERROR)!= 0)

    //
    //如果执行在此处停止,则存在一些错误
    //分析 SCI_getRxStatus() API 返回值
    //
    ESTOP0;

    //
    //回显字符。
    //
    MSG =" LED 设置为闪烁速率\0";
    sci_writeCharArray (mySCIA_BASE、(uint16_t*) msg、25);

    请尝试此操作并确认它是否可以解决您的两个问题。

    此致、Santosh

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

    您好、Santosh、

    这不奏效。 显然、问题出在 SCI_writeCharBlockingFIFO (mySCIA_BASE、receivedChar);

    检查我使用的这段代码。 代替  SCI_writeCharBlockingFIFO (mySCIA_BASE、receivedChar);我使用 了 SCI_writeCharArray (mySCIA_BASE、(uint16_t*) msg2、1); 它工作正常。

    结果是

     

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

    您好、Santosh、

    这是包含您建议的代码的结果。

    更正我之前的陈述。 您建议的代码有效。

    但是  

    sci_writeCharArray (mySCIA_BASE、(uint16_t*) msg、25);

    SCI_writeCharBlockingFIFO (mySCIA_BASE、receivedChar);

    一起显示错误的结果(在线程开始时扣合)。

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

    Prayag、

    感谢您确认建议的代码适用于您。  

    此致、Santosh

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

    感谢您的支持 Santosh。

    但我仍然不清楚为什么一起执行的以下两行代码不起作用。

    sci_writeCharArray (mySCIA_BASE、(uint16_t*) msg、25);

    SCI_writeCharBlockingFIFO (mySCIA_BASE、receivedChar);

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

    Prayag、

    首先、控制流量、它应该这样做  

    SCI_writeCharBlockingFIFO (mySCIA_BASE、receivedChar);  

    接收后立即执行。 它只是为了回显用户的字符。

    问题在于 SCI_writeCharArray()  和 SCI_writeCharBlockingFIFO()函数的实现方式。

    SCI_writeCharArray()函数在 FIFO 中等待2个字符以放置 TXBUF,但 SCI_writeCharBlockingFIFO()仅等待 FIFO 中的1个字符。 这会导致流量问题。

    如果要保留原始流、则更改  

    sci_writeCharArray (mySCIA_BASE、(uint16_t*) msg、25);

    SCI_writeCharBlockingFIFO (mySCIA_BASE、receivedChar);

    更改为  

    sci_writeCharArray (mySCIA_BASE、(uint16_t*) msg、25);
    sci_writeCharArray (mySCIA_BASE、(uint16_t*) receivedChar、1);

    这也应该起作用。  

    希望这对您有所帮助。

    此致、Santosh

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="35062" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1189025/tms320f280039c-error-in-c2000-academy-program-for-sci-lab-for-tms320f280039c/4481544 #4481544"]SCI_writeCharArray()函 数在 FIFO 中等待2个字符以放置 TXBUF,但 SCI_writeCharBlockingFIFO()仅等待 FIFO 中的1个字符。 这会导致流问题。[/quot]

    请您详细说明一下这一点。

     

    [引用 userid="35062" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1189025/tms320f280039c-error-in-c2000-academy-program-for-sci-lab-for-tms320f280039c/4481544 #4481544"]

    如果要保留原始流、则更改  

    sci_writeCharArray (mySCIA_BASE、(uint16_t*) msg、25);

    SCI_writeCharBlockingFIFO (mySCIA_BASE、receivedChar);

    [/报价]

    在这里、当我在这两条线之后施加一些延迟时、流是完整的。

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

    Prayag、

    [引用 userid="545664" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1189025/tms320f280039c-error-in-c2000-academy-program-for-sci-lab-for-tms320f280039c/4486490 #4486490"]您能否详细说明这一点。

    如果您步入函数、理解起来会更容易  

    SCI_writeCharArray()函数和 SCI_writeCharBlockingFIFO()

    此致、Santosh

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

    您好、Santosh、

    sci_writeCharArray (mySCIA_BASE、(uint16_t*) msg、25);

    SCI_writeCharBlockingFIFO (mySCIA_BASE、receivedChar);

    DEVICE_DELAY_US (1000000);

    使用此代码时、流程是完整的。

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

    如果它适合您、请使用延迟。

    如果您想进一步了解、请进入函数的实现。

    此致、Santosh