|
各位:
我的程序在用XDS100仿真时,可以和上位机sci通信正常(通信不正常上位机会报错)。
但是当脱离仿真器运行时,怎么也发不出数据(示波器观察不到波形)。
做了如下尝试:
1、脱离仿真器运行,在10ms定时中断,不断翻转GPIO00输出电平,用示波器可以观察到正确的波形;
interrupt void _TINT0_ISR(void) // CPU-Timer 0
{
CpuTimer0Regs.TCR.bit.TIF = 1;
GpioDataRegs.GPADAT.bit.GPIO0 = ~GpioDataRegs.GPADAT.bit.GPIO0;
PieCtrlRegs.PIEACK.all |= PIEACK_GROUP1;
}
2、在sci接收中断程序中,加入GPIO00翻转程序,当上位机通信时,示波器看不到GPIO00的任何波形,也即sci收不到任何数据;
interrupt void _SCIRXINTA_ISR(void) // SCI-A
{
Uint16 RxData = SciaRegs.SCIRXBUF.bit.RXDT;
//if (SciRxDatas.PointToData < (SciRxDatas.Data+DATAS))
// {*(SciRxDatas.PointToData++) = RxData;}
//JudgeSciRxHeader(RxData,INIT_HEAD1,INIT_HEAD2);
//JudgeSciRxHeader(RxData,NORMAL_HEAD1,NORMAL_HEAD2);
//SciTxDatas.LastRxByte = RxData;
GpioDataRegs.GPADAT.bit.GPIO0 = ~GpioDataRegs.GPADAT.bit.GPIO0;
PieCtrlRegs.PIEACK.all |= PIEACK_GROUP9;
}
3、然后关闭sci接收及发送中断,尝试在main中接收sci数据,并加入GPIO00翻转程序,实际运行时,也观察不到波形,也即没有收到数据。
while (1)
{
//Sci_communication();
Uint16 i;
if (SciaRegs.SCIRXST.bit.RXRDY)
{
i= SciaRegs.SCIRXBUF.bit.RXDT;
GpioDataRegs.GPADAT.bit.GPIO0 = ~GpioDataRegs.GPADAT.bit.GPIO0;
}
//GpioDataRegs.GPADAT.bit.GPIO0 = ~GpioDataRegs.GPADAT.bit.GPIO0;
//DelayMs(1);
}
我的sci初始化程序是:我没有使用FIFO功能。
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 =0;
SciaRegs.SCICTL2.bit.RXBKINTENA =0;
SciaRegs.SCIHBAUD = 0x0000;
SciaRegs.SCILBAUD = 163;//0x00a2;//0x00C2;//19200//0x00C2;(9600)//SCI_PRD;
//SciaRegs.SCICCR.bit.LOOPBKENA =1; // Enable loop back
//SciaRegs.SCIFFTX.all=0xC021;
//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;
SciaRegs.SCICTL1.bit.TXENA=0;
另外可以确认boot mode是基于flash的。实在搞不懂为什么sci收不到数据了,还请哪位兄弟指正下。不胜感激。 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
该献的血还是要献的。你不献他不献。难道让我去献? --- 出自坛友:lovejp1981
|