【ARM】Tiny4412裸板编程之异常(中断向量表)
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裸板编程之异常(中断向量表)相关推荐
- 【ARM】Tiny4412裸板编程之异常
00. 目录 文章目录 00. 目录 01. 开发环境 02. 概述 03. ARM处理器模式 04. 异常类型 05. 异常处理 5.1 异常处理伪代码 5.2 复位异常 5.3 未定义指令异常 5 ...
- 【ARM】Tiny4412裸板编程之异常(软中断)
00. 目录 文章目录 00. 目录 01. 开发环境 02. 中断向量表 03. 中断向量表实现 04. 设置Vectors bit 05. 程序示例一 06. 程序示例二 07. 附录 01. 开 ...
- 【ARM】Tiny4412裸板编程之协处理器
00. 目录 文章目录 00. 目录 01. 开发环境 02. 协处理器简介 03. 获取Main ID 04. 获取CCSIDR 05. 获取SCTLR 06. ID_MMFR3 07. 附录 01 ...
- 【ARM】Tiny4412裸板编程之静态库(libc.a)
00. 目录 文章目录 00. 目录 01. 开发环境 02. 概述 03. 库的来源 04. 程序示例一 05. 程序示例二 06. 附录 01. 开发环境 开发板:Tiny4412SDK标准版 「 ...
- 【ARM】Tiny4412裸板编程之按键(C语言)
00. 目录 文章目录 00. 目录 01. 开发环境 02. 控制原理 03. 配置寄存器 04. 程序示例一 05. 程序示例二 06. 附录 01. 开发环境 开发板:Tiny4412SDK标准 ...
- 【ARM】Tiny4412裸板编程之按键
00. 目录 文章目录 00. 目录 01. 开发环境 02. 控制原理 03. 配置寄存器 04. 程序示例一 05. 程序示例二 06. 附录 01. 开发环境 开发板:Tiny4412SDK标准 ...
- 【ARM】Tiny4412裸板编程之蜂鸣器(C语言)
00. 目录 文章目录 00. 目录 01. 控制原理 02. 配置寄存器 03. 程序示例一 04. 程序示例二 05. 程序示例三 06. 附录 01. 控制原理 咱们的蜂鸣器在底板上,所以需要看 ...
- 【ARM】Tiny4412裸板编程之蜂鸣器
00. 目录 文章目录 00. 目录 01. 控制原理 02. 配置寄存器 03. 程序示例一 04. 程序示例二 05. 程序示例三 06. 附录 01. 控制原理 咱们的蜂鸣器在底板上,所以需要看 ...
- 配置eclipse为ARM嵌入式开发板编程
配置eclipse为ARM嵌入式开发板编程 1-计算机环境 操作系统:window10 编程软件:Eclipse IDE for C and C++ Developers - 2022-09 Wind ...
最新文章
- 解决在Tomcat上手动部署WAR服务器不能自动解压的方法
- LeetCode:115. Distinct Subsequences
- 路由器 jffs分区 简介
- 数据结构-简单选择排序(C语言)
- NetworkComms V3 之支持TCP连接和UDP连接
- lisp 设计盘形齿轮铣刀_机械设计基础——周转轮系传动比的计算
- LeCun自曝使用C语言23年之久,2年前才用Python,还曾短暂尝试Lua
- 详解云安全攻防模型,这些攻击战略和战术越早知道越好!
- 2008年8月30日人力资源系统启动会
- [技术讨论]关于前几天公布的京东bug上的问题分析
- 产品经理的年终总结可以这样写
- 计算机采用的编码机制是什么,编码机制
- nas网络存储服务器性能要求,NAS系统的优缺点全面介绍
- 【程序设计】Web网页脚本引入
- 旅游流的概念_旅游流
- Kerberos协议详解
- 测试实战-京东网站 + 禅道(七)
- 超级电容的容值计算(转)
- Neo4j 数据导入案例NorthWind load csv
- AutoCAD辅助工具有哪些?如何使用?
热门文章
- Eclipse中JRE System Library、Web App Libraries的作用
- AS 3.0小事件处理 八
- @async注解_史上最全的java spring注解
- Java黑皮书课后题第3章:**3.4(随机月份)编写一个随机产生1和12之间整数的程序,并根据数组1,2,3...显示对应的月份
- 清原高中2021高考成绩查询,2021年抚顺高考状元是谁分数多少分,历年抚顺高考状元名单...
- C#委托的定义 以及使用方式详解,更简单的理解委托。
- Python 批量处理特定格式文件
- Java编程基础篇第四章
- javase学习第10天(形式参数和返回值类型、包、内部类、匿名内部类)
- [转]正确配置Linux系统ulimit值的方法