03.01.2015 Views

80C186EC/80C188EC Microprocessor User's Manual

80C186EC/80C188EC Microprocessor User's Manual

80C186EC/80C188EC Microprocessor User's Manual

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

DIRECT MEMORY ACCESS UNIT<br />

$MOD186<br />

name<br />

DMA_EXAMPLE_1<br />

; This example shows code necessary to set up two DMA channels.<br />

; One channel performs an unsynchronized transfer from memory to memory.<br />

; The second channel is used by a hard disk controller located in<br />

; I/O space.<br />

; It is assumed that the constants for PCB register addresses are<br />

; defined elsewhere with EQUates.<br />

CODE_SEG<br />

SEGMENT<br />

ASSUME CS:CODE_SEG<br />

START: MOV AX, DATA_SEG ; DATA SEGMENT POINTER<br />

MOV DS, AX<br />

ASSUME DS:DATA_SEG<br />

; First we must initialize DMA channel 0. DMA0 will perform an<br />

; unsynchronized transfer from SOURCE_DATA_1 to DEST_DATA_1.<br />

; The first step is to calculate the proper values for the<br />

; source and destination pointers.<br />

MOV<br />

AX, SEG SOURCE_DATA_1<br />

ROL AX, 4 ; GET HIGH 4 BITS<br />

MOV BX, AX ; SAVE ROTATED VALUE<br />

AND AX, 0FFF0H ; GET SHIFTED LOW 4 NIBBLES<br />

ADD AX, OFFSET SOURCE_DATA_1<br />

; NOW LOW BYTES OF POINTER ARE IN AX<br />

ADC BX, 0 ; ADD IN THE CARRY<br />

; TO THE HIGH NIBBLE<br />

AND BX, 000FH ; GET JUST THE HIGH NIBBLE<br />

MOV DX, D0SRCL<br />

OUT DX, AL ; AX=LOW 4 BYTES<br />

MOV DX, D0SRCH<br />

MOV AX, BX ; GET HIGH NIBBLE<br />

OUT DX, AX<br />

; SOURCE POINTER DONE. REPEAT FOR DESTINATION.<br />

MOV<br />

AX, SEG DEST_DATA_1<br />

ROL AX, 4 ; GET HIGH 4 BITS<br />

MOV BX, AX ; SAVE ROTATED VALUE<br />

AND AX, 0FFF0H ; GET SHIFTED LOW 4 NIBBLES<br />

ADD<br />

AX, OFFSET DEST_DATA_1<br />

; NOW LOW BYTES OF POINTER ARE IN AX<br />

ADC BX, 0 ; ADD IN THE CARRY<br />

; TO THE HIGH NIBBLE<br />

AND BX, 000FH ; GET JUST THE HIGH NIBBLE<br />

MOV DX, D0DSTL<br />

OUT DX, AX ; AX=LOW 4 BYTES<br />

Example 10-1. Initializing the DMA Unit<br />

10-31

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!