TI中文支持网
TI专业的中文技术问题搜集分享网站

TMS320F2808的串口SCI与PC通信的问题

一个简单的SCI程序,使用SCIA,8位数据,1位停止位,无校验位,波特率为115200。程序实现的功能是,先发送一个字节给PC,再等待PC发送一个字节,DSP接受到PC发送的字节后在接受中断里发回给PC。问题在于串口调试助手无法接受到数据,但是如果使能发送中断却可以进发送中断,PC发回的数据DSP也接受不到。。。请高手指点~

#include "DSP280x_Device.h"
#include "DSP280x_Examples.h"

#define CPU_FREQ 100E6
#define LSPCLK_FREQ CPU_FREQ/4
#define SCI_FREQ 115200
#define SCI_PRD (LSPCLK_FREQ/(SCI_FREQ*8))-1

void Init_Scia(void);
interrupt void scia_rx_isr(void);
void main(void)
{
InitSysCtrl();
InitSciGpio();
Init_Scia();

DINT;
IER = 0x0000;
IFR = 0x0000;
EINT;

InitPieCtrl();
InitPieVectTable();

EALLOW;
PieVectTable.SCIRXINTA = &scia_rx_isr;
EDIS;

PieCtrlRegs.PIECTRL.bit.ENPIE = 1;
PieCtrlRegs.PIEIER9.bit.INTx1 = 1;
// PieCtrlRegs.PIEIER9.bit.INTx2 = 1;
IER |= M_INT9;
EINT;
ERTM;

SciaRegs.SCITXBUF = 0x0008;

for(;;)
{ }
}void Init_Scia(void)
{
SciaRegs.SCICTL1.bit.SWRESET = 0;
SciaRegs.SCICCR.bit.STOPBITS = 0; // 1 stop bit
SciaRegs.SCICCR.bit.PARITYENA = 0; // enable TX, RX, internal SCICLK,
SciaRegs.SCICCR.bit.LOOPBKENA = 0;
SciaRegs.SCICCR.bit.ADDRIDLE_MODE = 0;
SciaRegs.SCICCR.bit.SCICHAR = 7;
SciaRegs.SCICTL1.bit.TXENA = 1;
SciaRegs.SCICTL1.bit.RXENA = 1;
SciaRegs.SCIHBAUD = 0x0000;
SciaRegs.SCILBAUD = SCI_PRD;
SciaRegs.SCICTL2.bit.RXBKINTENA = 1;
SciaRegs.SCIPRI.all = 0x0010;
// SciaRegs.SCICTL2.bit.TXINTENA = 1;
SciaRegs.SCICTL1.bit.SWRESET = 1; // Relinquish SCI from Reset
}
interrupt void scia_rx_isr(void)
{
char a = 0;
PieCtrlRegs.PIEACK.all = PIEACK_GROUP9;
a = SciaRegs.SCIRXBUF.all & 0x00FF;
SciaRegs.SCITXBUF = a;
return;
}

Jason Wu4:

1、要想使PC 能接受到数据,需要在发送中断子程序中对SciaRegs.SCITXBUF赋值

2、无法接受PC发回的数据请先检查能否进入接受中断

赞(0)
未经允许不得转载:TI中文支持网 » TMS320F2808的串口SCI与PC通信的问题
分享到: 更多 (0)