官网的2.9.1的sdk,RT1170跑emwin,编译器是keil.发现几个没运行到的代码也会影响emwin的frambuf的切换频率(慢的时候只有30hz,快的和屏幕刷新率一样60hz,实际效果也能感觉出来)
这2条语句是在跳转到app时候,关闭SCB_DisableDCache和SCB_DisableICache()。实际上这2个语句并不会运行,但是加了画面刷新就明显慢了。
if(((*(uint32_t*)(FLASH_APP_CODE_ADD+4))&0xFF000000) == 0x30000000)
{
//这里不会运行
SCB->VTOR = 0;
__ISB();
__DSB();
SCB->VTOR = (uint32_t )FLASH_APP_CODE_ADD;
SCB_DisableDCache();//加了这2句,不加while(1)会变慢
SCB_DisableICache();
appMain = (iapFun)*(uint32_t*)(FLASH_APP_CODE_ADD+4);
__set_MSP(FLASH_APP_CODE_ADD);
__set_PSP(FLASH_APP_CODE_ADD);
appMain();
while(1);//加了这句,再加SCB_DisableDCache();SCB_DisableICache();也不会变慢。实际这句也不会运行。
}
但是如果不加SCB_DisableDCache();和SCB_DisableICache(); app和boot 不能把rw ro 段设置到同一个地址。
还有时钟设置函数BOARD_BootClockRUN里面的设置也会影响运行的速度,如果app里面加了下面这些也会变慢,这个SKIP_SEMC_INIT
宏是定义在#include "board.h"里面的。官网的2.9.1的sdk并在clock_config.c里面包含这个头文件,导致这个SKIP_SEMC_INIT是一直是未定义的。
#ifndef SKIP_SEMC_INIT
rootCfg.mux = kCLOCK_SEMC_ClockRoot_MuxSysPll2Pfd1;
rootCfg.div = 3;
CLOCK_SetRootClock(kCLOCK_Root_Semc, &rootCfg);
#endif
#if defined(XIP_BOOT_HEADER_ENABLE) && (XIP_BOOT_HEADER_ENABLE == 1)
#if defined(XIP_BOOT_HEADER_DCD_ENABLE) && (XIP_BOOT_HEADER_DCD_ENABLE == 1)
UpdateSemcClock();
#endif
#endif
而且下一条函数UpdateSemcClock里面CCM->CLOCK_ROOT[kCLOCK_Root_Semc].CONTROL = 0x602;设置的寄存器也是和上面CLOCK_SetRootClock一样的。为什么还有加这个?还有为什么要特意吧UpdateSemcClock定义在内部itcm?
Hi,
非常感谢使用NXP产品,很高兴为你提供技术支持!
请参考与非网的问题:https://www.nxpic.org.cn/module/forum/thread-622488-1-1.html
Have a great day,
TIC
-------------------------------------------------------------------------------
Note:
- If this post answers your question, please click the "Mark Correct" button. Thank you!
- We are following threads for 7 weeks after the last post, later replies are ignored
Please open a new thread and refer to the closed one, if you have a related question at a later point in time.
-------------------------------------------------------------------------------