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.
各位高手,我用F2812的XINTF外扩AD7865两片,读取数据不采用XREADY信号,根据AD芯片的读取时序配置了XINTF中我所用的ZONE0区域的读取时序,但是在运行程序的时候发现AD芯片工作状态正常,但是DSP不读取AD转换出来的数据。
经过测量似乎是读取数据的信号不对,但是我不知道怎么修改读取程序才对啊~
跪求高手指点啊……
我的F2812程序如下:
#include "DSP281x_Device.h"
#include "DSP281x_Globalprototypes.h"
#include "DSP281x_examples.h"
unsigned int *ptrIDC=(unsigned int *)0x28000; //分配通道指针 在main函数里定义电流电压温度变量以备控制用
unsigned int *ptrIC=(unsigned int *)0x29000;
unsigned int *ptrIB=(unsigned int *)0x2A000;
unsigned int *ptrIA=(unsigned int *)0x2B000;
unsigned int *ptrRESETAD1=(unsigned int *)0x22000;
unsigned int *ptrVDC=(unsigned int *)0x31000;
unsigned int *ptrTB=(unsigned int *)0x32000;
unsigned int *ptrTA=(unsigned int *)0x33000;
unsigned int *ptrEMPTY=(unsigned int *)0x34000;
unsigned int *ptrRESETAD2=(unsigned int *)0x38000;
unsigned int ADTOGO=1;
unsigned long i;
void InitGpioFORAD(void);
void ADGOGOGO(void);
void ADREAD(void);
unsigned int IDC; //这里的声明不影响,这些变量在主程序里声明成为外部变量
unsigned int IC;
unsigned int IB;
unsigned int IA;
unsigned int RESETAD1;
unsigned int VDC;
unsigned int TB;
unsigned int TA;
unsigned int EMPTY;
unsigned int RESETAD2;
void AD7865GO(void)
{
InitGpioFORAD(); //AD芯片所用GPIO的初始化
if(ADTOGO)
{
IDC=5;
ADGOGOGO(); //给出AD转换信号开始转换
}
for(i=0;i<1500;i++); //等待各路AD信号全部转换完成,不用中断是为防止干扰信号误触发中断使采样错误
{
}
ADREAD(); //读AD转换结果到各个相应地址,地址对应在前面的全局声明
}
void ADGOGOGO(void)
{
ADTOGO=0;
GpioDataRegs.GPFDAT.bit.GPIOF14=0;
for(i=0;i<2;i++);
{
}
GpioDataRegs.GPFDAT.bit.GPIOF14=1;
}
void InitGpioFORAD(void)
{
EALLOW;
GpioMuxRegs.GPFMUX.bit.XF_GPIOF14=0; //GPIO14 CONVST signal
GpioMuxRegs.GPFDIR.bit.GPIOF14=1;
EDIS;
}
void ADREAD(void)
{
ADTOGO=1;
IA=(*ptrIA);
for (i=0;i<2;i++); //每次读取之后需要延时一下保证AD7865能提供下一组数据
{}
IB=(*ptrIB);
for(i=0;i<2;i++);
{}
IC=(*ptrIC);
for(i=0;i<2;i++);
{}
IDC=(*ptrIDC);
for(i=0;i<5;i++);
{}
RESETAD1=(*ptrRESETAD1); //提供手册上的AD恢复信号
for(i=0;i<2;i++);
{}
TA=(*ptrTA);
for(i=0;i<2;i++);
{}
TB=(*ptrTB);
for(i=0;i<2;i++);
{}
VDC=(*ptrVDC);
for(i=0;i<2;i++);
{}
EMPTY=(*ptrEMPTY); //根据全部转换完之后读取AD的时序,AD2有一路没有数据但是为了时序完整也加入了读信号
for(i=0;i<2;i++)
{}
RESETAD2=(*ptrRESETAD2);
for(i=0;i<5;i++);
{}
}