DSP是采用28335,外部总线XINTF的地址是0x4000开始,外部总线上面有设备(CPLD)的时候,DSP程序采用断点调试,观察memory的地址0x4000区域数据,自己想改变的地方的数据没有变化,反而其他的数据在来回不断的变化,只要程序执行一条语句,有点地址上的数据就变化一下,不知道这算什么问题。我的写数据语句是这样的:void OUTData(Uint16 *Start_Addr,Uint16 DataBit,int Mode)
{
Uint16 temp=0,temp1;
Uint16 *ptr;
temp=(0x0001<
ptr=(Uint16*)(Start_Addr);
temp1=*ptr;
temp1=(~temp)&temp1;
if(Mode)
{
temp=(0x0001<
temp1=temp|temp1;
}
XBus.XintfL=temp1;
ptr=(Uint16*)(Start_Addr);
*ptr=XBus.XintfL;
}
在主函数中调用的函数:
OUTData((Uint16*)CPLDADDR0,7,1); CPLDADDR0的地址是0x4000,其余的就对应加0x10
OUTData((Uint16*)CPLDADDR6,7,1);
OUTData((Uint16*)CPLDADDR7,8,1);
OUTData((Uint16*)0x100000,8,1);
OUTData((Uint16*)0x40b0,5,1);
OUTData((Uint16*)0x40b1,5,1);
请教有经验的同志指点指点,小弟初来乍到,在这里还有很多疑惑,谢谢了,为什么向对应的地址上写数据,数据不变化,如果把地址更换为内部地址(片上地址),则可以随便改变对应地址的数据,其还不会发生数据乱变的情况。当然如果输读取外部地址的数据,能读出来,怎么变他都能读出来,读数据是没问题,就是写数据之后,好像CPLD那边没反应,不能作出对应的反应,不知到时CPLD没有正确的收到数据呢还是其他原因,按照逻辑和时序,把COLD的程序都编译好了,把程序都烧写到CPLD中了,CPLD也可以跑起来了。另外还有个现象,我使用DSP的GPIO脚控制CPLD的输出来控制LED灯,没问题,DSP输出高电平(1),CPLD就点亮对应的LED,DSP输出低电平(0),CPLD就灭掉LED,这都没问题,就是通过总线的部分不能正确控制执行。还望各位有经验的前辈们指点指点。小弟谢谢了。
XINTF问题
DSP和CPLD通过XINTF进通讯或者是相互访问的时候,出现了你不认识我,我不认识你的状态,说白了就是DSP 收不到CPLD发送的数据,CPLD也收不到DSP 发送的数据,把DSP 的数据手册都看了很多遍了,最后还是没解决好问题,是不是因为时序的原因会导致这些问题呢,或者还是DSP给CPLD发送数据的时候还要把CPLD唤醒,即需要一个中断才能正确读数据呢?按道理DSP给CPLD发送数据,只要DSP直接访问XINTF的地址,比如0X4000的时候,DSP 的对应XZCS0就会有高阻体太或者高电平变低电平,同时XWE0也会变低电平,CPLD收到这两个信号就会做出相关的反应,即读取XD上的数据,可是现在没有这样做,这和XA的译码是不是还有关系呢?,我的地址XA0~XA9,10根地址总线,数据总线是XD0~XD15,16根数据总线,这样进行通讯会有什么问题呢,DSP的写数据程序如上述所的,为什么就是CPLD不能读到正确的数据,或者为什么会没有读到数据呢?