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.

[参考译文] TMS320F280041C:MotorWare:SCIn`t 不起作用

Guru**** 2484615 points
Other Parts Discussed in Thread: C2000WARE, MOTORWARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1442800/tms320f280041c-motorware-sci-interrupt-doesn-t-work

器件型号:TMS320F280041C
主题中讨论的其他器件:MOTORWARE、C2000WARE

工具与软件:

您好! 我的工程基于来自 MotorWare 库5_03的 lab01_eabi。 我将使用 SCIB (GPIO 引脚12和13)。 我可以使用预期的波特率正确传输数据。 n`t 我无法使用 RXINT 接收数据。 中断仅触发一。 接收到的字节不正确、我接收到 FIFO OVF 标志、以此类推。 下面是我的代码:

// UART TX
    GPIO_setMasterCore(12, GPIO_CORE_CPU1);
    GPIO_setPinConfig(GPIO_12_SCITXDB);
    GPIO_setDirectionMode(12, GPIO_DIR_MODE_OUT);
    GPIO_setPadConfig(12, GPIO_PIN_TYPE_PULLUP);
    GPIO_setQualificationMode(12,GPIO_QUAL_ASYNC);

    // UART RX
    GPIO_setMasterCore(13, GPIO_CORE_CPU1);
    GPIO_setPinConfig(GPIO_13_SCIRXDB);
    GPIO_setDirectionMode(13, GPIO_DIR_MODE_IN);
    GPIO_setPadConfig(13, GPIO_PIN_TYPE_STD);
    GPIO_setQualificationMode(13,GPIO_QUAL_ASYNC);
    
void HAL_setupSCIB(HAL_Handle halHandle)
{
  HAL_Obj *obj = (HAL_Obj *)halHandle;

  // Initialize SCIA and its FIFO.
  SCI_performSoftwareReset(obj->sciHandle[1]);

  // Configure SCIA for echoback.

  //SCI_setConfig(obj->sciHandle[1], DEVICE_LSPCLK_FREQ, 9600,
   //                                                  (SCI_CONFIG_WLEN_8 |
    //                                                  SCI_CONFIG_STOP_ONE |
    //                                                  SCI_CONFIG_PAR_NONE));
 SCI_setConfig(obj->sciHandle[1], SYS_PER_CLK, 9600,
                                                     (SCI_CONFIG_WLEN_8 |
                                                      SCI_CONFIG_STOP_ONE |
                                                      SCI_CONFIG_PAR_NONE));
  SCI_resetChannels(obj->sciHandle[1]);

  SCI_resetRxFIFO(obj->sciHandle[1]);

  SCI_resetTxFIFO(obj->sciHandle[1]);

  SCI_clearInterruptStatus(obj->sciHandle[1], SCI_INT_TXFF | SCI_INT_RXFF);

  SCI_enableFIFO(obj->sciHandle[1]);

  SCI_enableModule(obj->sciHandle[1]);

  SCI_performSoftwareReset(obj->sciHandle[1]);

}  // end of DRV_setupSci() function

Interrupt_register(INT_SCIB_RX, &SCIB_ISR);

 SCI_enableInterrupt(halHandle->sciHandle[1],SCI_INT_RXFF);

    SCI_clearInterruptStatus(halHandle->sciHandle[1],SCI_INT_RXFF|SCI_INT_RXRDY_BRKDT);
    SCI_enableModule(halHandle->sciHandle[1]);
    SCI_performSoftwareReset(halHandle->sciHandle[1]);

    SCI_enableInterrupt(halHandle->sciHandle[1],SCI_INT_RXFF|SCI_INT_RXRDY_BRKDT);

    SCI_clearInterruptStatus(halHandle->sciHandle[1], SCI_INT_RXFF|SCI_INT_RXRDY_BRKDT);
    SCI_clearOverflowStatus(halHandle->sciHandle[1]);
    Interrupt_enable(INT_SCIB_RX);
    Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP9);

    //
    // disable global interrupts
    //
    HAL_enableGlobalInts(halHandle);
    
    __interrupt void SCIB_ISR(void)
{

   // if(RS485_IncomeBufferPointer<RS485_BufferSize)
    {
        RS485_IncomeBuffer[RS485_IncomeBufferPointer++]=SCI_readCharBlockingFIFO(halHandle->sciHandle[1]);
    }
    Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP9);
    return;
}

那么、它仅触发一次。 我是不是以一种错误的方式读取数据库? 或者我是否未正确清除 int 标志?

谢谢!

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

    您能不能看一下并参考 C2000Ware 中 F28004x 的 SCI 示例? 请确保正确配置 GPIO 和寄存器作为示例。