📄 dma.asm
字号:
;*****************************************************************************
; Function: timer.asm
; Version : 1.00
; Description: timer
;
; Copyright Texas instruments Inc, 2000
;*****************************************************************************
.mmregs
.data
DMA .word 808000H ;DMA全局控制寄存器地址
RESET .word 0c40H ;DMA全局控制寄存器复位值
;*********************************************************
;START=00挂起 INCSRC=DECSRC=0 原地址读完一次后不变
;INCDST=1,DECDST=0,每写一次后,目的地址增1
;SYNC=00,不同步
;TC=1,当传输计数器到0时终止传输
;TCINT=1,当中断计数器转变为0,一个DMA中断产生
;*********************************************************
CONTROL .word 0c43H ;DMA全局控制寄存器初始化值
;********START=11,DMA传输开始******************
SOURCE .word ZERO ;数据原地址
DESTIN .word _array ;数据目的地址
COUNT .word 128 ;要传输的数据的字数
ZERO .float 5.0 ;数据的初始值为0.0
.bss _array,128 ;数组定义在.bss段中
;*****************************************************************************
.def _start
.text
_start:
;PUSH FP ;保护旧FP
;LDI SP,FP ;设置新FP
;ADDI 2,SP ;分配局部帧
PUSH ST ;保护ST
PUSH R0 ;保护R0的低32位
PUSHF R0 ;保护R0的高32位
PUSH R1 ;保护R1的低32位
PUSHF R1 ;保护R1的高32位
PUSH R2 ;保护R2的低32位
PUSHF R2 ;保护R2的高32位
PUSH R3 ;保护R3的低32位
PUSHF R3 ;保护R3的高32位
PUSH R6 ;保护R6的低32位
PUSHF R6 ;保护R6的高32位
PUSH AR0 ;
PUSH AR1 ;
PUSH AR2 ;
PUSH AR3 ;
PUSH AR4 ;
;以上为保护寄存器
;********************************************************
LDP DMA ;装载数据页指针
LDI @DMA,AR0 ;指向DMA全局控制寄存器
LDI @RESET,R0 ;复位DMA
STI R0,*AR0
LDI @SOURCE,R0 ;初始化DMA源地址寄存器
STI R0,*+AR0(4) ;
LDI @DESTIN,R0 ;初始化DMA目的地址寄存器
STI R0,*+AR0(6)
LDI @COUNT,R0 ;初始化DMA传输计数寄存器
STI R0,*+AR0(8) ;
OR 400H,IE ;开中断
OR 2000h,ST
LDI @CONTROL,R0 ;初始化DMA全局控制寄存器
STI R0,*AR0 ;开始DMA传输
;********************************************************
;结束,恢复堆栈
POP AR4 ;
POP AR3 ;
POP AR2 ;
POP AR1 ;
POP AR0 ;
POPF R6 ;
POP R6 ;
POPF R3 ;
POP R3 ;
POPF R2 ;
POP R2 ;
POPF R1 ;
POP R1 ;
POPF R0 ;
POP R0 ;
POP ST ;
;SUBI 2,SP ;
;POP FP ;
RETI ;中断返回
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -