00. 目录

文章目录

  • 00. 目录
  • 01. 开发环境
  • 02. 异常向量表
  • 03. 异常向量表实现
  • 04. 设置Vectors bit
  • 05. 主函数实现
  • 06. 附录

01. 开发环境

  • 开发板:Tiny4412SDK标准版 「Tiny4412 SDK 1506」
  • 工具:「arm-linux-gcc-4.5.1」 「minicom」 「dnw」
  • 平台:Ubuntu 20.04

02. 异常向量表

B1.8.1 Exception vectors and the exception base address

03. 异常向量表实现

vector.s文件内容如下

    .section .text.align 2.global vector_start
vector_start:b reset     @0x0b undef     @0x4b swi       @0x8b pabort    @0xCb dabort    @0x10nop         @0x14b irq       @0x18b firq      @0x1Creset:b resetundef:b undefswi:b swipabort:b pabortdabort:b dabortirq:b irqfirq:b firq.align 2.global vector_end
vector_end:nop

04. 设置Vectors bit

B6.1.86 SCTLR, System Control Register, PMSA

访问系统寄存器的方法

MRC p15, 0, <Rt>, c1, c0, 0 ; Read SCTLR into Rt
MCR p15, 0, <Rt>, c1, c0, 0 ; Write Rt to SCTLR

cp15.S增加如下函数

    .section .text.align 2.global set_vector_bit
set_vector_bit:mrc p15, 0, r0, c1, c0, 0orr r0, r0, #(1 << 13)mcr p15, 0, r0, c1, c0, 0mov pc, lr

05. 主函数实现

test.c内容如下

#include <string.h>
#include <stdlib.h>
#include <adc.h>
#include <gpio.h>void (*udelay)(unsigned int) = (void*)0x43e26480;
int (*print)(const char *format, ...) = (void*)0x43e11a2c;extern unsigned int __bss_start;
extern unsigned int __bss_end;extern void vector_start();
extern void vector_end();//TTB的基地址
U32 *ttb = (void*)0x60000000;
U32 *ttb_c = (void*)0x61000000;int main(void)
{int i = 0;//0x40000000 ~ 0x80000000  1Gmemset((void*)&__bss_start, 0, (int)&__bss_end -(int)&__bss_start);print("main start\n");memset((void*)ttb, 0, 4096 * 4);ttb_l1_init(ttb);ttb_l1_mmap(ttb, 0xffff0000, 0x7fff0000);set_vector_bit();//设置TTB基地址set_ttb(ttb);//设置域访问的权限set_domain(0xffffffff);//使能MMUenable_mmu();//将中断向量表拷贝到0xffff0000地址处memcpy((void*)0xffff0000, (void*)vector_start, vector_end - vector_start);print("main end\n");return 0;
}

06. 附录

6.1 Exynos 4412 SCP_Users Manual_Ver.0.10.00_Preliminary0.pdf

6.2 ARM® Architecture Reference Manual ARMv7-A and ARMv7-R edition

