- UID
- 114293
|
各位:
    我的程序在用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;  
 &nbspieCtrlRegs.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收不到数据了,还请哪位兄弟指正下。不胜感激。 |
|