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

28335 仿真运行时复位引脚/XRS自动复位如何解决?

在跑一个简单的程序时,执行到初始化中断向量表之后,程序跑飞,一查/XRS电平,发现有一个大概17us的低脉冲(见图1,dsp系统时钟150M)。用ccs 软件reset下,/XRS复位低脉冲消失,但是重新仿真load程序,依然跑飞,/XRS电平再次出现一个大概17us的低脉冲。图2 是本设计jtag和看门口电路图。

图1 /XRS电平,发现有一个大概17us的低脉冲

 

图2 jtag和看门狗电路

 

此外xa12-xa15 悬空处理(至少仿真引导应该没问题,现在仿真时总是出现复位),下面是测试程序,是想写一个dsp读取fifo 的程序,通过中断读取wrful和rdempty状态,然后进行读fifo。

#include "DSP2833x_Device.h"     // DSP2833x Headerfile Include File
#include "DSP2833x_Examples.h"   // DSP2833x Examples Include File
#define rdempty   GpioDataRegs.GPADAT.bit.GPIO21// input
#define wrempty   GpioDataRegs.GPADAT.bit.GPIO23
#define wrfull    GpioDataRegs.GPADAT.bit.GPIO26

#define rdreq     GpioDataRegs.GPADAT.bit.GPIO22//output
#define wrreq     GpioDataRegs.GPADAT.bit.GPIO24
#define DSP_nrst  GpioDataRegs.GPADAT.bit.GPIO25
#define DSP_START GpioDataRegs.GPADAT.bit.GPIO27

Uint16    *ExRamStart = (Uint16 *)0x100000;

Uint16 adc1[100];
Uint16 IntReg[100];
void configGPIO(void);
void DELAY(Uint16 TIM);
interrupt void xint1_isr(void);
interrupt void xint2_isr(void);

void main(void)
{
   Uint16 i; 

   InitSysCtrl();
    DINT;
   InitPieCtrl();
// Disable CPU interrupts and clear all CPU interrupt flags:
   IER = 0x0000;
   IFR = 0x0000;
   InitPieVectTable();
    InitXintf16Gpio(); //zq
  // MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);
  // InitFlash();
   EALLOW;      // PieVectTable.ECAN0INTA = &ECAN0INT_isr;   PieVectTable.XINT1 = &xint1_isr;   PieVectTable.XINT2 = &xint2_isr;   EDIS;
    PieCtrlRegs.PIECTRL.bit.ENPIE = 1;     PieCtrlRegs.PIEIER9.bit.INTx5=1;     // PIE Group 9,can  int5接收中断
   PieCtrlRegs.PIEIER1.bit.INTx4 = 1;   // Enable PIE Gropu 1 INT4  xint1   PieCtrlRegs.PIEIER1.bit.INTx5 = 1;   // Enable PIE Gropu 1 INT4  xint2    IER|=0x101; // Enable CPU group INT1 and 9   EINT;    //开全局中断

   InitECanaGpio();
   InitECana();
  // ECanConfig();
      configGPIO();
   DisableDog();

/*set rdempty(gpio 21) as xint1, wrfull(gpio 26) as xint2*/
  /* EALLOW;
   GpioCtrlRegs.GPAQSEL1.bit.GPIO20 = 2;        // XINT1 Qual using 6 samples
   GpioCtrlRegs.GPAQSEL2.bit.GPIO26 = 2;        // XINT2 Qual using 6 samples
   GpioCtrlRegs.GPACTRL.bit.QUALPRD0 = 0x80;   // Each sampling window is 128*SYSCLKOUT   EDIS;
*/
// GPIO21 is XINT1, GPIO26 is XINT2
   EALLOW;
   GpioIntRegs.GPIOXINT1SEL.bit.GPIOSEL = 21;   // Xint1 is GPI21
   GpioIntRegs.GPIOXINT2SEL.bit.GPIOSEL = 26;   // XINT2 is GPIO26
   EDIS;

// Configure XINT1,2
   XIntruptRegs.XINT1CR.bit.POLARITY = 1;      // Rising edge interrupt
   XIntruptRegs.XINT2CR.bit.POLARITY = 1;      // Rising edge interrupt
  // disable XINT1 and XINT2     XIntruptRegs.XINT1CR.bit.ENABLE = 0;        // disable Xint1
   XIntruptRegs.XINT2CR.bit.ENABLE = 0;        // disable XINT2

 

   for(i=0;i<100;i++)
   {
    adc1[i]=0;
   }

  DSP_START=1;
  DELAY(1);
  DSP_nrst=1;
  DELAY(2);
  DSP_nrst=0;
  DELAY(2);
  DSP_nrst=1;
  DELAY(20);// wait for fpga pll initialize

  wrreq=1;

// enable XINT1 and XINT2     XIntruptRegs.XINT1CR.bit.ENABLE = 1;        // enable Xint1
   XIntruptRegs.XINT2CR.bit.ENABLE = 1;        // enable XINT2

  for(;;)
  {
 
   }

}

