21ic问答首页 - AT32F407扩展224KSRAM后加入boot程序SRAM超过128K无法运行
AT32F407扩展224KSRAM后加入boot程序SRAM超过128K无法运行
AT32F407使用扩展224KSRAM后,加入boot程序后SRAM超过128K程序无法运行是什么原因,去掉boot程序可以用到200K都没问题,下面是boot的跳转程序
void BOOT_P_Quit(void) //跳转执行另一地址程序
{
if(((*(vu32*)ApplicationAddress)&0x2FFE0000)==0x20000000) //检查栈顶地址是否合法.
{
JumpAddress = *(volatile u32*) (ApplicationAddress + 4); //ApplicationAddress=0x8002000
/* Jump to user application */
Jump_To_Application = (pFunction) JumpAddress;
/*初始化用户应用程序的堆栈指针*/
// MSR_MSP(*(volatile u32*) (ApplicationAddress));
__set_MSP(*(volatile u32*) (ApplicationAddress));
Jump_To_Application();
}
else return;
}
void BOOT_Jump_To_App(void)
{
CRM->apb1rst= 0x00000000; //跳转 关中断 关时钟
CRM->apb2rst= 0x00000000;
CRM->ahben = 0x00000014; //睡眠模式闪存和SRAM时钟使能.其他关闭
CRM->apb1en = 0x00000000;
CRM->apb2en = 0x00000000;
CRM->ctrl = 0x00000001; //使能内部高速时钟HSION
CRM->cfg &= 0xF8FF0000; //复位SW[1:0],HPRE[3:0],PPRE1[2:0],PPRE2[2:0],ADCPRE[1:0],MCO[2:0]
CRM->ctrl &= 0xFEF2FFFF; //复位HSEON, HSEBYP CSSON,PLLON
CRM->cfg &= 0xFF80FFFF; //复位PLLSRC, PLLXTPRE, PLLMUL[3:0] and USBPRE
CRM->clkint = 0x00000000; //关闭所有中断
BOOT_P_Quit(); //执行跳转
}
void BOOT_P_Quit(void) //跳转执行另一地址程序
{
if(((*(vu32*)ApplicationAddress)&0x2FFE0000)==0x20000000) //检查栈顶地址是否合法.
{
JumpAddress = *(volatile u32*) (ApplicationAddress + 4); //ApplicationAddress=0x8002000
/* Jump to user application */
Jump_To_Application = (pFunction) JumpAddress;
/*初始化用户应用程序的堆栈指针*/
// MSR_MSP(*(volatile u32*) (ApplicationAddress));
__set_MSP(*(volatile u32*) (ApplicationAddress));
Jump_To_Application();
}
else return;
}
void BOOT_Jump_To_App(void)
{
CRM->apb1rst= 0x00000000; //跳转 关中断 关时钟
CRM->apb2rst= 0x00000000;
CRM->ahben = 0x00000014; //睡眠模式闪存和SRAM时钟使能.其他关闭
CRM->apb1en = 0x00000000;
CRM->apb2en = 0x00000000;
CRM->ctrl = 0x00000001; //使能内部高速时钟HSION
CRM->cfg &= 0xF8FF0000; //复位SW[1:0],HPRE[3:0],PPRE1[2:0],PPRE2[2:0],ADCPRE[1:0],MCO[2:0]
CRM->ctrl &= 0xFEF2FFFF; //复位HSEON, HSEBYP CSSON,PLLON
CRM->cfg &= 0xFF80FFFF; //复位PLLSRC, PLLXTPRE, PLLMUL[3:0] and USBPRE
CRM->clkint = 0x00000000; //关闭所有中断
BOOT_P_Quit(); //执行跳转
}

问答
您需要登录后才可以回复 登录 | 注册