完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我在 MMU 中为 s32g274a 处理器的 cortex-a53 建立 3 级表时遇到问题。1 级和 2 级表按预期工作,但我的项目需要一个 4KB 的内存块。下面是我为配置 mmu 编写的代码。有人可以看看错误设置的内容,从而导致 3 级表配置不正确吗?
MOV x0, #0x44 /* 内部/外部可缓存 WB */ MSR mair_el3, x0 /* 在当前异常级别使 TLB 无效 */ TLBI alle3 /* RES1 RES1 PS 40 位 ORGN0 外部 WB 无 WA 可缓存 IRGN0 内部 WB 无 WA 可缓存 T0SZ 39 位区域大小 */ LDR x0, =(1 << 31) | (1 << 23) | (2 << 16) | (3 << 10) | (3 <<| 25 MSR tcr_el3, x0 /* 页表设置 */ LDR x1, =ttb // L1表的地址 //0x0000,0000 - 0x3FFF,FFFF LDR x2, =ttb1 // 获取二级表的地址 MOV x0, #0x03 // 指向下一级表的指针的入口模板 ORR x0, x0, x2 // 将模板与二级表Base组合地址 STR x0, [x1] //0x4000,0000 - 0x7FFF,FFFF MOV x0, #0x405 // 条目模板 ORR x0, x0, #0x40000000 // “或”模板与基本物理地址 STR x0, [x1, #8] LDR x1, =ttb1 // L2表的地址 //0x0000,0000 - 0x2000,0000 MOV x0, #0x401 MOV x2, #0x100 1: STR x0, [x1], #8 ADD x0, x0, #0x200000 // 增加物理地址字段 SUB x2, x2, # 1 CBNZ x2, 1b //0x2000,0000 - 0x3400,0000(故障) MOV x0,#0x0 ORR x0,x0,#0x20000000 //“或”模板与基本物理地址 MOV x2,#0xA0 1: STR x0,[x1],#8 ADD x0, x0, #0x200000 // 增加物理地址域 SUB x2, x2, #1 CBNZ x2, 1b //0x3400,0000 - 0x3480,0000(SDRAM) mov x0, #0x401 MOV x6, #0x34000000 ORR x0, x0, x6 // “或”模板与基本物理地址 MOV x2, #2 1: STR x0, [x1], #8 ADD x0, x0, #0x200000 / / 增加物理地址字段 SUB x2, x2, #1 CBNZ x2, 1b LDR x2, =ttb2 // 获取三层表的地址 MOV x0, #0x03 // 指向下一层表指针的入口模板 ORR x0, x0, x2 // 模板与三层表组合 STR x0, [x1] MOV x0, #0x405 // 入口模板 MOV x6, #0x34600000 ORR x0, x0, x6 // “或”模板与基本物理地址 STR x0, [x1, #8] LDR x1, =ttb2 // L3表的地址 //0x3440,0000 - 0x3460,0000 MOV x0, #0x401 MOV x6, #0x34400000 ORR x0, x0, x6 // “或”模板与基本物理地址 MOV x2, #0x200 1: STR x0, [x1], # 8 ADD x0, x0, #0x1000 // 增加物理地址字段 SUB x2, x2, #1 CBNZ x2, 1b DSB SY /* 确保所有转换表写入都已排空到内存中, TLB 失效完成, 并在启用 MMU 之前提交转换寄存器写入 */ DSB ISH ISB LDR x0, =ttb // L1 表的地址 MSR ttbr0_el3, x0 //设置 TTBR MRS x0, S3_1_c15_c2_1 // cpuectlr_el1 ORR x0, x0, #0x40 MSR S3_1_c15_c2_1, x0 MRS x0, sctlr_el3 bic x0, x0, #(1 << 1) /* 清除 A,禁用对齐错误检查 */ /* I 启用指令缓存 C 启用数据和统一缓存 M 启用 EL3 MMU */ LDR x1, =( 1 << 12) | (1 << 2) | 1 ORR x0, x0, x1 /* 设置位 */ MSR sctlr_el3, x0 /* 确保 MMU 使能立即生效 */ ISB |
|
相关推荐
1个回答
|
|
由于代码中的最后一行截断了,我无法准确判断配置是否正确。但是从您提供的代码中,至少可以看出以下几点问题:
1. 您在设置 MAIR_EL3 寄存器时,将缓存策略设置为了可写回(WB)可缓存(C),但并未设置内存属性。缺少内存属性会导致无法正确区分内存是外设设备还是常规 RAM。建议使用如下代码来设置 MAIR_EL3 寄存器: MOV x0, #(0x00 << 24) | (0xff << 16) | (0x04 << 8) | (0xff<< 0) /* Normal memory type */ MSR mair_el3, x0 2. 您在设置 TCR_EL3 寄存器时,设置的区域大小为 39 位。在 cortex-a53 上,地址线只有 48 位,为了避免访问越界,应将区域大小设置为 48 位。建议使用如下代码来设置 TCR_EL3 寄存器: LDR x0, =((64 - 48) << 16) | ((0x00 << 14) | (0x00 << 12) | (0x02 << 10) | (0x01 << 8) | (0x00 << 6) | 0x10) /* 4KB Granule, Inner & Outer Write-Back cacheable, Normal memory type */ MSR tcr_el3, x0 3. 最后一行代码被截断了,无法判断正确性。建议您将完整代码分享,以便更准确地协助您解决问题。 |
|
|
|
只有小组成员才能发言,加入小组>>
1903个成员聚集在这个小组
加入小组我的项目我做主,使用GN+Ninja来完成构建系统(VSCode开发RT106X)
36326 浏览 0 评论
NXP IMX8应用处理器快速入门必备:技巧、使用、设计指南
4391 浏览 0 评论
6038 浏览 1 评论
6757 浏览 0 评论
NXP i.MX6UL开发板(linux系统烧录+规格+硬件+模块移植)使用手册
4206 浏览 0 评论
613浏览 2评论
求助,S32G上Core M启动后如何让Core A在Flash指定位置加载uboot?
610浏览 2评论
ESP32-WROVER-IE + LAN8720以太网,GPIO0电压只有1.6v,无法正常进入spi flash boot模式如何解决?
599浏览 2评论
求分享适用于PN7160 Android的NFC工厂测试应用程序
690浏览 2评论
788浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-14 12:20 , Processed in 0.788633 second(s), Total 48, Slave 42 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号