00. 目录

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
【ARM】Tiny4412裸板编程之异常(中断向量表)_异常向量表

03. 异常向量表实现

vector.s文件内容如下

    .section .text
    .align 2
    .global vector_start
vector_start:
    b reset     @0x0
    b undef     @0x4
    b swi       @0x8
    b pabort    @0xC
    b dabort    @0x10
    nop         @0x14
    b irq       @0x18
    b firq      @0x1C

reset:
    b reset


undef:
    b undef


swi:
    b swi

pabort:
    b pabort

dabort:
    b dabort

irq:
    b irq

firq:
    b firq

    .align 2
    .global vector_end
vector_end:
    nop

04. 设置Vectors bit

B6.1.86 SCTLR, System Control Register, PMSA

【ARM】Tiny4412裸板编程之异常(中断向量表)_中断_02

访问系统寄存器的方法

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, 0
    orr r0, r0, #(1 << 13)
    mcr p15, 0, r0, c1, c0, 0
    mov 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  1G
    memset((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);

    //使能MMU
    enable_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