本帖最后由 clint1207 于 2012-6-6 11:10 编辑
耽误大侠们点时间,问点问题呵。
用DSP2812的XINTF外扩一片AD7864.(硬件已完成)
问题:
1,1,XINT应用在扩展外置AD的编程思路是否正确?
AD的片选信号直接接地,一直选通。可以把AD看做成一个外置RAM,地址只有一个(任意一个,因为只有这一个外设。地址是DSP2812,XINTF接口在CPU映射ZONE0到7中的任意一个区域的任意一个单元)。DSP控制AD,相当于,往RAM里,写数据;DSP读取转换结果,相当于,读RAM里的值。这样理解对吧?!
问题:
1,XINTF编程使用,是否还有问题?!(见高亮部分)
初始化InitXintf(),地址选择ZONE1区,配置了读写的建立,激活,跟踪时间(这些时间应该是与外置AD的时序图相关吧?!)
void InitXintf(void)
{
EALLOW;//是否必要
//选择建立、激活和跟踪的定时转换操作的基本时钟
XintfRegs.XINTCNF2.bit.XTIMCLK = 1;
XintfRegs.XINTCNF2.bit.CLKOFF=1;
XintfRegs.XINTCNF2.bit.WRBUFF=0;
XintfRegs.XTIMING1.bit.X2TIMING=1;
XintfRegs.XTIMING1.bit.USEREADY=0;
XintfRegs.XTIMING1.bit.XSIZE=3;
// Zone 1:
XintfRegs.XTIMING1.bit.XWRTRAIL= 1; //写周期的跟踪时间为*个XTIMCLK周期
XintfRegs.XTIMING1.bit.XWRACTIVE= 3; //写周期的激活等待时间为*个XTIMCLK周期
XintfRegs.XTIMING1.bit.XWRLEAD= 1; //写周期的建立时间为*个XTIMCLK周期
XintfRegs.XTIMING1.bit.USEREADY= 0; //区访问时,忽略XREADY信号
XintfRegs.XTIMING1.bit.XRDLEAD= 1; //读周期的建立时间为*个XTIMCLK周期
XintfRegs.XTIMING1.bit.XRDACTIVE= 3; //读周期的激活等待时间为*个XTIMCLK周期
XintfRegs.XTIMING1.bit.XRDTRAIL= 1; //读周期的跟踪时间为*个XTIMCLK
EDIS;
}
主程序:
unsigned int *AD7864Start=(unsigned int *)0x00004009;//声明AD的在CPU中映射的地址
float data;
void main(void)
{
unsigned int i;
i=0;
InitSysCtrl(); //初始化系统函数
DINT;
IER= 0x0000; //禁止CPU中断
IFR= 0x0000; //清除CPU中断标志
InitPieCtrl(); //初始化PIE控制寄存器
InitPieVectTable();//初始化PIE中断向量表
InitPeripherals();
InitXintf();
*(AD7864Start)=0xf004;// 0xf004是对AD的控制信号(选择转换通道),直接把值写到这个地址里,这个数据就被发到XD0-XD15的数据总线上了吧?!
NOP;
NOP;
NOP;
*(AD7864Start)=0xe004;//想把通过数据线XD13,由高到低的下降沿来启动AD,能这样赋值么?之前往地址里0xf004,然后再0xe004。
for(i=0;i<20;i++);//等待转化
data=*(AD7864Start);//读转结果(?!)
}
实验现象:
1,*(AD7864Start)=0xf004;,用万用表量XD0上的电平,都是高电平,就是说0xf004并没有发到XD数据总线上??
谢谢各位,敬请赐教~ |