【ARM】Tiny4412裸板编程之异常(中断向量表)
生活随笔
收集整理的這篇文章主要介紹了
【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:nop04. 設置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 SCTLRcp15.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, lr05. 主函數實現
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裸板编程之异常
- 下一篇: 【ARM】Tiny4412裸板编程之异常