本文主要是介绍keil程序在外部RAM中调试的问题总结(个人的一点经验总结),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
keil程序在内部RAM调试的基本步骤网上已经有很多了,我就不再赘述,大家可以在网上搜到很多。
但是有些时候内部RAM并不够用,这就需要将程序装入外部RAM中调试,而在这个过程中可能会出现各种各样的问题,在这里我将会把我遇到过的一些问题和需要注意的地方总结一下,希望能够对大家有所帮助。
有错误的地方也希望大神们能够不吝赐教,提前表示感谢···
转载请注明出处:waitig's blog
先介绍下我项目使用的硬件,芯片是LPC1788,外部RAM是MT48LC4M32B2,大小为16M(128Mb X32 SDRAM),之前用的是MT48LC2M32B2,大小为8M,后来发现东西太多,8M不够用了,所以换成了16M的。
在换RAM时也遇到过一些问题,这个在下文中会有介绍。
- 在外部RAM中调试程序,程序中一定不能有操作外部RAM的代码!
在外部RAM中调试,程序中不要有操作外部RAM的代码,初始化也不要有,包括对RAM相关引脚的操作。
RAM的初始化和引脚的初始化要放到jlink的下载配置文件中,主要是对LPC的寄存器进行相关配置,不要忘了RAM中的读取算法配置。
把我的配置文件贴出来供大家参考一下。
FUNC void PinSel(int p1, int n1, int f1)
{_WDWORD(0x4002C000 + (p1 * 32 + n1) * 4, 0x8 | f1);
}FUNC void InitSDRAM(void)
{int i;PinSel(2,16,1);PinSel(2,17,1);PinSel(2,18,1);PinSel(2,20,1);PinSel(2,24,1);PinSel(2,28,1);PinSel(2,29,1);PinSel(2,30,1);PinSel(2,31,1);for(i = 0; i < 32; i++)PinSel(3,i,1);for(i = 0; i < 21; i++)PinSel(4,i,1);PinSel(4,24,1);PinSel(4,25,1);PinSel(4,30,1);PinSel(4,31,1);/* PCONP |= 1 << 11 */_WDWORD(0x400FC0C4, 0x04288FDE); // Power On EMC/* EMCCONTROL |= 1 */_WDWORD(0x2009C000, 0x0000000
这篇关于keil程序在外部RAM中调试的问题总结(个人的一点经验总结)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!