Intel 80C188EC User Manual page 326

Hide thumbs Also See for 80C188EC:
Table of Contents

Advertisement

$mod186
name
DMA_EXAMPLE_1
; This example sets up the DMA Unit to perform a transfer from memory to
; I/O space every 22 uS. The data is sent to an A/D converter.
; It is assumed that the constants for PCB register addresses are
; defined elsewhere with EQUates.
CODE_SEG
SEGMENT
ASSUME CS:CODE_SEG
START:
MOV
AX, DATA_SEG
MOV
DS, AX
ASSUME DS:DATA_SEG
; First, set up the pointers. The source is in memory.
MOV
AX, SEG WAVEFORM_DATA
ROL
AX, 4
MOV
BX, AX
AND
AX, 0FFF0H
ADD
AX, OFFSET WAVEFORM_DATA
; NOW LOW BYTES OF POINTER ARE IN AX.
ADC
BX, 0
AND
BX, 000FH
MOV
DX, D0SRCL
OUT
DX, AX
MOV
DX, D0SRCH
MOV
AX, BX
OUT
DX, AX
MOV
AX, DA_CNVTR
MOV
DX, D0DSTL
OUT
DX, AX
MOV
DX, D0DSTH
XOR
AX, AX
OUT
DX, AX
; THE POINTER ADDRESSES HAVE BEEN SET UP. NOW WE SET UP THE TRANSFER COUNT.
MOV
AX, 255
MOV
DX, D0TC
OUT
DX, AX
; PROGRAM IDRQ MUX
MOV
DX, DMAPRI
MOV
AX, 00H
OUT
DX, AX
Example 10-3. Timed DMA Transfers
DIRECT MEMORY ACCESS UNIT
; 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
; I/O ADDRESS OF D/A
; CLEAR HIGH NIBBLE
; 8-BIT D/A, SO WE SEND 256 BYTES
; TO GET A FULL SCALE
; TIMER2 IS IDRQ SOURCE
; MODULES HAVE EQUAL PRIORITY
10-37

Advertisement

Table of Contents
loading

This manual is also suitable for:

80c186ec

Table of Contents