Example 102. timed dma transfers – Intel 80C188XL User Manual

Page 281

Advertising
background image

DIRECT MEMORY ACCESS UNIT

10-26

Example 10-2. Timed DMA Transfers

$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

; DATA SEGMENT POINTER

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

; GET HIGH 4 BITS

MOV

BX, AX

; SAVE ROTATED VALUE

AND

AX, 0FFF0H

; GET SHIFTED LOW 4 NIBBLES

ADD

AX, OFFSET WAVEFORM_DATA

; NOW LOW BYTES OF POINTER ARE IN AX.

ADC

BX, 0

; ADD IN THE CARRY
; TO THE HIGH NIBBLE

AND

BX, 000FH

; GET JUST THE HIGH NIBBLE

MOV

DX, D0SRCL

OUT

DX, AX

; AX=LOW 4 BYTES

MOV

DX, D0SRCH

MOV

AX, BX

; GET HIGH NIBBLE

OUT

DX, AX

MOV

AX, DA_CNVTR

; I/O ADDRESS OF D/A

MOV

DX, D0DSTL

OUT

DX, AX

MOV

DX, D0DSTH

XOR

AX, AX

; CLEAR HIGH NIBBLE

OUT

DX, AX

; THE POINTER ADDRESSES HAVE BEEN SET UP. NOW WE SET UP THE TRANSFER COUNT.

MOV

AX, 255

; 8-BIT D/A, SO WE SEND 256 BYTES

MOV

DX, D0TC

; TO GET A FULL SCALE

OUT

DX, AX

; PROGRAM IDRQ MUX

MOV

DX, DMAPRI

MOV

AX, 00H

; TIMER2 IS IDRQ SOURCE
; MODULES HAVE EQUAL PRIORITY

OUT

DX, AX

Advertising
This manual is related to the following products: