MMU粗页代码

最近几天稍微打算再把MMU的一些粗页代码写下,这个代码和上一次的段页映射都一样,都是一一映射,其他的映射关系也一样,区别就是这边用了二级映射关系,页面全部换成粗页,1024*4096个large page我也是醉了,不过我打算之后再弄得更细点,而且结构层次这次也分得不好,整个汇编代码冗余度也很高,感觉自己用汇编写个通用的函数还是太累了,不想把时间花在一个实验例程上。

0x0000 0000 ->0x0000 0000
.......
0xf000 0000 -> 0xf000 0000

0xb000 0000 -> GPIO口    0x5600 0000
0xc000 0000 ->led程序入口 0x3200 0000 


.equ    MMU_COARSE_DOMAIN,( (0) <<5 )
.equ    MMU_SPECIAL,      ( (1) <<4 )
.equ    MMU_COARSE_DESC,  0x01

.equ    MMU_COARSE_NORMAL,      ( MMU_COARSE_DOMAIN | MMU_SPECIAL  | MMU_COARSE_DESC )



.equ    COARSE_AP_0,    ( (3) <<4 )
.equ    COARSE_AP_1,    ( (3) <<6 )
.equ    COARSE_AP_2,    ( (3) <<8 )
.equ    COARSE_AP_3,    ( (3) <<10 )

.equ    COARSE_FULL_ACESS,      ( COARSE_AP_0 | COARSE_AP_1 | COARSE_AP_2 | COARSE_AP_3 )

.equ    COARSE_CACHE,   ( (1) << 3)
.equ    COARSE_BUFFER,  ( (1) << 2)
.equ    COARSE_DESC,    (0x01)

.equ    COARSE_NORMAL,  ( COARSE_FULL_ACESS | COARSE_DESC)    
.equ    COARSE_WB,      ( COARSE_NORMAL | COARSE_CACHE | COARSE_BUFFER)


.equ    MMU_BASE_ADDR,          0x30200000
.equ    COARSE_BASE_ADDR,       0x30200000+4096*4

.equ    PA,0X00
.equ    VA,0X00
.equ    ENDPA,0xf0000000

start:
        stmfd   sp!,{r0-r12,lr}

begin:
        mov     r3,#0
        ldr     r5,=ENDPA    
        lsr     r4,r5,#20
        ldr     r11,=MMU_BASE_ADDR
        ldr     r12,=COARSE_BASE_ADDR

       forLoopI:
                cmp     r4,r3
                bcc     NEXT

                mov     r1,#4
                mul     r2,r1,r3
                add     r2,r2,r11

                lsl     r1,r3,#10
                ldr     r9,=MMU_COARSE_NORMAL
                add     r1,r1,r12
                bic     r1,r1,#0x0300
                bic     r1,r1,#0x00f0
                bic     r1,r1,#0x000f
                orr     r10,r1,r9

                str     r10,[r2]

                J_begin:
                        mov     r5,#0
                        mov     r7,#16
                        mov     r8,#0

            forLoopJ:
                        cmp     r7,r5
                        bcc     END_R8

                        mov     r6,#4
                        mul     r9,r6,r5
                        add     r2,r1,r9
                        mov     r6,#64
                        mul     r9,r6,r8
                        add     r2,r2,r9

                        lsl     r6,r3,#20
                        mov     r10,r6
                        lsl     r6,r8,#16
                        add     r10,r10,r6
                        mov     r6,r10

                        ldr     r10,=COARSE_NORMAL
                        orr     r10,r6,r10

                        str     r10,[r2]

                        add     r5,r5,#1
                        b       forLoopJ
                END_R8:
                        cmp     r7,r8
                        bcc     END_I

                        mov     r5,#0
                        add     r8,r8,#1
                        b       forLoopJ
                END_I:
                        add     r3,r3,#1
                        b       forLoopI

NEXT:
        .equ    LED_ADR,0xb0000000
        .equ    LED_P_ADDR,0x56000000
        .equ    LED_BIN,0xc0000000
        .equ    LED_P_BIN,0x32000000

        ldr     r1,=LED_ADR
        ldr     r2,=LED_P_ADDR
        ldr     r3,=LED_BIN
        ldr     r4,=LED_P_BIN

        lsr     r5,r1,#20
        mov     r6,#4
        mul     r7,r6,r5
        add     r6,r7,r11

        ldr     r7,[r6]
        bic     r7,r7,#0x300
        bic     r7,r7,#0x0f0
        bic     r7,r7,#0x00f

        lsl     r5,r1,#22
        lsr     r5,r5,#24
        lsl     r5,r5,#2

        orr     r6,r7,r5

     ldr     r7,=LED_P_ADDR
        bic     r7,r7,#0xf000
        bic     r7,r7,#0x0f00
        bic     r7,r7,#0x00f0
        bic     r7,r7,#0x000f

        ldr     r8,=COARSE_NORMAL
        orr     r9,r7,r8
        str     r9,[r6]

BIN:
        lsr     r5,r3,#20
        mov     r6,#4
        mul     r7,r6,r5
        add     r6,r7,r11

        ldr     r7,[r6]
        bic     r7,r7,#0x300
        bic     r7,r7,#0x0f0
        bic     r7,r7,#0x00f

        lsl     r5,r3,#22
        lsr     r5,r5,#24
        lsl     r5,r5,#2

        orr     r6,r7,r5

        ldr     r7,=LED_P_BIN
        bic     r7,r7,#0xf000
        bic     r7,r7,#0x0f00
        bic     r7,r7,#0x00f0
        bic     r7,r7,#0x000f

      ldr     r8,=COARSE_NORMAL
        orr     r9,r7,r8
        str     r9,[r6]




START_MMU:
mov    r0, #0
mcr    p15, 0, r0, c7, c7, 0 
mcr    p15, 0, r0, c7, c10, 4
mcr    p15, 0, r0, c8, c7, 0
ldr    r4,=MMU_BASE_ADDR
mcr    p15, 0, r4, c2, c0, 0
mvn    r0, #0
mcr    p15, 0, r0, c3, c0, 0
mrc    p15, 0, r0, c1, c0, 0
bic    r0, r0, #0x3000
bic    r0, r0, #0x0300
bic    r0, r0, #0x0087
orr    r0, r0, #0x0002
orr    r0, r0, #0x0004
orr    r0, r0, #0x1000
orr    r0, r0, #0x0001
mcr    p15, 0, r0, c1, c0, 0


return:
        ldmfd   sp!,{r0-r12,pc}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值