【ARM】Tiny4412裸板编程之异常(中断向量表)相关推荐

  1. 【ARM】Tiny4412裸板编程之异常

    00. 目录 文章目录 00. 目录 01. 开发环境 02. 概述 03. ARM处理器模式 04. 异常类型 05. 异常处理 5.1 异常处理伪代码 5.2 复位异常 5.3 未定义指令异常 5 ...

  2. 【ARM】Tiny4412裸板编程之异常(软中断)

    00. 目录 文章目录 00. 目录 01. 开发环境 02. 中断向量表 03. 中断向量表实现 04. 设置Vectors bit 05. 程序示例一 06. 程序示例二 07. 附录 01. 开 ...

  3. 【ARM】Tiny4412裸板编程之协处理器

    00. 目录 文章目录 00. 目录 01. 开发环境 02. 协处理器简介 03. 获取Main ID 04. 获取CCSIDR 05. 获取SCTLR 06. ID_MMFR3 07. 附录 01 ...

  4. 【ARM】Tiny4412裸板编程之静态库(libc.a)

    00. 目录 文章目录 00. 目录 01. 开发环境 02. 概述 03. 库的来源 04. 程序示例一 05. 程序示例二 06. 附录 01. 开发环境 开发板:Tiny4412SDK标准版 「 ...

  5. 【ARM】Tiny4412裸板编程之按键(C语言)

    00. 目录 文章目录 00. 目录 01. 开发环境 02. 控制原理 03. 配置寄存器 04. 程序示例一 05. 程序示例二 06. 附录 01. 开发环境 开发板:Tiny4412SDK标准 ...

  6. 【ARM】Tiny4412裸板编程之按键

    00. 目录 文章目录 00. 目录 01. 开发环境 02. 控制原理 03. 配置寄存器 04. 程序示例一 05. 程序示例二 06. 附录 01. 开发环境 开发板:Tiny4412SDK标准 ...

  7. 【ARM】Tiny4412裸板编程之蜂鸣器(C语言)

    00. 目录 文章目录 00. 目录 01. 控制原理 02. 配置寄存器 03. 程序示例一 04. 程序示例二 05. 程序示例三 06. 附录 01. 控制原理 咱们的蜂鸣器在底板上,所以需要看 ...

  8. 【ARM】Tiny4412裸板编程之蜂鸣器

    00. 目录 文章目录 00. 目录 01. 控制原理 02. 配置寄存器 03. 程序示例一 04. 程序示例二 05. 程序示例三 06. 附录 01. 控制原理 咱们的蜂鸣器在底板上,所以需要看 ...

  9. 配置eclipse为ARM嵌入式开发板编程

    配置eclipse为ARM嵌入式开发板编程 1-计算机环境 操作系统:window10 编程软件:Eclipse IDE for C and C++ Developers - 2022-09 Wind ...

最新文章

  1. 解决在Tomcat上手动部署WAR服务器不能自动解压的方法
  2. LeetCode:115. Distinct Subsequences
  3. 路由器 jffs分区 简介
  4. 数据结构-简单选择排序(C语言)
  5. NetworkComms V3 之支持TCP连接和UDP连接
  6. lisp 设计盘形齿轮铣刀_机械设计基础——周转轮系传动比的计算
  7. LeCun自曝使用C语言23年之久,2年前才用Python,还曾短暂尝试Lua
  8. 详解云安全攻防模型,这些攻击战略和战术越早知道越好!
  9. 2008年8月30日人力资源系统启动会
  10. [技术讨论]关于前几天公布的京东bug上的问题分析
  11. 产品经理的年终总结可以这样写
  12. 计算机采用的编码机制是什么,编码机制
  13. nas网络存储服务器性能要求,NAS系统的优缺点全面介绍
  14. 【程序设计】Web网页脚本引入
  15. 旅游流的概念_旅游流
  16. Kerberos协议详解
  17. 测试实战-京东网站 + 禅道(七)
  18. 超级电容的容值计算(转)
  19. Neo4j 数据导入案例NorthWind load csv
  20. AutoCAD辅助工具有哪些?如何使用?

热门文章

  1. Eclipse中JRE System Library、Web App Libraries的作用
  2. AS 3.0小事件处理 八
  3. @async注解_史上最全的java spring注解
  4. Java黑皮书课后题第3章:**3.4(随机月份)编写一个随机产生1和12之间整数的程序,并根据数组1,2,3...显示对应的月份
  5. 清原高中2021高考成绩查询,2021年抚顺高考状元是谁分数多少分,历年抚顺高考状元名单...
  6. C#委托的定义 以及使用方式详解,更简单的理解委托。
  7. Python 批量处理特定格式文件
  8. Java编程基础篇第四章
  9. javase学习第10天(形式参数和返回值类型、包、内部类、匿名内部类)
  10. [转]正确配置Linux系统ulimit值的方法