Intel 80C188EC User Manual page 323

Hide thumbs Also See for 80C188EC:
Table of Contents

Advertisement

DIRECT MEMORY ACCESS UNIT
$mod186
name
DMA_WITH_SCU
; The following example initializes the DMA unit to perform
; DMA-driven serial transfers.
;
; It is assumed that the serial port has been initialized for
; Mode 1 asynchronous transfers. Register mnemonics are assumed
; to be defined elsewhere in EQUate instructions.
DATA
SEGMENT
XMIT_BUFF DB
'This is a serial message.'
RECV_BUFF DB
128 DUP('ReCv')
DATA
ENDS
CODE
SEGMENT
ASSUME CS:CODE
MOV
MOV
ASSUME DS:DATA
; First we set up DMA channel 2 (Module B, channel 0) to handle
; transmit requests from serial port 1.
;
; The source of data is the transmit buffer in memory.
; The destination for data is the TBUF register for serial port 1...
MOV
AX, SEG XMIT_BUFF
ROL
AX, 4
MOV
BX, AX
AND
AX, 0FFF0H
ADD
AX, OFFSET XMIT_BUFF+1
; USE XMIT_BUFF+1 BECAUSE FIRST BYTE IS SENT MANUALLY.
; NOW LOW BYTES OF POINTER ARE IN AX.
ADC
BX, 0
AND
BX, 000FH
MOV
DX, D2SRCL
OUT
DX, AX
MOV
DX, D2SRCH
MOV
AX, BX
OUT
DX, AX
; SOURCE POINTER DONE. DESTINATION IS IN PCB.
MOV
DX, D2DSTL
MOV
AX, S1TBUF
OUT
DX, AX
10-34
AX, DATA
DS, AX
Example 10-2. DMA-Driven Serial Transfers
; JUNK DATA
; DATA SEGMENT POINTER
; GET HIGH 4 BITS
; SAVE ROTATED VALUE
; GET SHIFTED LOW 4 NIBBLES
; ADD IN THE CARRY
; TO THE HIGH NIBBLE
; GET JUST THE HIGH NIBBLE
; AX=LOW 4 BYTES
; GET HIGH NIBBLE
; TRANSMIT BUFFER FOR
; CHANNEL 1 IS DEST

Advertisement

Table of Contents
loading

This manual is also suitable for:

80c186ec

Table of Contents