This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

AD和DA不能同时正确运行

我用AD采集数据送入2812,然后再由DA送出。但是DSP不能给出正确的数据给DA。可如果把AD程序删掉,直接给DA送固定的数值,DA是可以正常工作的。请专家指教。

/*********************************************************************

**********************************************************************/

#include "DSP28_Device.h"

#define RAMBASE 0x00002000                    //总线地址,对应于片选线XZCS0and1

Uint32 *rambase;

unsigned int * SPI_CS  = (unsigned int *) 0x4500; //0X4500是CPLD的SPICS地址

Uint16 dataad,datada=0;

void Ad7643(void); //AD采样

void DA(Uint16);

void delay(Uint16);

void main(void)

{  

/*初始化系统*/

InitSysCtrl();

/* 关中断 */

DINT;

IER = 0x0000;

IFR = 0x0000;

/* 初始化PIE控制寄存器 */

InitPieCtrl();

/* 初始化PIE参数表 */

InitPieVectTable();

/* 初始化外设寄存器 */

   while(XintfRegs.XINTCNF2.bit.WLEVEL!=0)

{}

InitPeripherals();

/*设置CPU*/

EINT;   // Enable Global interrupt INTM

ERTM; // Enable Global realtime interrupt DBGM

for(;;)

{

      Ad7643(); //AD采样

       DA(dataad);

}

}

void Ad7643(void)

{

 *SPI_CS=0x00;

 SpiaRegs.SPITXBUF=0x0058;

 GpioDataRegs.GPBDAT.bit.GPIOB6=1;

 delay(10);

 GpioDataRegs.GPBDAT.bit.GPIOB6=0;

 while( GpioDataRegs.GPEDAT.bit.GPIOE0==1||Spi_RxReady() == 0); //没检测到接收准备信号

 if(GpioDataRegs.GPEDAT.bit.GPIOE0==0&&Spi_RxReady() == 1) //当检测到SPI接收准备信号致1时,开始接收数据

    dataad=SpiaRegs.SPIRXBUF; //DSP读取数据

 if(SpiaRegs.SPISTS.bit.OVERRUN_FLAG==1)

    SpiaRegs.SPISTS.bit.OVERRUN_FLAG=1;

}

void DA(Uint16 datada)

{

GpioDataRegs.GPBDAT.bit.GPIOB0=1;

   GpioDataRegs.GPBDAT.bit.GPIOB0=0;

   rambase=(Uint32 *)RAMBASE;

*rambase=datada;

}

void delay(Uint16 t)

{

Uint16 i;

for(i=0;i<t;i++)

 asm("NOP");

}