#include "DSP28x_Project.h" // Device Headerfile and Examples Include File
unsigned int Sci_VarRx,temp_RX;
unsigned int Sci_VarTx;
volatile Uint16 * ptr;
int Send_Flag;
int SciaTx_Ready(void);
int SciaRx_Ready(void);
int Rx_flag,ix,ii,n;
int Tx_flag;
void Scia_init(void);
int str_TX[]={0x01,0x03,0x21,0x00,0x00,0x01};//010321000001
unsigned int Crc_16();
unsigned int crc16,crc1,crc2;
unsigned int str_RX[100];
int Rx_Int16=0x1234;
void main(void)
{
crc16=Crc_16();
crc1=crc16%256;
crc2=crc16/256;
Rx_flag=0;
Tx_flag=0;
Sci_VarRx = 0;
Sci_VarTx = 0;
Send_Flag = 0;
InitSysCtrl();//LSPCLK=SYSCLKOUT/2=60MHZ/2=30MHZ
InitSciaGpio();
EALLOW;
GpioCtrlRegs.GPAPUD.bit.GPIO25 = 0; //配置485-RTS使能上拉
GpioCtrlRegs.GPAMUX2.bit.GPIO25 = 0; //配置485-RTS的GPIO25为IO功能
GpioCtrlRegs.GPADIR.bit.GPIO25 = 1; //配置485-RTS为输出
GpioDataRegs.GPADAT.bit.GPIO25 = 0; //设置485-RTS默认输出为低电平
EDIS;
DINT;
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
Scia_init();
EnableInterrupts();
PieCtrlRegs.PIECTRL.bit.ENPIE = 1;
EINT;
ERTM;
for(;;)
{
SciaRx_Ready();
if(Rx_flag == 1)
{
ix=0;
while(SciaRegs.SCIRXST.bit.RXRDY == 1)
{
str_RX[ix]=0;
str_RX[ix]= SciaRegs.SCIRXBUF.all;
DELAY_US(1000);
ix++;
}
SciaTx_Ready();
if(Tx_flag==1)
{
n=sizeof(str_RX)/sizeof(int);
for(ii=0;ii<n;ii++)
{
SciaRegs.SCITXBUF =str_RX[ii];
DELAY_US(1000);
}
}
}
}
}
void Scia_init()
{
SciaRegs.SCICCR.all =0x0007; // 设置通信控制寄存器
SciaRegs.SCICTL1.all =0x0003; // 设置SCI控制寄存器1
SciaRegs.SCICTL2.all =0x0003;//设置控制寄存器2
SciaRegs.SCICTL2.bit.TXINTENA =1; //使能TXRDY中断
SciaRegs.SCICTL2.bit.RXBKINTENA =1; //使能RXRDY/BRKDT中断
SciaRegs.SCIHBAUD =0x0000; //
SciaRegs.SCILBAUD =0x00C2
SciaRegs.SCICTL1.all =0x0023; // 0x0023 = 0010 0011
//SW RESET = 1(系统复位后,向此位写入1将重新使能SCI)
}
int SciaRx_Ready()
{
GpioDataRegs.GPADAT.bit.GPIO25 = 0; //低电平,收数据
DELAY_US(10000);
if(SciaRegs.SCIRXST.bit.RXRDY == 1)
{
Rx_flag = 1;
}
else
{
Rx_flag=0;
}
return(Rx_flag);
}
int SciaTx_Ready(void)
{
GpioDataRegs.GPADAT.bit.GPIO25 = 1; //高电平,发数据
DELAY_US(10000);
if(SciaRegs.SCICTL2.bit.TXRDY == 1)
{
Tx_flag=1;
}
else
{
Tx_flag=0;
}
return(Tx_flag);
}
上述程序要实现的功能是:DSP通过485与PC机的“串口调试软件”通讯,“串口调试软件”首先按十六制发送一个串03 03 20 00 00 01,DSP接收到后,把接收的值 01 03 20 00 00 01发送给PC,即把接收到的值,发送给PC。
现在的问题是:串口调试软件只能接收到01,其它的接收不到;如果用串口调试软件发送02、03或04给DSP时,接收值都是正确的(即02、03、04),PC就是在发送多个值时,DSP只能接收到最后一个值。我查看了DSP接收数组的内容 ,只有str_RX[0]有接收值,即上述的01;如果DSP单独发送str_TX数据的值时,PC接收是正确的;可能是DSP程序的接收部分的语句有点问题,请各位指点一下! |