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<<DataBit)&0xffff;
ptr=(Uint16*)(Start_Addr);
temp1=*ptr;
temp1=(~temp)&temp1;
if(Mode)
{
temp=(0x0001<<DataBit)&0xffff;
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,这都没问题,就是通过总线的部分不能正确控制执行。还望各位有经验的前辈们指点指点。小弟谢谢了。
此帖出自
小平头技术问答
单步执行第一句
单步执行第二句语句
执行的第三条语句
一周热门 更多>