前几天和做硬件的同事,突然发现一个问题。DM642板子在初始上电时能够正常加载算法程序。但是按Reset键后,并没有如期望那样重新加载程序。起初以为是DSP复位时,其它外围芯片的引脚没有复位,而影响了DSP的引脚导致Reset,但是令人失望的是,通过对USB芯片,FLASH芯片正常复位,还是没有解决问题。最后,问题集中在CPLD芯片上面。因为发现这样一个问题,每次重新写CPLD程序时,DSP可以正常复位后加载程序,那么显然可以说明在按复位键时。cpld没有恢复到上电时的状态。这样导致无法正常复位,后来仔细检测才发现。DSP的高三根地址线,我们是连接CPLD用来设置CPLD寄存器的值,根据CPLD寄存器的值以选择不同的FLASH页,而我的算法是放在第4页的。也就是在CPLD寄存器中设置了4,使用DSP访问的是flash第4页地址。加载完成第4页的程序,并没有将CPLD的页的地址恢复到第0页,还是保存4的值,这样就导致了,是reset时。硬件从0x90000000加载的不是flash
第0页的1k boot代码,而是从第4页加载程序,而第4页并不是bootloader代码。所以才会导致加载失败。最后,在程序中。当加载完成flash代码时。对上述CPLD寄存器,恢复到0,问题圆满解决!!!