Computer Hardware User's Guide

DMA Controller
12-76
Example 12–9. DMA Transfer With Serial-Port Receive Interrupt
* TITLE DMA TRANSFER WITH SERIAL PORT RECEIVE INTERRUPT
*
.GLOBAL START
.DATA
DMA .WORD 808000H ; DMA GLOBAL-CONTROL REG ADDRESS
CONTROL .WORD 0D43H ; DMA GLOBAL-CONTROL REG INITIALIZATION
SOURCE .WORD 80804CH ; DATA SOURCE-ADDRESS: SERIAL PORT INPUT REG
DESTIN .WORD _ARRAY ; DATA DESTINATION ADDRESS
COUNT .WORD 128 ; NUMBER OF WORDS TO TRANSFER
IEVAL .WORD 00200400H ; IE REGISTER VALUE
RESET1 .WORD 0D40H ; DMA RESET
.BSS _ARRAY,128 ; DATA ARRAY LOCATED IN .BSS SECTION
; THE UNDERSCORE USED IS JUST TO MAKE IT
; ACCESSIBLE FROM C (OPTIONAL)
SPORT .WORD 808040H ; SERIAL-PORT GLOBAL-CONTROL REG ADDRESS
SGCCTRL .WORD 0A300080H ; SERIAL-PORT GLOBAL-CONTROL REG INITIALIZATION
SRCTRL .WORD 111H ; SERIAL-PORT RX PORT CONTROL REG INITIALIZATION
STCTRL .WORD 3C0H ; SERIAL-PORT TIMER-CONTROL REG INITIALIZATION
STPERIOD .WORD 00020000H ; SERIAL-PORT TIMER PERIOD
SPRESET .WORD 01300080H ; SERIAL-PORT RESET
RESET .WORD 0H ; SERIAL-PORT TIMER RESET
.TEXT
START LDP DMA ; LOAD DATA PAGE POINTER
* DMA INITIALIZATION
LDI @DMA,AR0 ; POINT TO DMA GLOBAL CONTROL REGISTER
LDI @SPORT,AR1
LDI @RESET,R0
STI R0,*+AR1(4) ; RESET SPORT TIMER
LDI @RESET1,R0
STI R0,*AR0 ; RESET DMA
LDI @SPRESET,R0
STI R0,*AR1 ; RESET SPORT
LDI @SOURCE,R0 ; INITIALIZE DMA SOURCE-ADDRESS REGISTER
STI R0,*+AR0(4)
LDI @DESTIN,R0 ; INITIALIZE DMA DESTINATION-ADDRESS REGISTER
STI R0,*+AR0(6)
LDI @COUNT,R0 ; INITIALIZE DMA TRANSFER COUNTER REGISTER
STI R0,*+AR0(8)
OR @IEVAL,IE ; ENABLE INTERRUPTS
OR 2000H,ST ; ENABLE CPU INTERRUPTS GLOBALLY
LDI @CONTROL,R0 ; INITIALIZE DMA GLOBAL CONTROL REGISTER
STI R0,*AR0 ; START DMA TRANSFER
* SERIAL PORT INITIALIZATION
LDI @SRCTRL,R0 ; SERIAL-PORT RECEIVE CONTROL REG INITIALIZATION
STI R0,*+AR1(3)
LDI @STPERIOD,R0 ; SERIAL-PORT TIMER-PERIOD INITIALIZATION
STI R0,*+AR1(6)
LDI @STCTRL,R0 ; SERIAL-PORT TIMER CONTROL REG INITIALIZATION
STI R0,*+AR1(4)
LDI @SGCCTRL,R0 ; SERIAL-PORT GLOBAL CONTROL REG INITIALIZATION
STI R0,*AR1
BU $
.END