• Keine Ergebnisse gefunden

PROGRAMMING EXAMPLES

Im Dokument Technical Manual (Seite 72-81)

I RIW JRIW J RIW J RlWJRIW J RIW J RIW J RIW J RIW JRlWJ RIW JRlWJ RIW J RIW J RIW J RIW J

3.4 PROGRAMMING EXAMPLES

This section contains programming examples. They are not given as the only method of driving the option.

These programs are not guaranteed or supported.

3.4.1 Resetting the DHVll In the following example:

• DIAG is a routine to check the diagnostic codes. It returns with CARRY set if it detects an error code (see Section 3.3.10).

• The loop at 1$ can take up to 2.5 seconds, so the programmer could poll via a timer or poll at interrupt level zero.

A ROUTINE TO RESET THE DHVll AND CHECK THAT IT IS FUNCTIONING CLEAR INTERRUPT ENABLES.

WAIT FOR MASTER. RESET TO

This routine sets the characteristics of channel 1 as follows:

1. Transmit and receive at 300 bits/s

2. Seven data bits with even parity and one stop bit 3. Transmitters and receivers enabled

4. No modem control

5. No automatic flow control.

SET CHARACTERISTICS OF CHANNEL 1 TO THE FOLLOWING

STATE:-1) TRANSMIT AND RECEIVE AT 300 B.P.S.

2) 7 DATA BITS WITH EVEN PARI'fY AND ONE STOP BIT.

3) TRANSMITTERS AND RECEIVERS ENABLED.

4) NO MODEM CONTROL.

5) NO AUTOMATIC FLOW CONTROL.

3-25

SETUP: :

ENABLE THE TRANSMITTER.

RETURN - CHANNEL 1 DONE.

3.4.3.1 Single Character Programmed Transfer - This is a program to send a message on channell.

The message (MESS) is an ASCII string with a null character as terminator.

Polling is used but a TX.ACTION interrupt could also be used.

This program would function on a DHVll with only this channel active. Otherwise it would lose TX.ACTION reports of other channels. However, a program to control all channels would be too big to use as an example.

ISOLATE CHANNEL NUMBER.

IGNORE THE TX.ACT IF ITS

3.4.3.2 DMA

Transfer-THIS PROGRAM SENDS A~SAGE OUT ON EACH LINE OF THE DHVll AND HALTS THE MACHINE WHEN ALL TRANSMISSIONS HAVE COMPLETED.

THE MESSAGES ARE TRANSMITTED USING DMA MODE, AND INTERRUPTS ARE USED TO SIGNAL TRANSMISSION COMPLETION.

DMAINT: :

TRANSMITTER INTERRUPT ROUTINE.

SET UP THE INTERRUPT VECTORS.

INTERRUPT PRIORITY FOUR.

EIGHT LINES TO START. ENABLED (ASSUME UPPER ADDRESS BITS ARE ZERO).

POINT TO NEXT CHANNEL.

REPEAT FOR ALL LINES.

R5 IS USED BY INTERRUPT ROUTINE.

ENABLE TRANSMITTER INTERRUPTS.

WAIT FOR ALL LINES TO FINISH.

DMAMES: .ASCII <15><12><7><7><7>/SYSTEM CLOSING DOWN NOW/

DMASIZ = .-DMAMES .EVEN

3-27

3.4.3.3 Aborting a DMA ASSUMPTION WAS WRONG!) CLEAR DOWN THE ABORT FLAG FOR NEXT TIME.

BUFFER COMPLETELY ABORTED, THE DMA REGISTERS REFLECT WHERE THE DHVll GOT TO.

THIS ROUTINE PROCESSES RECEIVED CHARACTERS UNDER INTERRUPT CONTROL.

IF AN XOFF IS RECEIVED, TH~ TRANSMITTER FOR THAT CHANNEL IS TURNED OFF. IF AN XON IS RECEIVED, THE TRANSMITTER IS TURNED BACK ON. ALL OTHER CHARACTERS ARE IGNORED.

THIS IS JUST AN EXAMPLE, A BETTER WAY TO PERFORM FLOW CONTROL IS TO

ENABLE THIS RECEIVER.

SET POINTER TO NEXT CHANNEL.

ENABLE THE RECEIVER INTERRUPTS.

RETURN - INTERRUPTS DO THE RESET.

RXINT: :

MOV RI2I,-(SP) SAVE CALLERS REGISTERS.

RXNXTC:

MOV @#RBUFF,RI2I GET THE CHARACTER.

BPL RXIEND IF NO DATA VALID, WE'VE FINISHED.

MOV RI2I,-(SP) CHECK FOR ERRORS, MODEM AND BIC #11217777, (SF) + DIAGNOSTICS CODES.

BNE RXNXTC - JUST IGNORE THEM.

