在实际项目中,经常出现芯片的内部FLASH空间不够的情况,这就需要将程序分一部分装到外部FLASH中。
为了让大家能少走些弯路,在这里把我在这其中遇到的一些问题和经验教训给大家分享一下。
仅供参考,如果有错误的地方欢迎指正,提前表示感谢!
转载请注明出处:blog.csdn.net/waitig1992
如果其中有你想要的算法,直接选择,然后点击add,即可算法添加进去;如果没有,则必须自己手动编写烧写算法。
编写算法的步骤我会在以后介绍,在此不做过多说明。你的算法编写成功后,也会在这个菜单里显示出来,直接选择即可。
FUNC void PinSel(int p1, int n1, int f1)
{
_WDWORD(0x4002C000 + (p1 * 32 + n1) * 4, 0x8 | f1);
}
FUNC void InitNORFlash(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, 0x00000001); // Enable EMC
/* EMCDLYCTL */
_WDWORD(0x400FC1DC, 0x00081818); // Config data read delay
/* EMCCONFIG */
_WDWORD(0x2009C008, 0x00000000); // Little endian mode
/* STATICCONFIG1 */
_WDWORD(0x2009C220, 0x00000081); // 16bit data width
// Disable asynchronous page mode
// Read when active bits are low
// No extend wait
/* STATICWAITWEN1 */
_WDWORD(0x2009C224, 0x00000002); // WaitWEn
/* STATICWAITOEN1 */
_WDWORD(0x2009C228, 0x00000002); // WaitOEn
/* STATICWAITRD1 */
_WDWORD(0x2009C22C, 0x0000001F); // WaitRd
/* STATICWAITPAGE1 */
_WDWORD(0x2009C230, 0x0000001F); // WaitPage
/* STATICWAITWR1 */
_WDWORD(0x2009C234, 0x0000001F); // WaitWr
/* STATICWAITTURN1 */
_WDWORD(0x2009C238, 0x0000000F); // WaitTurn
_sleep_(100);
}
INCLUDE SST39VF1601.ini
InitNORFlash(); // Initialize memory