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.

TMS320F280025: SCI 停止位不对

Part Number: TMS320F280025

我这边用 SCI 通信 ,发送一串数据过去,只有第一个字节正确读出。  如果 把停止位改成2才行, 但是实际上我在DSP软件里面配置的停止位是1位。比如我把收到的数据反馈回来如下。

上位机PC 设置为 1 位停止位时(错误):

[2023-07-21 08:35:40.052]# SEND HEX>
90 07 25 31 44 08 33 22

[2023-07-21 08:35:40.199]# RECV HEX>
90 83 49 26 14 68 12 FF 

上位机PC 设置为 2位停止位时(正确):

[2023-07-21 08:35:33.797]# SEND HEX>
90 07 25 31 44 08 33 22

[2023-07-21 08:35:33.932]# RECV HEX>
90 07 25 31 44 08 33 22 

但是我的代码实际上配置的是1位停止位如下:

//*****************************************************************************
//
// SCI Configurations
//
//*****************************************************************************
void SCI_init(){
MOD_SYS_init();
}

void MOD_SYS_init(){
SCI_clearInterruptStatus(MOD_SYS_BASE, SCI_INT_RXFF | SCI_INT_TXFF | SCI_INT_FE | SCI_INT_OE | SCI_INT_PE | SCI_INT_RXERR | SCI_INT_RXRDY_BRKDT | SCI_INT_TXRDY);
SCI_clearOverflowStatus(MOD_SYS_BASE);
SCI_disableFIFO(MOD_SYS_BASE);
SCI_resetChannels(MOD_SYS_BASE);
SCI_setConfig(MOD_SYS_BASE, DEVICE_LSPCLK_FREQ, MOD_SYS_BAUDRATE, (SCI_CONFIG_WLEN_8|SCI_CONFIG_STOP_ONE|SCI_CONFIG_PAR_NONE));
SCI_disableLoopback(MOD_SYS_BASE);
SCI_performSoftwareReset(MOD_SYS_BASE);
SCI_enableInterrupt(MOD_SYS_BASE, SCI_INT_RXRDY_BRKDT);
SCI_enableModule(MOD_SYS_BASE);
}

void main(void)
{

Device_init();
Interrupt_initModule();
Interrupt_initVectorTable();
Board_init();
Interrupt_enableGlobal();

DEVICE_DELAY_US(300000);

///force SET SCI_CONFIG_STOP_ONE

HWREGH(SCIA_BASE + SCI_O_CCR) = 7;
for(;;)
{
SysLoop();

}
}

__interrupt void INT_MOD_SYS_RX_ISR(void)
{

//add data to array

ModSysRxIrq(SCI_readCharNonBlocking(SCIA_BASE));
// SCI_clearOverflowStatus(SCIA_BASE);
SCI_clearInterruptStatus(SCIA_BASE, SCI_INT_RXRDY_BRKDT);
Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP9);
}

x 出现错误。请重试或与管理员联系。