C2000 SysConfig FLASH 模块配置说明
C2000 的 Flash 控制器在 SysConfig 中通过 FLASH 模块配置,对应硬件实例FLASH0CTRL。
Name
实例的逻辑名称,默认myFMC0,生成代码里会用这个名字作前缀。
Calculate Wait State [RWAIT]
控制 RWAIT 等待周期的来源。
| 状态 | 含义 |
|---|---|
| 勾选 | SysConfig 根据你配置的 SYSCLK 频率自动计算 RWAIT,结果显示在下方灰色区域(只读) |
| 不勾选 | 手动填写 RWAIT 值,填错会导致 Flash 读取异常甚至程序跑飞 |
推荐勾选,让工具自动算。
Wait State [RWAIT]
Flash 读取的等待周期数。CPU 频率远高于 Flash,读数据时必须等 Flash 就绪,等待周期越多说明 SYSCLK 越高。
SYSCLK 越高 → RWAIT 越大 例:SYSCLK = 150MHz → RWAIT = 0x3(3 个等待周期)SysConfig 提示说明
工具会在这里显示一条蓝色提示:"It is important to look at your device's datasheet for information about what the required minimum flash wait state is for your selected SYSCLK frequency."
这不是报错,是提醒你:SysConfig 自动计算 RWAIT 的依据是你在时钟配置里填的 SYSCLK 频率。如果频率填错了,算出来的 RWAIT 就可能偏低,Flash 还没准备好 CPU 就去取数据,轻则读到错误数据,重则程序跑飞,而且极难复现。
只要确认 SysConfig 里的 SYSCLK 和实际 PLL 配置一致,这条提示可以忽略。
Enable Prefetch
预取缓冲,CPU 顺序执行时提前把后续指令从 Flash 读进来。
| 状态 | 含义 |
|---|---|
| 勾选 | 顺序代码几乎感觉不到等待周期,性能好 |
| 不勾选 | 每条指令都要等 Flash,性能下降明显 |
Enable Cache
Flash 代码或数据访问缓存,把最近访问过的数据缓存起来。
| 状态 | 含义 |
|---|---|
| 勾选 | 循环体、频繁调用的函数直接命中缓存,不用每次读 Flash |
| 不勾选 | 重复执行的代码也要反复读 Flash,效率低 |
Prefetch 管"向前看",Cache 管"记住用过的",两个一起开效果最好。
Enable ECC
硬件纠错码,检测并修正 Flash 存储中的位翻转错误。
| 状态 | 含义 |
|---|---|
| 勾选 | 自动纠正 1-bit 错误,检测 2-bit 错误,功能安全场景基本必须开 |
| 不勾选 | 位翻转错误无法被发现,数据静默出错 |
ECC Instance
ECC 寄存器基地址,自动关联为FLASH0ECC_BASE,只读,不需要动。
Register Interrupt Handler
是否注册 Flash 中断(主要用于捕获 ECC 错误事件)。
| 状态 | 含义 |
|---|---|
| 勾选 | SysConfig 生成中断注册代码,可在 ISR 里处理 ECC 错误 |
| 不勾选 | 不处理 Flash 中断,一般应用保持默认即可 |
对应代码
FLASH 模块的配置最终对应device.c里Device_init()中的这一行:
Flash_initModule(FLASH0CTRL_BASE, FLASH0ECC_BASE, DEVICE_FLASH_WAITSTATES);FLASH0CTRL_BASE:Flash 控制器基地址FLASH0ECC_BASE:ECC 寄存器基地址DEVICE_FLASH_WAITSTATES:RWAIT 值,定义在device.h,根据 SYSCLK 频率预设
使用 SysConfig 工程时,这个调用会移到生成文件里,device.c里原来那行会被条件编译屏蔽,不会重复执行。
总结
默认全勾 + 自动计算 RWAIT,保证时钟配置和实际 PLL 一致就行。