大家好,
我正在使用C28x F2.8335万 Delphino微控制器定制板,我想通过SCI接口(即SCIB在一个板上,SCIC在另一个板上)在这两个相似的板之间建立通信。
我尝试对每个主板分别使用回路机制,工作正常。 但是,如果我移除回环并将这些自定义板相互连接,则接收端最明显的半点是错误的, 例如,当我尝试从一个主板传输数据(0xAA),并在另一个主板上接收相同的数据时,我可以接收0x5A或0x4A,而不是0xAA (正确数据)。 每次传输数据时,SCIRXBUF的帧错误位均为1。 我尝试检查微控制器TX引脚上传输的数据,请参阅随附的文件。
我已将 SCIFFRX缓冲器配置为 RXFFIL长度为1字节, 且RXFFIENA已启用。
此处附加了我的项目文件。
************************* /
#IF 1.
#include "DSP28x_Project.h" //设备头文件和示例包括文件
#pragma code_section (InitFlash,"ramfuncs");
#define CPU_FREQ 150E6
#define LSPCLK_FREQ CPU_FREQ/4
#define SCI_FREQ 100E3
#define SCI_PRD (LSPCLK_FREQ/(SCI_FREQ*8))-1
//本文件中找到的函数的prototype语句。
//__interrupt void scicTxFifoIsr (void);
__interrupt void scicRxFifoIsr (void);
void scic_fifo_init(void);
void InitScicGpio();
UINT16 rdataB[8]; //接收到SCI-A的数据
外部UINT16 RamfuncsLoadStart;
外部UINT16 RamfuncsLoadEnd;
外部UINT16 RamfuncsRunStart;
extern UINT16 RamfuncsLoadSize;
void delay()(无效延迟)
{
无符号int I,j;
对于(i = 0;i < 500;I++)
对于(j = 0;j < 500;j++);
}
UINT16 Recv_dat = 0x00;
Void主(void)
{
UINT16 I;
unsigned char SendChar= 0x00;
InitSysCtrl();
InitScicGpio();
色调;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectorTable();
Memcopy (&RamfuncsLoadStart,&RamfuncsLoadEnd,&RamfuncsRunStart);
InitFlash();
EALLOW;
PieVectorTable.SCIRXINTC =&scicRxFifoIsr;
EDIS;
scic_fifo_init();// 初始化SCI-B
PieCtrlRegs.PIECTRL.bit.ENPIE =1; //启用PIE块
PieCtrlRegs.PIEIER8.bit.INTx5 =1; // PIE组9,INT3
IER |= 0x080;
EINT;
同时(1)
{
对于(i = 0;i < 8;I++)
{
scicRegs.SCITXBUF=0x55;//SendChar;
DELAY ();DELAY ();DELAY ();DELAY ();DELAY ();
DELAY ();DELAY ();DELAY ();DELAY ();DELAY ();
DELAY ();DELAY ();DELAY ();DELAY ();DELAY ();
SendChar++;
SendChar &= 0xFF;
}
DELAY ();DELAY ();DELAY ();DELAY ();DELAY ();
}
}
__interrupt void scicRxFifoIsr (void)
{
UINT16 I;
recv_dat = ScicRegs.SCIRXBUF.all;//读取数据
ScicRegs.SCIFFRX.Bit.RXFFOVRCLR=1; //清除溢出标志
ScicRegs.SCIFFRX.bit.RXFFINTCLR=1;//清除中断标志
PieCtrlRegs.PIEACK.all|=0x080;// 发出饼图
}
void scic_fifo_init()
{
ScicRegs.SCICCR.ALL =0x0007; // 1停止位, 无回送
//无奇偶校验,8个字符位,
//异步模式,空闲线路协议
ScicRegs.SCICTL1.ALL =0x0003; //启用TX,RX,内部SCICLK,
//禁用RX ERR,睡眠,TXWAKE
// scicRegs.scicl2.bit.TXINTENA =1;
ScicRegs.SCICT2.bit.RXBKINTENA =1;
ScicRegs.SCIHBAUD = 0x01;
ScicRegs.SCILBAUD = 0xE7;//SCI_PRD;
ScicRegs.SCICCR.bit.LOOPBKENA =0;//启用回路
ScicRegs.SCIFFTX.All=0xC02;
ScicRegs.SCIFFRX.all=0x0021;
ScicRegs.SCIFFCT.All=0x00;
ScicRegs.SCICTL1.ALL =0x0023; //从重置放弃SCI
ScicRegs.SCIFFTX.Bit.TXFIFOXRESET=1;
ScicRegs.SCIFFRX.bit.RXFIFORESET=1;
}
void InitScicGpio()
{
EALLOW;
gpioCtrlRegs.GPBPUD.bit.GPIO62 = 0; //启用GPIO62的上拉(SCIRXDC)
gpioCtrlRegs.GPBPUD.bit.GPIO63 = 0; //启用GPIO63 (SCITXDC)的上拉
gpioCtrlRegs.GPBQSEL2.bit.GPIO62 = 3; //异步输入GPIO62 (SCIRXDC)
gpioCtrlRegs.GPBMUX2.bit.GPIO62 = 1; //为SCIRXDC操作配置GPIO62
gpioCtrlRegs.GPBMUX2.bit.GPIO63 = 1; //为SCITXDC操作配置GPIO63
// GpioCtrlRegs.GPBDIR.bit.GPIO62 = 0; //为SCITXDC操作配置GPIO63
// GpioCtrlRegs.GPBDIR.bit.GPIO63 = 1; //为SCITXDC操作配置GPIO63
EDIS;
}
#endif
提前感谢!
Narsimha。
#if 1#include "DSP28x_Project.h" //设备头文件和示例include文件
#pragma code_section (InitFlash,"ramfuncs");
#define CPU_FREQ 150E6#if 1#include "DSP28x_Project.h" // Device Headerfile and Examples include File
#pragma code_section (InitFlash,"ramfuncs");
#define CPU_FREQ 150E6#define LSPCLK_FREQ CPU_FREQ/4#define SCI_FREQ 100E3#define SCI_PRD (LSPCLK_FREQ/(SCI_FREQ*8))-1
//此文件中找到的函数的prototype语句。//__interrupt void scicTxFifoIsr(void);__interrupt void scicRxFifoIsr(void);void scic_fifo_init(void);void InitScicGpio();
UINT16 rdataB[8]; //接收到SCI-A的数据
extern UINT16 RamfuncsLoadStart;extern UINT16 RamfuncsLoadEnd;extern UINT16 RamfuncsRunStart;extern UINT16 RamfuncsLoadSize;
void delay(){ unsigned int I,j; for (i = 0;i < 500;i++) for (j = 0;j < 500;j++);}
UINT16 Recv_dat = 0x00;void main(void){ UINT16 I; unsigned char SendChar= 0x00;
InitSysCtrl(); InitScicGpio(); DINT;
InitPieCtrl(); IER = 0x0000; IFR = 0x0000; InitPieVectorTable();
Memcopy(&RamfuncsLoadStart,&RamfuncsLoadEnd,&RamfuncsRunStart); InitFlash();
EALLOW; PieVectorTable.SCIRXINTC =&scicRxFifoIsr; EDIS;
scic_fifo_init();// 初始化SCI-B
PieCtrlRegs.PIECTRL.bit.ENPIE =1; //启用PIE块 PieCtrlRegs.PIEIER8.bit.INTx5 =1; // PIE组9,INT3 IER |=0x080; EINT;
while (1) { for (I = 0;I < 8;I++) { ScicRegs.SCITXBUF=0xAA;//SendChar; Delay();Delay();Delay();Delay();Delay();Delay();Delay();Delay();Delay(;SendChar;FF!= Delay; FF!/Delay(;F= Delay; Df;!= Delay(;FSCST;!)= Delay; Df;!= Delay(;FSCST;!= Delay;!= Delay; Df;!=
__interrupt void scicRxFifoIsr (void){
recv_dat = ScicRegs.SCIRXBUF.all;//读取数据
ScicRegs.SCIFFRX.bit.RXFFOVRCLR=1; //清除溢出标志ScicRegs.SCIFFRX.bit.RXFFINTCLR=1;//清除中断标志PieCtrlRegs.PIEACK/all|=0x080; //发出PIE ack}
void scic_fifo_init(){ ScicRegs.sciccr.all =0x0007;// 1个停止位, 无回送 //无奇偶校验,8个字符位, //异步模式,空闲行协议 scicRegs.scicl1.all =0x0003; //启用TX,RX,内部SCICLK, //禁用RX ERR,睡眠,TXWAKE// ScicRegs.SCICT2.bit.TXINTENA =1; ScicRegs.SCICT2.bit.RXBKINTENA =1; ScicRegs.SCIHBAUD = 0x01; ScicRegs.SCILBAUD = 0xE7;//SCI_PRD; ScicRegs.SCICCR.bit.LOOPBKENA =0;//启用回环 ScicRegs.SCIFFTX.all=0xC021; ScicRegs.SCIFFRX.all=0x0021; ScicRegs.SCIFFCT.all=0x00;
ScicRegs.SCICTL1.ALL =0x0023; //从Reset ScicRegs.SCIFFTX.Bit.TXFIFOXRESET=1; ScicRegs.SCIFFRX.bit.RXFIFORESET=1;}放弃SCI
void InitScicGpio(){ EALLOW;
gpioCtrlRegs.GPBPUD.bit.GPIO62 = 0; //启用GPIO62 (SCIRXDC)的上拉 GpioCtrlRegs.GPBPUD.bit.GPIO63 = 0; //启用GPIO63 (SCITXDC)的上拉
gpioCtrlRegs.GPBQSEL2.bit.GPIO62 = 3; //异步输入GPIO62 (SCIRXDC)
gpioCtrlRegs.GPBMUX2.bit.GPIO62 = 1; //为SCIRXDC操作配置GPIO62 GpioCtrlRegs.GPBMUX2.bit.GPIO63 = 1; //为SCITXDC操作配置GPIO63
// GpioCtrlRegs.GPBDIR.bit.GPIO62 = 0; //为SCITXDC操作配置GPIO63 // GpioCtrlRegs.GPBDIR.bit.GPIO63 = 1; //为SCITXDC操作 EDIS配置GPIO63;}#endif
#define LSPCLK_FREQ CPU_FREQ/4#define SCI_FREQ 100E3#define SCI_PRD (LSPCLK_FREQ/(SCI_FREQ*8))-1
//此文件中找到的函数的prototype语句。//__interrupt void scicTxFifoIsr(void);__interrupt void scicRxFifoIsr(void);void scic_fifo_init(void);void InitScicGpio();
UINT16 rdataB[8]; //接收到SCI-A的数据
extern UINT16 RamfuncsLoadStart;extern UINT16 RamfuncsLoadEnd;extern UINT16 RamfuncsRunStart;extern UINT16 RamfuncsLoadSize;
void delay(){ unsigned int I,j; for (i = 0;i < 500;i++) for (j = 0;j < 500;j++);}
UINT16 Recv_dat = 0x00;void main(void){ UINT16 I; unsigned char SendChar= 0x00;
InitSysCtrl(); InitScicGpio(); DINT;
InitPieCtrl(); IER = 0x0000; IFR = 0x0000; InitPieVectorTable();
Memcopy(&RamfuncsLoadStart,&RamfuncsLoadEnd,&RamfuncsRunStart); InitFlash();
EALLOW; PieVectorTable.SCIRXINTC =&scicRxFifoIsr;// PieVectorTable.SCITXINTB =&scibTxFifoIsr; EDIS;
scic_fifo_init();// 初始化SCI-B
PieCtrlRegs.PIECTRL.bit.ENPIE =1; //启用PIE块 PieCtrlRegs.PIEER8.bit.INTx5 =1; // PIE组9,INT3// PIeINTlRegs.PIEER8.bit.PIEx6=1; // PIE组9,INT4 IER |INT80=;CtrlINT4;
while (1) { for (i = 0;i < 8;i++) { ScicRegs.SCITXBUF=0x55;//SendChar; Delay();Delay();Delay(); Delay();Delay();Delay();Delay();Delay();Delay(;SCICRegs.SCICL1.bit.;FFA;);1;Delay=;SendChar!;FF!/}; Delay( Delay=;Df!;FSCIFSCIFSCIFSC;1; Delay(;FF!=;D; Delay(); Delay(); Delay(;)= Delay(;Df;F;F;F;!=0;D; Delay(;)= Delay(;FSCIFSCIFSCIFChar!/;
__interrupt void scicRxFifoIsr (void){ UINT16 i;unsigned char dat = 0x0, dat1 = 0x0;
// dat = ScicRegs.SCIRXST.Bit.RXRDY;//Recv_dat = ScicRegs.SCIRXEMU;//读取数据
recv_dat = ScicRegs.SCIRXBUF.ALL;//读取数据// dat = ScicRegs.SCIRXST.ALL;// dat1 = ScicRegs.SCIRXST.bit.RXRDY; for (I=0;I<8;I++){// rdataB[I]= ScicRegs.Bit.RXRDY;}/SCIRXBf.READ数据
ScicRegs.SCIFFRX.bit.RXFFOVRCLR=1; //清除溢出标志ScicRegs.SCIFFRX.bit.RXFFINTCLR=1;//清除中断标志PieCtrlRegs.PIEACK/all|=0x080; //发出PIE ack}
void scic_fifo_init(){ ScicRegs.sciccr.all =0x0005;// 1个停止位, 无回送 //无奇偶校验,8个字符位, //异步模式,空闲行协议 scicRegs.scicl1.all =0x0002; //启用TX,RX,内部SCICLK, //禁用RX ERR,睡眠,TXWAKE// ScicRegs.SCICT2.bit.TXINTENA =1; ScicRegs.SCICT2.bit.RXBKINTENA =1; ScicRegs.SCIHBAUD = 0x01; ScicRegs.SCILBAUD = 0xE7;//SCI_PRD; ScicRegs.SCICCR.bit.LOOPBKENA =0;//启用回环 ScicRegs.SCIFFTX.all=0xC021; ScicRegs.SCIFFRX.all=0x0021; ScicRegs.SCIFFCT.all=0x00;
ScicRegs.SCICTL1.ALL =0x0022; //从Reset ScicRegs.SCIFFTX.Bit.TXFIFOXRESET=1; ScicRegs.SCIFFRX.Bit.RXFIFORESET=1;}放弃SCI
void InitScicGpio(){ EALLOW;
gpioCtrlRegs.GPBPUD.bit.GPIO62 = 0; //启用GPIO62 (SCIRXDC)的上拉 GpioCtrlRegs.GPBPUD.bit.GPIO63 = 0; //启用GPIO63 (SCITXDC)的上拉
gpioCtrlRegs.GPBQSEL2.bit.GPIO62 = 3; //异步输入GPIO62 (SCIRXDC)
gpioCtrlRegs.GPBMUX2.bit.GPIO62 = 1; //为SCIRXDC操作配置GPIO62 GpioCtrlRegs.GPBMUX2.bit.GPIO63 = 1; //为SCITXDC操作配置GPIO63
// GpioCtrlRegs.GPBDIR.bit.GPIO62 = 0; //为SCITXDC操作配置GPIO63 // GpioCtrlRegs.GPBDIR.bit.GPIO63 = 1; //为SCITXDC操作 EDIS配置GPIO63;}#endif