//===========================================================================
// No more.
//===========================================================================

interrupt void xint1_isr(void)//rdempty
{
  rdreq=0;
  wrreq=1;
  PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; 
}

interrupt void xint2_isr(void)//wrfull{Uint16 i;
   wrreq=0;
   PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;

   for(i=0;i<100;i++)
    IntReg[i]=*(ExRamStart+i);
}
void configGPIO(void)
{
   EALLOW;
   /*LED*/
   GpioCtrlRegs.GPAMUX1.bit.GPIO10 = 0; // gpio   GpioCtrlRegs.GPADIR.bit.GPIO10 = 1; //output
   GpioCtrlRegs.GPAMUX1.bit.GPIO11 = 0; // gpio
   GpioCtrlRegs.GPADIR.bit.GPIO11 = 1; //output

   /*rdempty , wrempty, wrfull */
   GpioCtrlRegs.GPAMUX2.bit.GPIO21 = 0; // gpio
   GpioCtrlRegs.GPADIR.bit.GPIO21 = 0; //input   GpioCtrlRegs.GPAMUX2.bit.GPIO23 = 0; // gpio
   GpioCtrlRegs.GPADIR.bit.GPIO23 = 0; //input
   GpioCtrlRegs.GPAMUX2.bit.GPIO26 = 0; // gpio
   GpioCtrlRegs.GPADIR.bit.GPIO26 = 0; //input

   /*rrreq,wrreq,DSP_nrst,DSP_start */
   GpioCtrlRegs.GPAMUX2.bit.GPIO22 = 0; // gpio
   GpioCtrlRegs.GPADIR.bit.GPIO22 = 1; //output
   GpioCtrlRegs.GPAMUX2.bit.GPIO24 = 0; // gpio
   GpioCtrlRegs.GPADIR.bit.GPIO24 = 1; //output
   GpioCtrlRegs.GPAMUX2.bit.GPIO25 = 0; // gpio
   GpioCtrlRegs.GPADIR.bit.GPIO25 = 1; //output
   GpioCtrlRegs.GPAMUX2.bit.GPIO27 = 0; // gpio
   GpioCtrlRegs.GPADIR.bit.GPIO27 = 1; //output
   EDIS;
}

void DELAY(Uint16 TIM)
{
   DELAY_US(TIM);
  ServiceDog();
}

 

 

Eric Ma:

1,初始化的时候,先关看门狗试试。

2. 你这程序应该是跑在RAM吧?看你把memcpy和initflash注释掉,如果跑在flash,memcpy等要调用。

3. 你单步跑一下,看刚好是哪句代码导致跑飞。

ERIC

赞(0)
未经允许不得转载:TI中文支持网 » 28335 仿真运行时复位引脚/XRS自动复位如何解决?
分享到: 更多 (0)