⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 edac.asm

📁 华中理工大学 林家瑞 教授的《生物医学数字信号处理》书附带的软盘
💻 ASM
📖 第 1 页 / 共 2 页
字号:
        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 + -