请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号: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 标志?
谢谢!