home *** CD-ROM | disk | FTP | other *** search
/ Vectronix 2 / VECTRONIX2.iso / FILES_10 / DEVELOP.LZH / DSP / DSPDEBUG / EXAMPLES / SSISAMP.ASM < prev    next >
Assembly Source File  |  1992-08-22  |  4KB  |  117 lines

  1. M_BCR   EQU     $FFFE           ; Port A Bus Control Register
  2. M_HTX   EQU     $FFEB           ; Host Transmit Data Register
  3. M_HSR    EQU    $ffe9        ; Host status register
  4. M_RX    EQU     $FFEF           ; Serial Receive Data Register
  5. M_TX    EQU     $FFEF           ; Serial Transmit Data Register
  6. M_TSR    equ    $ffee        ; don't care skip register
  7. M_CRA   EQU     $FFEC           ; SSI Control Register A
  8. M_CRB   EQU     $FFED           ; SSI Control Register B
  9. M_SR    EQU     $FFEE           ; SSI Status Register
  10. M_RDF   EQU     7               ; Receive Data Register Full
  11. M_TDE    equ    6        ; Transmit data empty
  12. M_TFS    equ    2        ; Transmit sync flag
  13. M_RFS    equ    3        ; Receive sync flag
  14. M_IPR   EQU     $FFFF           ; Interrupt Priority Register
  15. M_PCC   EQU     $FFE1           ; Port C Control Register
  16. M_PCDDR EQU     $FFE3           ; Port C Data Direction Register
  17.  
  18. ;    org    X:0 
  19. ;        dc    1    ; left channel data
  20. ;        dc    1    ; right channel data
  21.  
  22.  
  23. ;    org    Y:0
  24. ;        dc    1    ; left channel data
  25. ;        dc    1    ; right channel data
  26.  
  27.  
  28.     org    P:$0
  29.     jmp    start
  30.  
  31.     org    p:$000c        ;Receive interrupt
  32.     movep    X:M_RX,X:(r0)+
  33.  
  34.     org    p:$0010        ;Transmit interrupt
  35.     movep    Y:(r1)+,X:M_TX
  36.     
  37.     org    p:$40
  38.  
  39. start
  40.     move    #0,r3
  41.     clr    a
  42.     do    #2,clearloop
  43.     move    a,Y:(r3)+
  44. clearloop
  45.     movep    #0,X:M_BCR        ; 0 wait states
  46.     movep    #$3000,X:M_IPR        ; set interrupt priority 3 for ssi    
  47.     move    #0,r0        ;The receive interrupt uses r0
  48.     move    #0,r1        ;The transmit interrupt uses r1
  49.     move    #1,m0        ;The receive interrupt wraps at 2 entries
  50.     move    #1,m1        ;The transmit interrupt wraps at 2 entries
  51.     jsr    setupssi
  52.     andi    #$fc,MR            ; unmask interrupts
  53.  
  54. ; Now that the interrupts are setup the only work needed is to move the 
  55. ; receive data from its buffer to the transmit data buffer.  This is done
  56. ; here in a full blast loop that pays no attention to what is needed.
  57.  
  58. deadloop
  59.     move    #0,r3
  60.     nop
  61.     move    X:(r3),x1
  62.     move    x1,Y:(r3)+        ; Move over left data
  63.     
  64.     move    X:(r3),x1
  65.     move    x1,Y:(r3)        ; Move over right data
  66.     jmp    deadloop
  67.     
  68.     
  69. ;
  70. ;
  71. ;    Initialize SSI Port
  72.  
  73. ; CRA bits------------------------------------------------
  74. ; 15 = PS        = 0      : 0=/1, 1=/8, prescalar
  75. ; 14-13 = WL1-0  = 10     : 00=8, 01=12, 10=16, 11=24 bits (set to 24-bits now)
  76. ; 12-8 = DC4-DC0 = 0 0001 : divider control (normally word transfer rate)
  77. ; 7-0 = PM7-0    = $00    : divide by 1-256, 0=fastest (divide by 1)
  78.  
  79. CRA_BITS    EQU    $4100
  80.  
  81. ; SSI CRB bits --------------------------------------------------
  82. ; CRB determines the serial modes
  83. ; 15 = RIE    = 1 : 0=disable, 1=enable receive interrupt
  84. ; 14 = TIE    = 1 : 0=disable, 1=enable transmit interrupt
  85. ; 13 = RE    = 1 : 0=disable, 1=enable receive
  86. ; 12 = TE    = 1 : 0=disable, 1=enable transmit
  87.  
  88. ; 11 = MODE    = 1 : 0=normal, 1=network
  89. ; 10 = GCK    = 0 : 0=continuous, 1=gated
  90. ;  9 = SYN    = 0 : 0=asynchronous, 1=synchronous, transmit and receive
  91. ;  8 = FSL0    = 0 : 0=word, 1=bit length, Frame Sync clock
  92.  
  93. ;  7 = FSL1    = 0 : 0=TX and RX same length, 1=different
  94. ;  6 = SHFD    = 0 : 0=MSB first, 1=LSB first
  95. ;  5 = SCKD    = 0 : 0=external, 1=internal bit clock
  96. ;  4 = SCD2    = 0 : 0=input, 1=output on SC2, transmit frame sync
  97.  
  98. ;  3 = SCD1    = 0 : 0=input, 1=output on SC1, receive frame sync
  99. ;  2 = SCD0    = 0 : 0=input, 1=output on SC0, receive clock
  100. ;  1 = OF1    = 0 :
  101. ;  0 = OF0    = 0 : OF0 not to SC0 ; must match SCKD
  102.  
  103. CRB_BITS    EQU    $F800
  104.  
  105. ;***************************************************************************
  106. setupssi
  107.     movep    #$01F8,X:M_PCC        ;set port c to SSI + SCI
  108.     movep    #CRA_BITS,X:M_CRA    ;see above chart
  109.     movep    #CRB_BITS,X:M_CRB    ;see above chart
  110.  
  111.     btst    #4,X:M_SR        ;read SSI SR to clear TUE bit
  112.  
  113. ; this starts the whole process by causing the first transmit interrupt
  114.     movep    X:(r1)+,X:M_TX        ; send out first sample
  115.  
  116.     rts
  117.