下面是我的部分代码(发送用的是查询,接收用的是中断,标准SCI模式),程序是这样的,串口调试助手先发送数据,DSP收到数据返回给调试助手,但是DSP能收到数据,但是DSP发送不成功。
_interrupt void sciaRxFifoIsr(void)
{
rdata[i]=SciaRegs.SCIRXBUF.all;//读取接收到的数据
scia_send_en();//发送使能
DELAY_US(10);
SciaRegs.SCITXBUF=rdata[i];//发送接收到的数据
while(SciaRegs.SCICTL2.bit.TXRDY!=1){}//等待发送完毕
i++;
if(i==10){i=0;}
RS485RX_EN() ;//接收使能
PieCtrlRegs.PIEACK.all|=0x100; // Issue PIE ack
}
void scia_fifo_init()
{
SciaRegs.SCICCR.all =0x0007; // 1 stop bit, No loopback
// No parity,8 char bits,
// async mode, idle-line protocol
SciaRegs.SCICTL1.all =0x0003; // enable TX, RX, internal SCICLK,
// Disable RX ERR, SLEEP, TXWAKE
SciaRegs.SCICTL2.bit.TXINTENA =1;
SciaRegs.SCICTL2.bit.RXBKINTENA =1;
SciaRegs.SCIHBAUD = 0x0000;
SciaRegs.SCILBAUD = 0x00C2;
SciaRegs.SCICCR.bit.LOOPBKENA =0; // Disable loop back
/*
SciaRegs.SCIFFTX.all=0xC022;
SciaRegs.SCIFFRX.all=0x0021;
SciaRegs.SCIFFCT.all=0x00;
*/
SciaRegs.SCICTL1.all =0x0023; // Relinquish SCI from Reset
/*
SciaRegs.SCIFFTX.bit.TXFIFOXRESET=1;
SciaRegs.SCIFFRX.bit.RXFIFORESET=1;
*/
}
//发送使能
void scia_send_en()
{
EALLOW;
GpioCtrlRegs.GPAMUX1.bit.GPIO14 =0;//普通IO口
GpioCtrlRegs.GPADIR.bit.GPIO14 =1;//方向输出
EDIS;
GpioDataRegs.GPASET.bit.GPIO14 =1;//高电平
}