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_WITH_SCU<br />

; The following example initializes the DMA unit to perform<br />

; DMA-driven serial transfers.<br />

;<br />

; It is assumed that the serial port has been initialized for<br />

; Mode 1 asynchronous transfers. Register mnemonics are assumed<br />

; to be defined elsewhere in EQUate instructions.<br />

DATA<br />

SEGMENT<br />

XMIT_BUFF DB 'This is a serial message.'<br />

RECV_BUFF DB 128 DUP('ReCv') ; JUNK DATA<br />

DATA<br />

CODE<br />

ENDS<br />

SEGMENT<br />

ASSUME CS:CODE<br />

MOV AX, DATA ; DATA SEGMENT POINTER<br />

MOV DS, AX<br />

ASSUME DS:DATA<br />

; First we set up DMA channel 2 (Module B, channel 0) to handle<br />

; transmit requests from serial port 1.<br />

;<br />

; The source of data is the transmit buffer in memory.<br />

; The destination for data is the TBUF register for serial port 1...<br />

MOV<br />

AX, SEG XMIT_BUFF<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 XMIT_BUFF+1<br />

; USE XMIT_BUFF+1 BECAUSE FIRST BYTE IS SENT MANUALLY.<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, D2SRCL<br />

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

MOV DX, D2SRCH<br />

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

OUT DX, AX<br />

; SOURCE POINTER DONE. DESTINATION IS IN PCB.<br />

MOV DX, D2DSTL<br />

MOV AX, S1TBUF ; TRANSMIT BUFFER FOR<br />

OUT DX, AX ; CHANNEL 1 IS DEST<br />

Example 10-2. DMA-Driven Serial Transfers<br />

10-34

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

Saved successfully!

Ooh no, something went wrong!