?? edac.asm
字號:
OPT c
OPT cre
*****************************************************************************
**
** FILE NAME: Edac.asm
**
** PURPOSE: Motorola Data Aquisition routine
**
** EXPORTED
** ROUTINES: none
**
** IMPORTED
** ROUTINES: none
**
** DESIGNER(S): Danial J. Neebel
**
** University of Wisconsin-Madison
** Department of Electrical and Computer Engineering
** 1415 Johnson Drive
** Madison, WI 53706-1691
**
** Copyright 1991.
**
******************************************************************************
**
** CHANGE LOG:
** DATE: PROGRAMMER: Danial J. Neebel
** ROUTINES CHANGED:
** NATURE OF CHANGE:
**
** END CHANGE LOG:
*****************************************************************************
** Equates - Registers will be addressed with Ind,X mode
*
REGBAS EQU $1000 Starting address for register block
PORTA EQU $00 Output port A
PORTB EQU $04 Output port B
PORTC EQU $03 Output port C
PORTD EQU $08 Output port D
PORTE EQU $0A Output port E
OC1M EQU $0C OC1M7,OC1M6,OC1M5,OC1M4;OC1M3,-,-,-
OC1D EQU $0D OC1D7,OC1D6,OC1D5,OC1D4;OC1D3,-,-,-
TCNT EQU $0E Free running counter (16-bit)
TIC1 EQU $10 IC1 register (16-bit)
TOC1 EQU $16 OC1 register (16-bit)
TOC2 EQU $18 OC2 register (16-bit)
TOC3 EQU $1A OC3 register (16-bit)
TCTL1 EQU $20 OM2,OL2,OM3,OL3;OM4,OL4,OM5,OL5
TCTL2 EQU $21 -,-,EDG1B,EDG1A;EDG2B,EDG2A,EDG3B,EDG3A
TMSK1 EQU $22 OC1I,OC2I,OC3I,OC4I;OC5I,IC1I,IC2I,IC3I
TFLG1 EQU $23 OC1F,OC2F,OC3F,OC4F;OC5F,IC1F,IC2F,IC3F
OC2F EQU %10111111
TMSK2 EQU $24 TOI,RTII,PAOVI,PAII;-,-,PR1,PR0
TFLG2 EQU $25 TOF,RTIF,PAOVF,PAIF;-,-,-,-
BAUD EQU $2B sci baud reg
SCCR1 EQU $2C sci control1 reg
SCCR2 EQU $2D sci control2 reg
SCSR EQU $2E sci status reg
SCDAT EQU $2F sci data reg
ADCTL EQU $30 CCF,-,SCAN,MULT;CD,CC,CB,CA
ADR1 EQU $31 AD RESULT REGISTER 1
ADR2 EQU $32 AD RESULT REGISTER 2
ADR3 EQU $33 AD RESULT REGISTER 3
ADR4 EQU $34 AD RESULT REGISTER 4
OPTION EQU $39 ADPU,CSEL,IRQE,DLY;CME,-,CR1,CR0
HPRIO EQU $3C hprio reg
CONFIG EQU $3F config register
* ACIA Equates
ACIA EQU $9800 6850 location
* Pseudo vector locations for EVB
PVIC1 EQU $00E8 EVB Pseudo Vector for IC1
PVTOF EQU $00D0 EVB Pseudo Vector for TOF
PVOC2 EQU $00DC EVB Pseudo Vector for OC2
PVOC1 EQU $00DF EVB Pseudo Vector for OC1
*** RAM Variable Assignments
ORG $00 Variables and flags located in internal RAM
FLAGS RMB 1 flags to indicate errors.
RCVERR EQU %00000001 error on receive data.
TXMERR EQU %00000010 error on transmit data.
RCVDAT EQU %00001000 data received from host.
ADDONE EQU %00100000 A/D done flag.
ACIASCI EQU %01000000 Comm device,0=SCI, 1=ACIA
DELAY RMB 2 sample delay
CHANMSK RMB 1 number of channels
CHAN4 RMB 1 channel 4
CHAN5 RMB 1 channel 5
CHAN6 RMB 1 channel 6
CHAN7 RMB 1 channel 7
SCRTCH1 RMB 2 temporary storage for scratch pad
SCRTCH2 RMB 2
SCRTCH3 RMB 2
SHFTREG RMB 2
TMP1 RMB 2
ENDRAM EQU *
PAGE
ORG $B600 Prog starts after buffer in
* EVB RAM (EPROM) at $DC00 (E000)
*****************************************************************************
**
** TITLE: Data Aquisition and Control Routine
**
** DATE: 3/9/91
**
** PURPOSE: To allow HOST to perform analog signal aquisition and digital
** input and output.
**
** METHOD: Communicates with via serial port to
**
** CALLING
** CONVENTION: EVB command "G 6000"
**
** INPUT: RS232 via TERMINAL port from host, analog input via PE5,6,7,8.
**
** OUTPUT: RS232 via TERMINAL port to host.
**
** DESIGNER(S): Danial J. Neebel
**
** PROGRAMMER: Danial J. Neebel
**
** NOTES:
**
*****************************************************************************
EDAC
RESET LDS #$0047 Top of User's stack area on EVB
* setup options
LDX #REGBAS
LDAA #$93
STAA OPTION,X
CLR FLAGS Set all flags to defaults
* check for ACIA if no ACIA use SCI
* if single chip mode SCI is used if not then ACIA is assumed at 9800.
LDAA HPRIO,X
ANDA #$20
BEQ INIT1 jump if single chip mode
* initialize ACIA
BSET FLAGS ACIASCI
LDX #ACIA
LDAA #$03 reset
STAA 0,X
LDAA #$16 setup
STAA 0,X
BRA INIT2
* initialize SCI PORT
INIT1
* BCLR FLAGS ACIASCI
LDAA #$30
STAA BAUD,X baud register
LDAA #$00
STAA SCCR1,X
LDAA #$0C
STAA SCCR2,X enable
* set pseudo interrupt vector
INIT2 LDAA #$7E Jump (extended) Opcode
STAA PVOC2 OC2 Pseudo Vector see manual text
LDX #DACISR Address of OC2 service routine
STX PVOC2+1
* Get setup information from host
LDD #0 clear delay and number of channels
STD DELAY
LDAA #01
STAA CHANMSK
INIT3 LDAA #'R' send signon character to host
JSR DATOUT
SETUP JSR DATIN
BRCLR FLAGS RCVDAT SETUP wait for a character
CMPA #'R' check for reset command
BNE NORESET
JMP RESET
NORESET JSR DATOUT echo to host for host's error checking
CMPA #'D' Check for delay
BNE SETUP1
JSR GETDELAY
BRA SETUP
SETUP1 CMPA #'C' Check for number of channels
BNE SETUP3
JSR GETCHAN
BRA SETUP
SETUP3 CMPA #'G' Check for Start
BNE SETUP
* set up timer interrupt
* this has no effect unless performed right after reset
* LDAA #%00000011 Set prescalar to get 8us time
* STAA TMSK2,X
* set up A/D converter
LDX #REGBAS Point to register block
LDAA #%00110100
STAA ADCTL,X
LDD DELAY check for 0 delay
CMPD #0
BEQ MAIN if zero delay then do not start timer int.
LDAA #%01000000 OM2:OL2 = 0:1
STAA TCTL1,X Setup OC2 for toggle on each compare
STAA TFLG1,X Clear any pending OC2F
STAA TMSK1,X Enable OC2 interrupts
LDD DELAY Get delay time
ADDD TOC2,X Add to last compare value
STD TOC2,X Update OC2 (schedule next edge)
CLI Enable Interrupts
PAGE
*****************************************************************************
**
** TITLE: Main Loop
**
** DATE: 3/16/91
**
** PURPOSE: Check for commands from host.
**
** METHOD: Checks for commands from host and for a buffer full signal.
** signals the host that the buffer is full if Block Transfer Only flag set.
**
** CALLING
** CONVENTION: Inline code from initialization
**
** INPUT: RS232 via TERMINAL port from host.
**
** OUTPUT: RS232 via TERMINAL port to host.
**
** DESIGNER(S): Danial J. Neebel
**
** PROGRAMMER: Danial J. Neebel
**
** NOTES:
**
*****************************************************************************
CLR ENDRAM
MAIN JSR CHKCOM Look for a command from the host
MAIN4 SEI
BRCLR FLAGS ADDONE MAIN5 check if A/D done
BCLR FLAGS ADDONE clear A/D done flag
JSR CHNOUT A/D done so output channels to host
* and buffer.
MAIN5 CLI
LDAA ENDRAM
BEQ MAIN
ERRORR LDAA #'E'
JSR DATOUT
JMP ERRORR
** END OF DAC
PAGE
*****************************************************************************
**
** TITLE: Interrupt Service
**
** DATE: 3/9/91
**
** PURPOSE: DATOUTs the the number of channels asked for from the host.
**
** METHOD: Communicates with via serial port to host
**
** CALLING
** CONVENTION: DACISR
**
** INPUT: RS232 via TERMINAL port from host, analog input via PE5,6,7,8.
**
** OUTPUT: RS232 via TERMINAL port to host.
**
** DESIGNER(S): Danial J. Neebel
**
** PROGRAMMER: Danial J. Neebel
**
** NOTES:
**
*****************************************************************************
CCF EQU %10000000 Conversion Complete Flag
SCAN EQU %00100000 Enable scan mode
MULT EQU %00010000 Enable multi-channel mode
CH03 EQU %00000000 select channels 0-3
CH47 EQU %00000100 select channels 4-7
DACISR PSHA
PSHB
PSHX
PSHY
* start conversion for channels 4-7
LDX #REGBAS Point to register block
LDAA #MULT|CH47
STAA ADCTL,X
LDY #CHAN4
* get ready for next interrupt
LDD DELAY Get delay time
ADDD TOC2,X Add to last compare value
STD TOC2,X
* wait for channels 4-7 to complete
DACISR2 LDAA ADCTL,X
BITA #CCF
BEQ DACISR2
* read channels 4-7
LDAA ADR1,X get all Analog inputs
STAA 0,Y store values in channel data locations
LDAA ADR2,X
STAA 1,Y
LDAA ADR3,X
STAA 2,Y
LDAA ADR4,X
STAA 3,Y
BSET FLAGS ADDONE tell main loop A/D is done
BCLR TFLG1,X OC2F Enable interrupt
PULY
PULX
PULB
PULA
RTI ** Return from DACISR service **
***** END of DACISR
PAGE
*****************************************************************************
**
** TITLE: Check for command from host
**
** DATE: 3/15/91
**
** PURPOSE: To check for a command from the host and process any command
**
** METHOD: Checks for a byte received. If a byte is received check for
** a valid command. IF command is invalid then return the value received.
** if command is valid then return 0
**
** CALLING
** CONVENTION: CHKCOM
**
** INPUT: Byte in Acc or RS232 via TERMINAL port from host.
**
** OUTPUT: Various flags and things
**
** DESIGNER(S): Danial J. Neebel
**
** PROGRAMMER: Danial J. Neebel
**
** NOTES:
**
*****************************************************************************
CHKCOM JSR DATIN Put routines to look for digital I/O here.
BRCLR FLAGS RCVDAT CHKCOME if character NOT received then exit
CMPA #'R' if 'R' received from host then RESET
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -