我用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");
}