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.

[参考译文] TMS320F28069M:28069M HAL SCI FIFO 实现故障

Guru**** 2394305 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/881177/tms320f28069m-28069m-hal-sci-fifo-implementation-failure

器件型号:TMS320F28069M

我尝试在28069M launchpad 上使用 HAL 启用 SCI FIFO、但无法使其正常工作。

这是迄今为止位于 hal.c 中的代码。

void HAL_setupSciB (HAL_Handle handle){
HAL_Obj * obj =(HAL_Obj *)句柄;
sci_reset (obj->sciHandle);
sci_enableTx (obj->sciHandle);
sci_enableRx (obj->sciHandle);
sci_disableParity (obj->sciHandle);
SCI_setNumStopBits (obj->sciHandle、SCI_NumStopBits);
SCI_setCharLength (obj->sciHandle、SCI_CharLength _8_Bits);

/////////////////////////////////// START:这是我从 HAL 教程中添加的用于启用 FIFO 的部分
sci_enableTxFifoEnh (obj->sciBHandle);
SCI_setRxFifoIntLevel (obj->sciBHandle、SCI_FifoLevel_1_Word);
SCI_setTxFifoIntLevel (obj->sciBHandle、SCI_FifoLevel_1_Word);
sci_enableRx (obj->sciHandle);
sci_enableTx (obj->sciHandle);

/////////////////////////////////// 结束


//将波特率设置为115200
SCI_setBaudRate (obj->sciHandle、(SCI_baudRate_e)(0x0061));
SCI_setPriority (obj->sciHandle、SCI_Priority_freRun);
sci_enable (obj->sciHandle);

注释中未包含的代码部分来自 HAL 教程。 我测试了非 FIFO 器件、它的工作方式是调用 SCI ISR、但一旦我添加了指示的 FIFO 代码、它就不会再调用 ISR。 我使用之前的外设头文件对28069M 进行了编程、它的工作原理是正常的、但它不能使用 HAL。

是否有某种称为我正在忽略的函数顺序、或者是否有其他东西?

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

    您尝试生成哪种中断? 我在您共享的内容中看不到任何中断使能代码。 我看到您在哪里设置 FIFO 中断级别、但您是否启用了 FIFO 中断(SCI_enableTxFifoInt 或 SCI_enableRxFifoInt)?

    惠特尼

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

    好的。 SCI_enableRxFifoInt()是我忽略的,但在加上它之后,FIFO 似乎仍然不起作用,直到我再做一些调整。

    这就是我在 init 方法中为同样有困难的人所用的方法:

    void HAL_setupSciB (HAL_Handle handle){
    HAL_Obj * obj =(HAL_Obj *)句柄;

    sci_reset (obj->sciHandle);
    sci_enableTx (obj->sciHandle);
    sci_enableRx (obj->sciHandle);
    sci_disableParity (obj->sciHandle);
    SCI_setNumStopBits (obj->sciHandle、SCI_NumStopBits);
    SCI_setCharLength (obj->sciHandle、SCI_CharLength _8_Bits);

    sci_enableTxFifoEnh (obj->sciBHandle);
    SCI_setRxFifoIntLevel (obj->sciHandle、SCI_FifoLevel_4_words);//进行相应的调优
    SCI_setTxFifoIntLevel (obj->sciBHandle、SCI_FifoLevel_1_Word);
    sci_resetChannels (obj->sciHandle);               //这条线似乎是必要的


    //将波特率设置为115200
    SCI_setBaudRate (obj->sciHandle、(SCI_baudRate_e)(0x0061));   //进行相应的调优
    SCI_setPriority (obj->sciHandle、SCI_Priority_freRun);
    sci_enable (obj->sciHandle);
    返回;