BIC U 71212121121, RI2I REMOVE UNNECESSARY BITS.

SWAB RI2I POINT TO THIS CHARACTERS LINE.

BIS UI2lI2l,Rr2I " - (ADD THE INTERRUPT ENABLE BIT.) MOVB RI2I,@fDHVCSR

SWAB Rr2I PUT CHARACTER BACK IN LOWER BYTE.

CMPB f21,RI2I WAS IT AN "XON"?

BNE 1$ NO - GO CHECK FOR AN "XOFF"

BISB f2r21r21,@iTBFAD2+1 ENABLE THE TRANSMITTER.

BR RXNXTC GO CHECK FOR MORE CHARACTERS.

1$:

CMPB f23,Rr2I WAS IT, AN "XOFF"?

BNE RXNXTC NO - GO CHECK FOR MORE CHARACTERS.

BICB f2121121,@iTBFAD2+1 DISABLE THE TRANSMITTER.

BR RXNXTC GO CHECK FOR MORE CHARACTERS.

RXIEND:

MOV (SP)+,Rr2I RESTORE THE DESTROYED REGISTER.

RTI

3.4.5

Auto X-ON and X-OFF

THIS PROGRAM SENDS A MESSAGE OUT ON EACH LINE OF THE DHV11 AND HALTS THE MACHINE WHEN ALL TRANSMISSIONS HAVE COMPLETED.

THE MESSAGES ARE TRANSMITTED USING DMA MODE, AND INTERRUPTS ARE USED TO SIGNAL TRANSM-ISSION COMPLETION.

AUTOMATIC FLOW CONTROL IS ENABLED ON THE OUTGOING DATA.

TXAUTO: :

MOV fATOINT,@iTXVECT SET UP THE INTERRUPT VECTORS.

MOV i2121r21,UTXPSW INTERRUPT PRIORITY FOUR.

MOV f8. , RI2I EIGHT LINES TO START.

CLR Rl START AT LINE ZERO.

1$:

MOVB R1,@#DHVCSR SELECT THE REGISTER BANK.

BIS f24,@#LNCTRL ENABLE AUTOMATIC FLOW CONTROL ON THE TRANSMITTED DATA.

MOV fAUTOSZ,@#TBFCNT SET LENGTH OF MESSAGE.

MOV #AUTOMS,@#TBFAD1 SET LOWER 16 ADDRESS BITS.

MOV #11211212121r21,@#TBFAD2 START DMA WITH TRANSMITTER ENABLED (ASSUME UPPER ADDRESS BITS ARE ZERO).

INC Rl POINT TO NEXT CHANNEL.

SOB RI2I,1$ REPEAT FOR ALL LINES.

CLR R5 R5 IS USED BY INTERRUPT ROUTINE.

MOVB Ur2Ir2I,@#DHVCSR+1 ENABLE TRANSMITTER INTERRUPTS.

3-29

2$:

~ TRANSMITTER INTERRUPT ROUTINE.

~

AUTOMS: .ASCII <15><12><7><7><7>/SYSTEM CLOSING DOWN NOW/

AUTOSZ

=

.-AUTOMS

.EVEN

3.4.6 Checking Diagnostic Codes

THIS ROUTINE CHECKS THE DIAGNOSTICS CODES RETURNED FROM THE DHVII.

DIAGEX:

RESTORE THE CHARACTER/INF~.

3.4.7 Modem Control

(INTERRUPT LEVEL FOUR)

ENABLE THE INTERRUPTS.

LET INTERRUPT ROUTINES DO EVERYTHING

SAVE THE REGISTER WE USE.

GET INTERRUPTING LINE NUMBER.

SELECT THIS CHANNELS REGISTERS.

(RETAIN INTERRUPT ENABLE) DROP DTR, RTS AND CLEAR ABORT.

RESTORE THE REGISTER WE USED.

\

RECEIVER INTERRUPT ROUTINE.

MRXINT: :

GET INTERRUPTING LINE.

EXIT IF ALL DONE •.

SAVE FOR LATER USE.

TEST FOR MODEM INFO.

SKIP IF NOT.

SELECT REGISTERS FOR THIS LINE.

(RETAIN INTERRUPT ENABLE)

CHECK FOR READY FOR TRANSMISSION.

(TRANSMITTER INTERRUPT ROUTINE CLEARS DOWN THE CALL.)

NOSYS: .ASCII <15><12><7><7><7>/SYSTEM UNAVAILABLE, PLEASE TRY LATER/

NOSYSZ .-NOSYS

.EVEN

4.1 SCOPE

This chapter describes:

• •

• •

• •

Operation of the main hardware blocks Data flow

Control of address and data Operation of the microcomputers Use and control of the RAM Internal diagnostics.

CHAPTER 4

Im Dokument Technical Manual (Seite 72-81)