完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
在使用运行 MPC5674F 的定制硬件进行一些实验时,我在尝试恢复数据缓存中的缓存作为 RAM 配置时遇到了一些麻烦。
在某些时候,在初始化期间,数据缓存似乎被配置为有效地址为 0x40040000 的快速 RAM。目前,我无法修改初始化代码,因此我尝试在软件执行期间解锁它,但每当我尝试解锁它的方式时它都会崩溃——无论是通过 dcblc 指令还是通过设置 L1CSR0[DCLFC]。由于硬件有点像黑盒子(它没有故障转储,而且我还没有合适的调试环境),所以我没有关于导致崩溃的异常的信息。 尽管有所有这些模糊的信息,但我想知道是否有人知道我在尝试解锁此缓存时丢失的东西。 首先,是我无法修改的 MMU 和缓存配置代码(如果注释有误或无用,请警告我,我插入了它们,但我仍在尝试弄清楚 MMU 是如何工作的): ============ mmu_config: e_lis r3, 0x1005 /* TLB 条目 5 */ mtmas0 r3 e_lis r3, 0x8 /* 有效的 TLB 条目 */ e_or2i r3, 0x200 /* 页面大小:16KB */ mtmas1 r3 e_lis r3, 0x4004 /* 链接到地址 0x40040000?*/ mtmas2 r3 e_lis r3, 0x4004 /* 链接到地址 0x40040000?*/ e_or2i r3, 0xf /* 可以在用户或管理员模式下读写 */ mtmas3 r3 se_isync tlbwe msync se_isync ============ 然后,dcache 失效(我省略这段代码是因为它看起来很简单)。全部无效后,再启用并锁定: ============ dcache_enable: e_lis r3, 0x10 /* copyback */ e_or2i r3, 0x1 /* 打开 dcache */ dcache_lock: e_li r3, 512 /* 遍历所有 512 行 */ mtctr r3 e_lis r3, 0x4004 /* 从 EA 0x40040000 开始 */ loop: dcbz 0, r3 /* 将 EA 分配给 dcache 行并将 0 分配给整行 */ dcbtls 0, r0, r3 /* 加载缓存行并锁定它 */ e_addi r3, r3, 32 /* 转到下一个块,直到我们映射到缓存从 0x40040000 开始的所有 16KB */ e_bdnz 循环 ======== ==== 到目前为止,一切都很好。上面的代码似乎工作正常。 最后,有我自己的代码。在尝试重新配置之前,我确保(至少,我尝试过)没有任何东西映射到数据缓存。我的第一次解锁尝试是: ============ .globl UnlockDCache .type UnlockDCache, @function UnlockDCache: unlock_start: e_li r4, 0x100 /* L1CSR0[DCLFC] */ mfspr r3, l1csr0 e_or2i r3, 0x100 msync se_isync mtspr l1csr0, 复制代码r3 se_isync unlock_wait: mfspr r3,l1csr0 se_and r3,r4 e_cmp16i r3,0x100 e_beq unlock_wait cabt_check: mfspr r3,l1csr0 e_li r5,4 se_and r3,r5 e_cmp16i r3,4 e_beq unlock_start .size UnlockDCache,$-UnlockDCache ===== ======= 我的第二次尝试(也没有用)是: ============ .globl UnlockDCacheAlready .type UnlockDCacheAlready, @function UnlockDCacheAlready: e_li r3, 512 mtCTR r3 e_lis r3, 0x4004 dcache_unlocking_loop: dcblc 0, r0, r3 e_addi r3, r3, 32 e_bdnz dcache_unlocking_loop 。大小 UnlockDCacheAlready, $-UnlockDCacheAlready ============= 正如我之前所说,我认为这两次尝试都因某些处理器异常而以崩溃告终。我在这里错过了什么? |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
2135个成员聚集在这个小组
加入小组我的项目我做主,使用GN+Ninja来完成构建系统(VSCode开发RT106X)
37376 浏览 0 评论
NXP IMX8应用处理器快速入门必备:技巧、使用、设计指南
6775 浏览 1 评论
7793 浏览 1 评论
7642 浏览 0 评论
NXP i.MX6UL开发板(linux系统烧录+规格+硬件+模块移植)使用手册
5071 浏览 0 评论
1556浏览 2评论
关于NINA-W132 Wi-Fi模块SPI通信遇到的疑问求解
1208浏览 2评论
如何在MPC PowerPC MCU上首次刷写后禁用BDM?
749浏览 1评论
将HFREFR和LFREFR寄存器值设置为错误的值来将故障注入CMU,但CMU_ISR值始终为零,为什么?
735浏览 1评论
将SPSDK for FRDM-MCX-W71 SDK与VS一起安装时出现hidapi构建错误怎么解决?
678浏览 1评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 02:34 , Processed in 0.665965 second(s), Total 70, Slave 53 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
498