完善资料让更多小伙伴认识你,还能领取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 ============= 正如我之前所说,我认为这两次尝试都因某些处理器异常而以崩溃告终。我在这里错过了什么? |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
1906个成员聚集在这个小组
加入小组我的项目我做主,使用GN+Ninja来完成构建系统(VSCode开发RT106X)
36358 浏览 0 评论
NXP IMX8应用处理器快速入门必备:技巧、使用、设计指南
4395 浏览 0 评论
6050 浏览 1 评论
6763 浏览 0 评论
NXP i.MX6UL开发板(linux系统烧录+规格+硬件+模块移植)使用手册
4212 浏览 0 评论
619浏览 2评论
求助,S32G上Core M启动后如何让Core A在Flash指定位置加载uboot?
614浏览 2评论
ESP32-WROVER-IE + LAN8720以太网,GPIO0电压只有1.6v,无法正常进入spi flash boot模式如何解决?
606浏览 2评论
求分享适用于PN7160 Android的NFC工厂测试应用程序
694浏览 2评论
798浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 09:12 , Processed in 1.201305 second(s), Total 78, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号