📄 vectors.asm
字号:
;--------------------------------
;中断向量表的汇编程序
;--------------------------------
FLASH_START .equ 0x90000400 ;flash起始地址
CODE_START .equ 0x00000400 ;RAM起始地址
CODE_SIZE .equ 0x00010000 ;应用程序byte大小
EMIF_GCTL .equ 0x01800000 ;EMIF global control
EMIF_CE1 .equ 0x01800004 ;EMIF CE1 control
EMIF_CE0 .equ 0x01800008 ;EMIF CE0 control
EMIF_CE2 .equ 0x01800010 ;EMIF CE2 control
EMIF_CE3 .equ 0x01800014 ;EMIF CE3 control
EMIF_SDRAMCTL .equ 0x01800018 ;EMIF EMIF SDRAM control
EMIF_SDRAMTIM .equ 0x0180001C ;SDRAM timing (refresh)
EMIF_SDRAMEXT .equ 0x01800020 ;SDRAM Extension register
;.ref _boot ;调用启动程序
.sect ".vectors" ;段声明
.global RESET_RST ;复位终端向量
.global _boot ;定义全局函数
RESET_RST:
mvkl .S2 _boot, B0 ;
mvkh .S2 _boot, B0 ;
B .S2 B0 ;
NOP 5
NMI_RST:
NOP 8
RESV1:
NOP 8
RESV2:
NOP 8
INT4:
NOP 8
INT5:
NOP 8
INT6:
NOP 8
INT7:
NOP 8
INT8:
NOP 8
INT9:
NOP 8
INT10:
NOP 8
INT11:
NOP 8
INT12:
NOP 8
INT13:
NOP 8
INT14:
NOP 8
INT15:
NOP 8
;-----------------------------
;自动引导的汇编程序
;-----------------------------
.sect ".boot_load" ;定义数据段
.ref _c_int00 ;声明外部函数
_boot:
;先设置控制寄存器,如EMIF_GCR等
mvkl EMIF_GCTL,A4 ;EMIF_GCTL address ->A4
|| mvkl 0x00003360,B4
mvkh EMIF_GCTL,A4
|| mvkh 0x00003360,B4
stw B4,*A4
mvkl EMIF_CE0,A4 ;EMIF_CE0 address ->A4
|| mvkl 0xFFFFFF93,B4
mvkh EMIF_CE0,A4
|| mvkh 0xFFFFFF93,B4
stw B4,*A4
mvkl EMIF_CE1,A4 ;EMIF_CE1 address ->A4
|| mvkl 0x22f1d113,B4
mvkh EMIF_CE1,A4
|| mvkh 0x22f1d113,B4
stw B4,*A4
mvkl EMIF_CE2,A4 ;EMIF_CE2 address ->A4
|| mvkl 0x42b4ca13,B4
mvkh EMIF_CE2,A4
|| mvkh 0x42b4ca13,B4
stw B4,*A4
mvkl EMIF_CE3,A4 ;EMIF_CE3 address ->A4
|| mvkl 0x42b4ca03,B4
mvkh EMIF_CE3,A4
|| mvkh 0x42b4ca03,B4
stw B4,*A4
mvkl EMIF_SDRAMCTL,A4 ;EMIF_SDRAMCTL address ->A4
|| mvkl 0x57115000,B4
mvkh EMIF_SDRAMCTL,A4
|| mvkh 0x57115000,B4
stw B4,*A4
mvkl EMIF_SDRAMTIM,A4 ;EMIF_SDRAMTIM address ->A4
|| mvkl 0x0000061a,B4
mvkh EMIF_SDRAMTIM,A4
|| mvkh 0x0000061a,B4
stw B4,*A4
mvkl EMIF_SDRAMEXT,A4 ;EMIF_SDRAMEXT address ->A4
|| mvkl 0x00054547,B4
mvkh EMIF_SDRAMEXT,A4
|| mvkh 0x00054547,B4
stw B4,*A4
;写一个数到flash中
;拷贝FLASH中的程序到DSP内部RAM
mvkl FLASH_START,B4
mvkh FLASH_START,B4 ;B4为flash地址指针
mvkl CODE_START ,A4
mvkh CODE_START ,A4 ;A4为RAM地址指针
zero A1 ;A1用作计数器
mvkl CODE_SIZE,B6
mvkh CODE_SIZE,B6 ;B6为需要拷贝字节数
_boot_loop: ;DSP开始读取FLASH中程序
ldw *B4++,A0
nop 5
stw A0,*A4++
nop 5
add 1,A1,A1
cmplt A1,B6,B0
nop
[B0] b _boot_loop
nop 5
mvkl .S2 _c_int00, B0 ;结束退到Main执行
mvkh .S2 _c_int00, B0
B .S2 B0
nop 5
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -