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:CAN#39;t START SCI in F28069M

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/567593/ccs-launchxl-f28069m-can-t-start-sci-in-f28069m

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

工具/软件:Code Composer Studio

大家好、

我在 Motorware 项目中使用以下线程的 SCI 代码库。
https://e2e.ti.com/support/microcontrollers/c2000/f/902/p/334989/1168654#pi316717=2&pi316717filter=all&pi316717scroll=false

但是、当我执行 SCI 写入时、终端没有任何输出。 我在调试器中检查 SCIA 的寄存器。 发现 SCICCR 值为0、我知道在我的情况下该值应为7。 我在 F28027中应用了相同的更改、没有任何问题。 此外、通过使用 controlSUITE 提供的开箱即用代码、F28069M 也没有问题。

对于其他寄存器、包括 SCICTL1、SCIHBAUD、SCILBAUD、也提供0 o 值。 我尝试直接将值分配给 SCICCR、但没有使用。 我是否错过了任何操作?

非常感谢。

肖恩

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

    HAL_Handle HAL_init (void *pMemory、const size_t numBytes)

    (笑声)
    //地址为0x7050
    obj->sciaHandle = SCI_init ((void *) SCIA_BASE_ADDR、sizeof (SCI_Obj));
    (笑声)


    void HAL_setupGpios (HAL_Handle handle)

    (笑声)
    GPIO_setPullup (obj->gpioHandle、GPIO_Number_28、GPIO_Pullup_Enable);
    GPIO_setPullup (obj->gpioHandle、GPIO_Number_29、GPIO_Pullup_Enable);

    GPIO_setQualification (obj->gpioHandle、GPIO_Number_28、GPIO_Qual_异 步);

    GPIO_setMode (obj->gpioHandle、GPIO_Number_28、GPIO_28_Mode_SCIRXDA);
    GPIO_setMode (obj->gpioHandle、GPIO_Number_29、GPIO_29_Mode_SCITXDA);
    (笑声)



    //已在 HAL_setParams()中调用以下函数
    void HAL_setupSCI (HAL_Handle handle){
    HAL_Obj * obj =(HAL_Obj *)句柄;

    SCI_setNumStopBits (obj->sciaHandle、SCI_NumStopBits);
    SCI_setParity (obj->sciaHandle、SCI_Parity 奇偶校验);
    //SCI_disableParity (obj->sciaHandle);
    sci_disableLoopBack (obj->sciaHandle);
    SCI_setMode (obj->sciaHandle、SCI_Mode_IdleLine);
    SCI_setCharLength (obj->sciaHandle、SCI_CharLength _8_Bits);

    sci_disableRxErrorInt (obj->sciaHandle);
    sci_disable (obj->sciaHandle);
    sci_disableTxWake (obj->sciaHandle);
    sci_disableSleep (obj->sciaHandle);
    sci_enableTx (obj->sciaHandle);
    sci_enableRx (obj->sciaHandle);
    sci_enableTxFifo (obj->sciaHandle);
    sci_enableTxFifoEnh (obj->sciaHandle);

    sci_enableRxInt (obj->sciaHandle);
    sci_disableTxInt (obj->sciaHandle);

    SCI_setBaudRate (obj->sciaHandle、SCI_budRate_115_2_kBaud);
    sci_enable (obj->sciaHandle);
    PI_enableInt (obj->压 电致、PI_GroupNumber_9、PI_InterruptSource_SCIARX);
    cpu_enableInt (obj->cpuHandle、cpu_IntNumber_9);
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你(们)好。

    这看起来您只是没有为 SCIA 启用外设时钟。 在我们的 controlSUITE 示例中、这通常在 sysctl init 函数中为您提供。 如果您使用的是自定义代码、则应确保您自己启用此代码。

    谢谢、
    标记

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢。 我发现、对于2806x、Motorware 中通常会禁用 HAL_setupPeripheralClks (HAL_Handle handle)函数中的 scia 时钟。 因此、SCIA 现在在启用时钟后正常工作。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    之后的另一个问题是、在 SCI 可以发送字符后、终端只能接收扰频字符、而在调试器中、SCITXBUF 看起来正常、当我发送 A 到 F 时、65到70在调试器上显示为值。

    然后、我使用 comDebug 来查找在 PC、FF、3F 和00中接收到的字符、有时屏幕上会显示-258。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    请验证器件上的波特率配置是否与 COM 端口上配置的波特率相匹配。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢、但我对开箱即用示例代码使用了相同的波特率。 此外、SCIHBAUD 和 SCILBAUD 值应分别为0和23。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    成城

    controlSUITE 实际上已设置为在 controlCARD 开发环境中开箱即用。 您是否验证了实际器件频率? controlCARD 和 Launchpad 的默认时钟配置可能不同、值得使用示波器进行验证。
    您还应验证 SCITX 引脚的最终引脚输出。 确保每个位的长度与波特率一致。

    谢谢、
    标记
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的、我发现了我的问题。 我没有在代码中检查 hal.c 中的以下行、默认情况下为 CLK_LowSpdPreScale_SYSCLKOUT_by_1。

    clk_setLowSpdPreScale(obj->clkHandle, CLK_LowSpdPreScale_SYSCLKOUT_By_4);

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

    很高兴听到您解决了这个问题。 有几个时钟、如果您忘记了在其他地方设置的时钟、它会影响整个时钟树。

    如果您有任何其他问题、请随时创建新帖子。

    此致、

    标记

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

    很抱歉再次打扰你。 现在我有时间进一步测试 SCI 特性、但是我发现当从终端输入时、中断未被触发、这应该会调用 ISR 函数。 我还缺少其他什么吗?

    谢谢、

    肖恩

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

    在 hal.h 中、
    extern 中断 void sciaISR (void);

    静态内联 void HAL_initIntVectorTable (HAL_Handle handle)

    HAL_Obj * obj =(HAL_Obj *)句柄;
    PIE_Obj * PIE =(PIE_Obj *) obj->压 电式;


    ENABLE_PROTECTED 寄存器_WRITE_MODE;

    PIe->ADCINT1 = mainISR;
    PI->SCIRXINTA =&sciaISR;

    disable_protected_register_write_mode;

    返回;
    }// HAL_initIntVectorTable()函数结束

    在 hal.c 中
    void HAL_setupSCI (HAL_Handle handle){

    PI_enableInt (obj->压 电致、PI_GroupNumber_9、PI_InterruptSource_SCIARX);
    cpu_enableInt (obj->cpuHandle、cpu_IntNumber_9);


    在 proj_lab10a.c 中
    中断空 sciaISR (空)

    char rxdata = 0;
    if (SCI_rxDataReady (halHandle->sciaHandle)=1)


    rxdata = SCI_READ (halHandle->sciaHandle);
    gTest1 = rxdata;
    sci_write (halHandle->sciaHandle、rxdata);

    SCI_clearRxFifoOvf (halHandle->sciaHandle);
    sci_clearRxFifoInt (halHandle->sciaHandle);
    HAL_压 电式 AckInt (halHandle、PIE_GroupNumber_9);
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    您可能尚未设置启用 SCI 接收中断所需的位。 假设您不想使用 FIFO、SCICTL2寄存器中的 RX/BK INT ENA 位必须置位。 这由函数处理:

    SCI_enableRxInt (SCI_Handle sciHandle)

    hal.c 中有启用特定中断的函数,例如 HAL_enableAdcInts()。 为 SCI 端口创建类似的功能可能会有所帮助。 然后、您可以在主函数中调用该函数、只是一个想法。 希望这对您有所帮助。

    此致、
    Kevin

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

    Kevin 的回答是否足以回答您的问题? 如果您已解决问题、请发布您发现的内容、以便其他人可以从您的体验中学习。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很抱歉耽误你的回答、Kevin。

    是的、您提到的解决方案确实解决了我的问题。