完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
大家好,为了这个目的,我试图让数据缓存在 mpc5777c 中用作 ram,我已经使 dcache 失效并在回拷贝模式下启用,然后我在地址 0x40040000 处创建了一个 tlb 条目并将其设置为可缓存
的dcache 代码是这样的: .section .text .global assemblyFunction 装配函数: cfg_DCACHE: /*--------------------------------------------# # 无效 - 设置 CINV # # L1CSR0 寄存器中的 e_bit # #--------------------------------------------*/ e_li r5, 0x0000 e_ori r5, r5, 0x0002 同步 同步 中期战略计划 1010,r5 /*----------------------------------------# # 屏蔽掉 CINV 和 CAbT 看看是否# # 失效完成(即 CINV=0,# #CAbT=0)# #----------------------------------------*/ label_DCINV_check: /*----------------------------------------# # 使用掩码加载寄存器:# # 将 CINV 掩码加载到 R8 # # 将 CAbT 掩码加载到 R7 # # 将 CAbT 清除掩码加载到 R11 # #----------------------------------------*/ e_li r8, 0x0000 e_ori r8, r8, 0x0002 e_li r7, 0x0000 e_ori r7, r7, 0x0004 e_li r11, 0xFFFF e_or2i r11, 0xFFFB CHECK_DCINV: /*----------------------------------------# #读取1010寄存器,存入r9# #----------------------------------------*/ mfspr r9, 1010 /*----------------------------------------# # 检查缓存无效的 Ae_bORT # # 手术 # #----------------------------------------*/ 和。r10, r7, r9 e_beq D_NO_ABORT /*----------------------------------------# # 如果检测到 ae_bort,清除 CAe_bT e_bit 和 # #重新运行失效# #----------------------------------------*/ 和。r10, r11, r9 同步 同步 中期战略计划 1010,r10 e_b cfg_DCACHE D_NO_ABORT: /*----------------------------------------# # 检查失效是否已经完成 - # #(CINV=0)。如果无效则分支# # 完全的。# #----------------------------------------*/ 和。r10, r8, r9 e_bne CHECK_DCINV /*----------------------------------------# # 通过执行 # 启用缓存 # 读取/修改/写入 # 中的 CE 位 #1010注册# #----------------------------------------*/ mfspr r5, 1010 e_ori r5, r5, 0x0000 e_ori r5, r5, 0x0001 /* 将 1010 值存储到 R5 (CE=1) */ 同步 同步 mtspr 1010, r5 /* 将R5写入1010寄存器 */ /*----------------------------------------# # 通过执行 # 启用缓存 # 读取/修改/写入 # 中的 DCWM 位 #1010注册# #----------------------------------------*/ mfspr r5, 1010 e_add2is r5,0x0010 /* 将 1010 值存储到 R5 (DCWM=1) */ 同步 同步 mtspr 1010, r5 /* 将R5写入1010寄存器 */ e_li r3, 0x80 / 加载 r3 循环计数 = 4KB/32B = 128 = 0x80 */ mtCTR r3 /* 将循环计数移动到 spr CTR */ e_li r3, 0x4004 /* 将 r3 指向所需地址的开始 (r3=0x40040000)*/ 锁环: dcbz r0, r3 /* 在缓存中为 0 的 32B 缓存行建立地址 */ dcbtls 0, r0, r3 /* 在缓存中锁定该行 */ e_addi r3, r3, 0x20 /* 将地址指针递增 32 B */ e_bdnz 锁环 se_blr the tlb entry is: e_lis r3, 0x1005 /* Select TLB entry #, define R/W replacment control */ mtspr 624, r3 /* Load MAS0 with 0x1006 0000 for TLB entry #6 */ /* 定义描述上下文和配置control:*/ /* VALID=1, IPROT=0, TID=0, TS=0, TSIZE=1 (4KB 大小) */ e_lis r3, 0x8000 /* 用 0x8000 0100 加载 MAS 1 */ e_ori r3, r3, 0x0100 mtspr 625, r3 /* 定义 EPN 和页面属性: */ /* EPN = 0x4004 0000, WIMAGE = 全 0 */ e_lis r3, 0x4004 /* 用 0x4004 0000 加载 MAS2 */ mtspr 626, r3 /* 定义 RPN 和数据访问控制 R/W */ / * RPN = 0x4004 0000, U0:3=0, UX/SX=0, UR/SR/UW/SW=1 */ e_lis r3, 0x4004 /* 用 0x4004 000F 加载 MAS3 */ e_ori r3,r3,0x003F mtspr 627,r3 tlbwe 完成所有这些之后,我没有看到任何区别,尽管在内存地址 0x40040000 上写入时即使删除 tlb 也没有任何变化,我也没有看到任何变化。 我已将内存更改为 0x40040000,只是为了检查数据是否写入 ram 而不是 dcache(我使用 trace32 作为调试器)dcache 只显示 dcache 代码中定义的 0。 |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
1905个成员聚集在这个小组
加入小组我的项目我做主,使用GN+Ninja来完成构建系统(VSCode开发RT106X)
36355 浏览 0 评论
NXP IMX8应用处理器快速入门必备:技巧、使用、设计指南
4392 浏览 0 评论
6044 浏览 1 评论
6760 浏览 0 评论
NXP i.MX6UL开发板(linux系统烧录+规格+硬件+模块移植)使用手册
4209 浏览 0 评论
618浏览 2评论
求助,S32G上Core M启动后如何让Core A在Flash指定位置加载uboot?
613浏览 2评论
ESP32-WROVER-IE + LAN8720以太网,GPIO0电压只有1.6v,无法正常进入spi flash boot模式如何解决?
603浏览 2评论
求分享适用于PN7160 Android的NFC工厂测试应用程序
693浏览 2评论
792浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-19 16:43 , Processed in 1.038167 second(s), Total 76, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号