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.

[参考译文] DRV8301-69M-KIT:串行端口(SCI)在中断模式下不工作

Guru**** 2764385 points

Other Parts Discussed in Thread: MOTORWARE, C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1037194/drv8301-69m-kit-serial-port-sci-not-working-in-interrupt-mode

器件型号:DRV8301-69M-KIT
主题中讨论的其他器件:MOTORWAREC2000WARE

我尝试连接到 DRV8301-69m SCI B。我找到了一个名为 TI Motorware 的硬件抽象层(HAL)模块的文档、第6.7节说明了如何将 SCI/UART 功能添加到 Motorware 项目中。 我的电机没有编码器、因此我使用了评估板外部连接器中的 CAP1和 CAP2 GPIO 引脚。 我已经将 GPIO 设置为指向 SCI-B 的 Rx 和 Tx 我根据这篇文章作出了修改,而在6.7.9中,它显示了如何使用简单的轮询来接收数据。 它的工作原理如图所示。 但是、我想在中断模式下使用端口、因此我从6.7.10开始执行后续步骤。 代码会进行编译、看起来我已使其匹配。 我提到了6.7.9的内容   

if (SCI_rxDataReady (halHandle->sciHandle))

 {while (SCI_rxDataReady (halHandle->sciBHandle)=0);

 dataRx = SCI_getDataNonBlocking (halHandle->sciHandle、&Success);

 Success = SCI_putDataNonBlocking (halHandle->sciHandle、dataRx);

用于轮询。 我删除了此代码并尝试运行实验(BTW 我将实验5b 用作基础)。 它运行正常、除非从未产生中断、因此不接收传入的数据。  

通过以下示例、有人能帮助我确定我缺少的内容吗? 我如何/在哪里可以查看发生了什么故障。 我知道串行输入的外部源在工作、因为轮询模式工作、我使用的设置是相同的。

提前感谢。

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

    Terry、

    感谢您联系 E2E、我们仍在努力让正确的 TI 工程师查看您的帖子。  我们今天稍后应作答。

    最棒的

    Matthew

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="459663" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1037194/drv8301-69m-kit-serial-port-sci-not-working-in-interrupt-mode 命令]它运行正常、但从未产生中断、因此不接收传入的数据。  [/报价]

    您是指 SCIB 中断吗? 您是否添加 ISR 作为步骤11~15?

    请检查是否为 F2806x 和您使用的其他控制器设置了相同的波特率值。 您可能会尝试使用示波器检查 SCI 总线上是否存在信号。

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

    感谢您的回复。 是的、我执行了步骤11-15、但它不起作用或给出错误指示。 结果是代码中的一个排印错误、即中断服务例程。 不清楚为什么在 ISR 中放置断点不起作用或允许我单步执行代码。 我知道这是一个中断、停止处理器会停止其他函数、但它是否应该在断点处中断、或者至少告诉我它不会中断? 在 ISR 内还有其他调试方法吗?

    完成后、HAL 文档中的串行端口实施仍然存在另一个问题。 在第6.7.11节中、讨论了为 ADC 中断提供最高优先级、以便串行端口不取代任何电机功能。 说明显示了如何更改 hal.c 文件函数 HAL_enableAdcInts 中的代码。 更改显示为******* 并被注释掉。 hal.h 中也显示了类似的更改,下面添加了对行的更改**** 并注释掉。 应该这么做的逻辑是合理的、但是如果我取消注释这些行、串行 ISR 会正常工作、但电机将不会运行。 如果我保留这些行的注释并恢复为原始行。 电机运转正常。 基本项目为 lab5b。 如果中断更改很有用、我想进行更改、因为似乎有一个可能的 ISR 冲突、尽管在快速测试中看不到任何中断。 可以告诉我修复程序吗?

    void HAL_enableAdcInts (HAL_Handle handle)

    HAL_Obj * obj =(HAL_Obj *)句柄;


    //启用与 ADC 中断相关的 PIE 中断
    //PI_enableAdcInt (obj->压 电式、ADC_IntNumber_1HP);**
    PI_enableAdcInt (obj->压 电式、adc_IntNumber_1);


    //启用 ADC 中断
    adc_enableInt (obj->adcHandle、adc_IntNumber_1);


    //为 ADC 中断启用 CPU 中断
    //CPU _enableInt (obj->cpuHandle、CPU_IntNumber_1);********
    cpu_enableInt (obj->cpuHandle、cpu_IntNumber_10);

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

    静态内联 void HAL_initIntVectorTable (HAL_Handle handle)

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


    ENABLE_PROTECTED 寄存器_WRITE_MODE;

    //PIe->ADCINT1_HP =&mainISR;*******
    PIe->ADCINT1 = mainISR;
    PI->SCIRXINTB =&sciBRxISR;

    disable_protected_register_write_mode;

    返回;

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

    您无法在任何位置设置断点、因为项目中的优化默认设置为级别2。 如果 未使用嵌套中断并且 SCI ISR 中没有太多代码、则无需为电机控制将 ADC 中断设置为高优先级。

    如果 SCI 配置正确、您可以参考 C2000Ware 中的示例以启用环回模式检查。 安装 C2000Ware 后、您可以在以下文件夹中找到 SCI 示例。  http://www.ti.com/tool/c2000ware

    C:\ti\c2000Ware_3_04_00_00\device_support\f2806x\examples\c28

    BTW, 如果要使用 ADCINT1_HP 中断,则需要在 hal.h 文件中按如下所示更改 HAL_acqAdcInt()。

    静态内联空 HAL_acqAdcInt (HAL_Handle handle、const ADC_IntNumber_e intNumber)

    HAL_Obj * obj =(HAL_Obj *)句柄;


    //清除 ADC 中断标志
    adc_clearIntFlag (obj->adcHandle、intNumber);


    //确认来自 PIE 组10的中断
    // PI_clearInt (obj->压 电式、PI_GroupNumber_10);
    PI_clearInt (obj->压 电筒、PI_GroupNumber_1);

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

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

    谢谢、我很感谢这笔交易! HAL_acqAdcInt 中的更改是缺失的部分、它不在上面提到的 HAL 文档中-至少是我拥有的版本。 现在一切都很好、我非常感谢您的回答。