Other Parts Discussed in Thread: TMS320F28377D
器件型号: TMS320F28377D
我对将数据从闪存复制到 RAM 时的数据缓存行为有疑问。
*环境:**
- CPU: TMS320F28377D
-板:定制印刷电路板
-时钟频率: 200MHz(5ns/周期)
-代码段:.TI.ramfunc(从 RAM 执行)
-闪存等待状态: 3 个周期
-数据缓存:已启用
-预取:已启用
**测试已执行:**
我通过切换 GPIO13、同时使用两种不同的方法将 128 位数据从闪存(扇区 H:0x0a1700)复制到 RAM (LS5:0x00ac00)、测量了处理时间:
1.预编程指令:读取 16 位数据 8 次
2. MOVL 指令:读取 32 位数据 4 次
***测量结果:**
-预置:170ns
- MOVL: 70ns
-撤销执行顺序时结果相同
**测试代码:**
MOVW DP、#_GpioDataRegs
;将闪存复制到 RAM(字* 8 )
MOVL XAR7、#0x0a1700 ;来源 (闪存扇区 H)
MOVL XAR4、#0x00ac00 ;目标 (LS5 RAM)
或 μ@ GpioDataRegs+2、#0x2000 ;GPIO13=高电平
RPT #7.
|| PREAD *XAR4++、*XAR7
或 2 σ@ GpioDataRegs+4、#0x2000 ;GPIO13=低电平
NOP
;将闪存复制到 RAM(双字* 4)
MOVL XAR7、#0x0a1700 ;来源 (闪存扇区 H)
MOVL XAR4、#0x00ac00 ;目标 (LS5 RAM)
或 μ@ GpioDataRegs+2、#0x2000 ;GPIO13=高电平
L1: MOVL ACC、*XAR7++
MOVL *XAR4++、符合
L2: MOVL ACC、*XAR7++
MOVL *XAR4++、符合
L3: MOVL ACC、*XAR7++
MOVL *XAR4++、符合
L4: MOVL ACC、*XAR7++
MOVL *XAR4++、符合
或 2 σ@ GpioDataRegs+4、#0x2000 ;GPIO13=低电平
**我的假设:**
对于 MOVL 指令:第一次读取会产生总共 4 个周期的等待周期(3 个周期)、而后续读取会命中高速缓存、每个只需要 1 个周期。 总计:5ns×(4+7)= 55ns
对于预编程指令:不使用高速缓存、每次读取都会出现等待周期。 总计:5ns× 4 × 8 = 160ns
**问题:**
1.这个假设是正确的吗?
2.为什么 pread 指令不使用缓存,即使数据缓存和预取都已启用?
3.是否有任何可能,我误配置的东西或使用这些指令不正确?
任何见解都将非常感谢。
提前感谢您的帮助。