home *** CD-ROM | disk | FTP | other *** search
/ Ham Radio 2000 #1 / Ham Radio 2000.iso / ham2000 / hf / dsp / dspdsk3 / cw1kc.asm next >
Encoding:
Assembly Source File  |  1994-03-15  |  22.4 KB  |  992 lines

  1. ; W9GR 1kHz super CW filter
  2. ; Ported to the TI 320C26 DSK by Johan Forrer KC7WW Jan. 1994
  3. ; Bug fixes reported by Tom, HB9JNX re: SUB 1000, SUBK 1,15 etc.
  4. ; Added LED outputs
  5. ; FS = 12500 HZ, 4X OVERSAMPLING AT INPUT AND OUTPUT
  6. ; FIR SAMPLING FREQUENCY = 3125 HZ
  7. ; CENTER FREQUENCY = 1000 HZ
  8. ; BANDWIDTH = 150 HZ (APPROXIMATELY 200 HZ @ -3 DB)
  9.  
  10. BIOZ_0  .set    1
  11. BIOZ_1  .set    0
  12.  
  13. CONF_1    .set    0
  14. CONF_2  .set    1
  15.  .if CONF_1 
  16.     .ds    0x400        ; beginning of data
  17.  .endif
  18.  .if CONF_2 
  19.     .ds    0x600        ; beginning of data
  20.  .endif
  21. ;                    ; AIC working parameters
  22. ;-----------------------------------------------------------------------------
  23. TA    .set    20             ;
  24. RA    .set    20             ;
  25. TAp    .set    1              ;
  26. RAp    .set    1              ;
  27. TB    .set    20             ;
  28. RB    .set    20             ;
  29. AIC_CMD    .set    028h        ; bit    0     =enable/disable input bandpass
  30.                 ;        1     =enable/disable loopback
  31.                 ;        2     =enable/disable AUX input
  32.                 ;        3     =sync I/O
  33.                 ; bits 5&4: 11 =+/-6V    
  34.                 ;           01h=+/-3V
  35.                 ;           10h=+/-1.5V
  36. ;-----PAGE 12----------------------------------------------------------------
  37. page12:
  38. SIGIN:   .word    0             ; INPUT SAMPLES
  39. SIGIN1:  .word    0
  40. SIGIN2:  .word    0
  41. SIGIN3:  .word    0
  42.  
  43. SIGOUT:  .word    0             ; OUTPUT SAMPLES
  44. SIGOUT1: .word    0
  45. SIGOUT2: .word    0
  46. SIGOUT3: .word    0
  47.  
  48. LPFI1:  .word    0      ; INPUT INTERPOLATOR 1
  49. LPFI11:    .word     0
  50. LPFI12:    .word     0
  51. LPFI13:    .word     0
  52. LPFI14:    .word     0
  53. LPFI15:    .word     0
  54. LPFI16:    .word     0
  55. LPFI17: .word   0
  56. LPFI18: .word    0
  57.  
  58. LPFI2:   .word     0     ; INPUT INTERPOLATOR 2
  59. LPFI21:     .word    0
  60. LPFI22:     .word    0
  61. LPFI23:     .word    0
  62. LPFI24:     .word    0
  63. LPFI25:     .word    0
  64. LPFI26:     .word    0
  65. LPFI27:     .word    0
  66. LPFI28:  .word  0
  67. LPFI29:  .word  0
  68. LPFI210:  .word  0
  69. LPFI211:  .word  0
  70. LPFI212:  .word  0
  71.  
  72. BPF:     .word     0,0,0,0,0,0,0,0,0,0   ; BANDPASS FILTER DELAY
  73. BPF10    .word     0,0,0,0,0,0,0,0,0,0 
  74. BPF20    .word     0,0,0,0,0,0,0,0,0,0 
  75. BPF30    .word     0,0,0,0,0,0,0,0,0,0 
  76. BPF40    .word     0,0,0,0,0,0,0,0,0,0 
  77. BPF50    .word     0,0,0,0,0,0,0,0,0,0 
  78. BPF60    .word     0,0,0,0,0,0,0,0,0,0 
  79. BPF70    .word     0,0,0,0,0,0,0,0,0,0 
  80. BPF80    .word     0
  81. BPF81     .word       0
  82.  
  83. BPFOUT:  .word     0           ; BANDPASS FILTER OUTPUT
  84. LED:     .word     0           ; LED DISPLAY - also use for temporary
  85. SQUARE:  .word     0           ; INPUT SQUARED
  86. TEMP:    .word     0           ; TEMPORARY STORAGE
  87. ONE:   .word       1
  88.  
  89. LPFO1:   .word  0          ; OUTPUT INTERPOLATOR 1
  90. LPFO11:     .word     0         ; 6 taps
  91. LPFO12:     .word    0
  92. LPFO13:     .word    0
  93. LPFO14:     .word    0
  94. LPFO15:     .word    0
  95.  
  96. LPFO2:   .word  0             ; OUTPUT INTERPOLATOR 2
  97. LPFO21:     .word    0        ; 4 taps
  98. LPFO22:     .word    0
  99. LPFO23:     .word    0
  100.  
  101. DITHER:  .word       1           ; DITHER PSEUDORANDOM SEQUENCE
  102.  
  103. ;-----PAGE 13----------------------------------------------------------------
  104.  
  105. ; ELLIPTIC IIR HPF DATA:
  106. ; N=2 PASS 300 HZ REJ 20 HZ 0.5 DB/50 DB
  107. ; FS = 3125 HZ
  108. ; HPF COEFFICIENTS:
  109. HPF:    .word   2853
  110. HPF1:    .word  -5704
  111. HPF2:    .word   2853
  112. HPF3:    .word   5658
  113. HPF4:    .word  -2333
  114.  
  115. INP:   .word   0           ; INPUT DELAY - USED FOR HPF
  116. INP1:    .word    0
  117. INP2:    .word    0
  118.  
  119. DENOM:  .word   0           ; INPUT HPF DENOMINATOR DELAY
  120. DENOM1:    .word    0
  121. ;----------------------------------------------------------------------------
  122. ;              FINITE IMPULSE RESPONSE (FIR)
  123. ;            LINEAR PHASE DIGITAL FILTER DESIGN
  124. ;                REMEZ EXCHANGE ALGORITHM
  125. ;
  126. ;                     BANDPASS FILTER
  127. ;
  128. ;                   FILTER LENGTH =  82
  129. ;
  130. ;              ***** IMPULSE RESPONSE *****
  131. ;         H( 1) =      69.462 = H( 82)
  132. ;         H( 2) =     -57.109 = H( 81)
  133. ;         H( 3) =     -51.212 = H( 80)
  134. ;         H( 4) =     124.731 = H( 79)
  135. ;         H( 5) =     -67.342 = H( 78)
  136. ;         H( 6) =    -112.101 = H( 77)
  137. ;         H( 7) =     168.370 = H( 76)
  138. ;         H( 8) =     -35.166 = H( 75)
  139. ;         H( 9) =    -139.196 = H( 74)
  140. ;         H(10) =     121.212 = H( 73)
  141. ;         H(11) =       5.330 = H( 72)
  142. ;         H(12) =     -45.744 = H( 71)
  143. ;         H(13) =     -21.071 = H( 70)
  144. ;         H(14) =     -35.122 = H( 69)
  145. ;         H(15) =     203.506 = H( 68)
  146. ;         H(16) =    -168.662 = H( 67)
  147. ;         H(17) =    -224.986 = H( 66)
  148. ;         H(18) =     515.356 = H( 65)
  149. ;         H(19) =    -190.737 = H( 64)
  150. ;         H(20) =    -502.538 = H( 63)
  151. ;         H(21) =     683.771 = H( 62)
  152. ;         H(22) =     -48.015 = H( 61)
  153. ;         H(23) =    -637.753 = H( 60)
  154. ;         H(24) =     529.262 = H( 59)
  155. ;         H(25) =      98.797 = H( 58)
  156. ;         H(26) =    -344.629 = H( 57)
  157. ;         H(27) =      78.434 = H( 56)
  158. ;         H(28) =     -70.434 = H( 55)
  159. ;         H(29) =     497.058 = H( 54)
  160. ;         H(30) =    -372.420 = H( 53)
  161. ;         H(31) =    -823.878 = H( 52)
  162. ;         H(32) =    1673.040 = H( 51)
  163. ;         H(33) =    -406.914 = H( 50)
  164. ;         H(34) =   -2127.131 = H( 49)
  165. ;         H(35) =    2681.526 = H( 48)
  166. ;         H(36) =     218.871 = H( 47)
  167. ;         H(37) =   -3559.063 = H( 46)
  168. ;         H(38) =    3011.477 = H( 45)
  169. ;         H(39) =    1351.544 = H( 44)
  170. ;         H(40) =   -4501.184 = H( 43)
  171. ;         H(41) =    2475.272 = H( 42)
  172. ;
  173. ;                       BAND  1       BAND  2       BAND  3
  174. ; LOWER BAND EDGE      .0000000      .2960000      .3712000
  175. ; UPPER BAND EDGE      .2688000      .3440000      .5000000
  176. ; DESIRED VALUE        .0000000     1.0000000      .0000000
  177. ; WEIGHTING          10.0000000     1.0000000    10.0000000
  178. ; DEVIATION            .0021601      .0216009      .0021601
  179. ; DEVIATION IN DB   -53.3105500      .1856256   -53.3105500
  180. ;
  181. h0    .word    69.462
  182.     .word   -57.109
  183.     .word   -51.212
  184.     .word   124.731
  185.     .word   -67.342
  186.     .word  -112.101
  187.     .word   168.370
  188.     .word   -35.166
  189.     .word  -139.196
  190.     .word   121.212
  191.     .word     5.330
  192.     .word   -45.744
  193.     .word   -21.071
  194.     .word   -35.122
  195.     .word   203.506
  196.     .word  -168.662
  197.     .word  -224.986
  198.     .word   515.356
  199.     .word  -190.737
  200.     .word  -502.538
  201.     .word   683.771
  202.     .word   -48.015
  203.     .word  -637.753
  204.     .word   529.262
  205.     .word    98.797
  206.     .word  -344.629
  207.     .word    78.434
  208.     .word   -70.434
  209.     .word   497.058
  210.     .word  -372.420
  211.     .word  -823.878
  212.     .word  1673.040
  213.     .word  -406.914
  214.     .word -2127.131
  215.     .word  2681.526
  216.     .word   218.871
  217.     .word -3559.063
  218.     .word  3011.477
  219.     .word  1351.544
  220.     .word -4501.184
  221.     .word  2475.272
  222.     .word 2475.272
  223.     .word -4501.184
  224.     .word 1351.544
  225.     .word 3011.477
  226.     .word -3559.063
  227.     .word  218.871
  228.     .word 2681.526
  229.     .word -2127.131
  230.     .word -406.914
  231.     .word 1673.040
  232.     .word -823.878
  233.     .word -372.420
  234.     .word  497.058
  235.     .word  -70.434
  236.     .word   78.434
  237.     .word -344.629
  238.     .word   98.797
  239.     .word  529.262
  240.     .word -637.753
  241.     .word  -48.015
  242.     .word  683.771
  243.     .word -502.538
  244.     .word -190.737
  245.     .word  515.356
  246.     .word -224.986
  247.     .word -168.662
  248.     .word  203.506
  249.     .word  -35.122
  250.     .word  -21.071
  251.     .word  -45.744
  252.     .word    5.330
  253.     .word  121.212
  254.     .word -139.196
  255.     .word  -35.166
  256.     .word  168.370
  257.     .word -112.101
  258.     .word  -67.342
  259.     .word  124.731
  260.     .word  -51.212
  261. h80    .word  -57.109
  262. h81    .word   69.462
  263.  
  264. ;----------------------------------------------------------------------------
  265. ; FIRST INTERPOLATION/DECIMATION HALF BAND FILTER 12500 HZ <> 6250 HZ
  266. ;
  267. ;                FINITE IMPULSE RESPONSE (FIR)
  268. ;              LINEAR PHASE DIGITAL FILTER DESIGN
  269. ;                  REMEZ EXCHANGE ALGORITHM
  270. ;
  271. ;                       BANDPASS FILTER
  272. ;
  273. ;                     FILTER LENGTH =   9
  274. ;
  275. ;                ;**** IMPULSE RESPONSE *****
  276. ;
  277. ;
  278. ;              H( 1) =  -.17244020E-04 = H(  9)
  279. ;              H( 2) =  -.35323790E-01 = H(  8)
  280. ;              H( 3) =   .58424450E-04 = H(  7)
  281. ;              H( 4) =   .28500050E+00 = H(  6)
  282. ;              H( 5) =   .49991770E+00 = H(  5)
  283. ;
  284. ;                         BAND  1       BAND  2
  285. ;   LOWER BAND EDGE      .0000000      .4360000
  286. ;   UPPER BAND EDGE      .0640000      .5000000
  287. ;   DESIRED VALUE       1.0000000      .0000000
  288. ;   WEIGHTING           1.0000000     1.0000000
  289. ;   DEVIATION            .0006465      .0006465
  290. ;   DEVIATION IN DB      .0056136   -63.7885900
  291. ;
  292. j0    .word    0
  293. j1    .word    -145
  294. j2    .word    0
  295. j3    .word    1167
  296. j4    .word    2048
  297. j5    .word    1167
  298. j6    .word    0
  299. j7    .word    -145
  300. j8    .word    0
  301.  
  302. ;----------------------------------------------------------------------------
  303. ; SECOND INTERPOLATOR/DECIMATOR HALF BAND FILTER 6250 HZ <> 3125 HZ
  304. ;*********************************************************************
  305. ;
  306. ;                FINITE IMPULSE RESPONSE (FIR)
  307. ;              LINEAR PHASE DIGITAL FILTER DESIGN
  308. ;                  REMEZ EXCHANGE ALGORITHM
  309. ;
  310. ;                       BANDPASS FILTER
  311. ;
  312. ;                     FILTER LENGTH =  13
  313. ;
  314. ;       ***** IMPULSE RESPONSE *****
  315. ;         
  316. ;
  317. ;
  318. ;              H( 1) =   .66367920E-05 = H( 13)
  319. ;              H( 2) =   .13592210E-01 = H( 12)
  320. ;              H( 3) =  -.16377250E-04 = H( 11)
  321. ;              H( 4) =  -.64672420E-01 = H( 10)
  322. ;              H( 5) =   .25843950E-04 = H(  9)
  323. ;              H( 6) =   .30201130E+00 = H(  8)
  324. ;              H( 7) =   .49996780E+00 = H(  7)
  325. ;
  326. ;                         BAND  1       BAND  2
  327. ;   LOWER BAND EDGE      .0000000      .3720000
  328. ;   UPPER BAND EDGE      .1280000      .5000000
  329. ;   DESIRED VALUE       1.0000000      .0000000
  330. ;   WEIGHTING           1.0000000     1.0000000
  331. ;   DEVIATION            .0018621      .0018621
  332. ;   DEVIATION IN DB      .0161592   -54.5997800
  333. ;---------------------------------------------------------------------------
  334. k0    .word    0
  335. k1     .word    56 
  336. k2    .word    0
  337. k3    .word    -265
  338. k4    .word    0
  339. k5    .word    1237
  340. k6    .word    2048
  341. k7    .word    1237
  342. k8    .word    0
  343. k9    .word    -265
  344. k10    .word    0
  345. k11    .word    56
  346. k12    .word    0
  347. ;----------------------------------------------------------------------------
  348. ;
  349. ;       At 250 WPM there are 208 elements/S or 104 Hz
  350. ;    We average over 16 elements - at 3125 Hz, this amounts to 5ms signal
  351. ;
  352. df0    .word  0
  353.     .word  0
  354.     .word  0
  355.     .word  0
  356.     .word  0
  357.     .word  0
  358.     .word  0
  359.     .word  0
  360.     .word  0
  361.     .word  0
  362.     .word  0
  363.     .word  0
  364.     .word  0
  365.     .word  0
  366. df14    .word  0
  367. df15    .word  0
  368.  
  369. ;---------------------------------------------------------------------------
  370.  
  371.     .include  "mmregs.asm"
  372.         .ps     0xFA0A          ;
  373.         B    RINT            ;FA0A  RINT
  374.         .ps     0xFA0C          ;
  375.     B    XINT        ;FA0C  XINT
  376.  
  377. ***********************************************************************
  378.         .ps     0xFB00        ; Bootloader transfers here
  379.     .entry                  ; This is a must!
  380.  
  381.     SOVM
  382.     ssxm            ; set sign extention mode 
  383. * Reset and initialze the AIC
  384.     call    AIC_SET 
  385.     eint            ; Turn interrupts on
  386.  
  387. *----------------------------------------------------------------------------
  388. ; Lets spread the computational load over the x4 decimation/interpolation
  389. AGAIN:
  390.     idle
  391.     call    LPFI1a
  392.  
  393.     ldpk    SIGOUT
  394.     lac     SIGOUT        ; output first sample
  395.     call    DA_DISP
  396. ;----------------------------1
  397.     idle
  398.     call    LPFI1b
  399.     call    LPFI2a
  400.  
  401.     ldpk    SIGOUT
  402.     lac     SIGOUT1        ; output second sample
  403.     call    DA_DISP
  404. ;----------------------------2
  405.     idle
  406.     call    LPFI1a
  407.  
  408.     ldpk    SIGOUT
  409.     lac     SIGOUT2        ; output third sample
  410.     call    DA_DISP
  411. ;----------------------------3
  412.     idle
  413.     call    LPFI1b
  414.     call    LPFI2b
  415.  
  416.     ldpk    SIGOUT
  417.     lac     SIGOUT3        ; output fourth sample
  418.     call    DA_DISP
  419. ;----------------------------4
  420.  
  421.     call    HPFa
  422.     call    BPFa
  423.     call    OUTSIG
  424.  
  425.     b    AGAIN
  426.  
  427. ;----------------------------------------------------------------------------
  428. ; FIRST INTERPOLATOR DATA MOVE PASS 1
  429. LPFI1a:
  430.     ldpk    LPFI1
  431.     DMOV    LPFI17
  432.     DMOV    LPFI16
  433.     DMOV    LPFI15         ; all page 12
  434.     DMOV    LPFI14
  435.     DMOV    LPFI13
  436.     DMOV    LPFI12
  437.     DMOV    LPFI11
  438.     DMOV    LPFI1
  439.  
  440.         ldpk     DRR         ; point to memory mapped serial port recieve reg
  441.         lac      DRR         ; load accumulator with word received from AIC
  442.         sfr                  ; shift right twice to remove unused lsb's
  443.         sfr                  ;
  444.     ldpk    LPFI1
  445.     SACL    LPFI1       ; PUT INTO FIRST INTERPOLATOR
  446.  
  447.     ret
  448.  
  449. ;----------------------------------------------------------------------------
  450. ; INPUT INTERPOLATOR 1 PASS 1
  451. LPFI1b:
  452.         larp     0
  453.         lrlk     AR0,LPFI18  ; load AR0 with address of last delay element
  454.     lrlk     AR1,j8      ; load AR1 with address of last filter coeff
  455.         lark     AR2,7       ; load AR2 with loop counter
  456.         zac
  457.         lt       *-,AR1
  458.         mpy      *-,AR0
  459.  
  460. ilp1:   ltd     *-,AR1         ; ARP=0 (Xn)  *NOTE* shifting input delay line 
  461.         mpy      *-,AR2
  462.         banz     ilp1,*-,AR0
  463.         apac
  464.     ADLK    1,11           ; ADD 0.5 TO ROUND      ===JF===
  465.  
  466.     ldpk    TEMP         ; set page 12
  467.     SACH    TEMP,4          ; SAVE for 2ND INTERP W/ SHIFT
  468.  
  469.         ldpk     DRR         ; point to memory mapped serial port recieve reg
  470.         lac      DRR         ; load accumulator with word received from AIC
  471.         sfr                  ; shift right twice to remove unused lsb's
  472.         sfr                  ;
  473.     ldpk    LPFI1
  474.     SACL    LPFI1        ; PUT INTO FIRST INTERPOLATOR
  475.  
  476.     ret
  477.  
  478. ;----------------------------------------------------------------------------
  479. LPFI2a:
  480. ; SECOND INTERPOLATOR DATA MOVE
  481.  
  482.     ldpk    LPFI2
  483.     DMOV    LPFI211
  484.     DMOV    LPFI210
  485.     DMOV    LPFI29         ; all page 12
  486.     DMOV    LPFI28
  487.     DMOV    LPFI27
  488.     DMOV    LPFI26
  489.     DMOV    LPFI25
  490.     DMOV    LPFI24
  491.     DMOV    LPFI23
  492.     DMOV    LPFI22
  493.     DMOV    LPFI21
  494.     DMOV    LPFI2
  495.  
  496.     ldpk    TEMP
  497.     lac    TEMP
  498.     sacl    LPFI2
  499.     ret
  500.  
  501. ;----------------------------------------------------------------------------
  502. ; INPUT INTERPOLATOR 2
  503. LPFI2b:
  504.         larp     0
  505.         lrlk     AR0,LPFI212 ; load AR0 with address of last delay element
  506.     lrlk     AR1,k12     ; load AR1 with address of last filter coeff
  507.         lark     AR2,11      ; load AR2 with loop counter
  508.         zac
  509.         lt       *-,AR1
  510.         mpy      *-,AR0
  511.  
  512. ilp2:  ltd     *-,AR1         ; ARP=0 (Xn)  *NOTE* shifting input delay line 
  513.         mpy      *-,AR2
  514.         banz     ilp2,*-,AR0
  515.         apac
  516.     ADLK    1,11           ; ADD 0.5 TO ROUND
  517.  
  518.     LDPK    INP
  519.     SACH    INP,4        ; SAVE TO HPF W/ SHIFT
  520.  
  521.     ldpk    TEMP
  522.     lac    TEMP
  523.     sacl    LPFI2
  524.     ret
  525. ;----------------------------------------------------------------------------
  526. ; INPUT HIGHPASS FILTER, FS=3125, PASS 300 REJ 20.5 0.5/50 DB N=2
  527. ;       NUMERATOR:
  528. HPFa:
  529.  
  530.     LDPK    INP
  531.     ZAC
  532.     LT      INP2
  533.     MPY     HPF
  534.     LTD     INP1
  535.     MPY     HPF1
  536.     LTD     INP
  537.     MPY     HPF2
  538.  
  539. ;       DENOMINATOR:
  540.  
  541.     LTA     DENOM1
  542.     MPY     HPF4
  543.     LTD     DENOM
  544.     MPY     HPF3
  545.     APAC
  546.  
  547.     ADLK    1,11         ; ADD 0.5 TO ROUND
  548.     SACH    DENOM,4      ; SAVE WITH SHIFT
  549.  
  550.     LDPK    BPF
  551.     SACH    BPF,4        ; ALSO SAVE IN BPF INPUT
  552.  
  553.     ret
  554. ;---------------------------------------------------------------------------
  555. ; BANDPASS FILTER
  556. BPFa:
  557.     
  558. ;    First form the dither word
  559. ;    15 BITS EXTENDED TO 16
  560. ;    BIT0 = BIT13 XOR BIT14
  561.  
  562.     ldpk    DITHER
  563.     LAC     DITHER,2     ; SHIFT BIT14 TO MSB-HI
  564.     SACH    TEMP         ; STORE TEMPORARILY
  565.     LAC     DITHER,3     ; SHIFT BIT13 TO MSB-HI
  566.     SACH    LED          ; STORE TEMPORARILY IN LED
  567.     LAC     TEMP
  568.     XOR     LED          ; FORM XOR
  569.     ANDK    1            ; IGNORE ALL BUT LSB
  570.     ADD     DITHER,1     ; SHIFT UP ONE BIT
  571.     SACL    DITHER       ; STORE NEW DITHER WORD
  572.  
  573. ; CW BANDPASS FILTER
  574.         larp     0
  575.         lrlk     AR0,BPF81   ; load AR0 with address of last delay element
  576.     lrlk     AR1,h81     ; load AR1 with address of last filter coeff
  577.         lark     AR2,80      ; load AR2 with loop counter
  578.  
  579.     LAC     DITHER,4     ; LOAD ACCUM WITH SHIFTED DITHER
  580.         lt       *-,AR1
  581.         mpy      *-,AR0
  582.  
  583. cw1:      ltd     *-,AR1         ; ARP=0 (Xn)  *NOTE* shifting input delay line 
  584.         mpy      *-,AR2
  585.         banz     cw1,*-,AR0
  586.         apac
  587.  
  588.     ADLK    1,11         ; ADD 0.5 TO ROUND       ===JF===
  589.     SACH    BPFOUT,4     ; BPF OUTPUT
  590.  
  591.  
  592.     ldpk    TEMP
  593.     SACH    TEMP,4
  594.     ZALH    TEMP        ; display on LED Display
  595.     CALL    BARGRA
  596.     ldpk    BPFOUT
  597.  
  598. ;
  599. ; Do envelope detection for outputting signal via flag
  600.                     ; first move delay line
  601.  
  602.         larp     0
  603.         lrlk     AR0,df14    ; load AR0 with address of 2nd to last
  604.     rptk    14
  605.       dmov     *-,AR0
  606.  
  607.     lac    BPFOUT
  608.     abs
  609.     ldpk    df0           ; save in digital data delay
  610.     sacl    df0
  611. * Simple CW thresholder
  612. *
  613.         larp     0
  614.         lrlk     AR0,df15    ; load AR0 with address of last delay element
  615.     zac                ; average over 16 elements
  616.     rptk    15
  617.       add     *-
  618.  
  619.     sfr
  620.     sfr
  621.     sfr
  622.     sfr
  623.  
  624.     sblk    1000
  625.  
  626.     bgez    setflag    
  627.     sxf            ; reset flag
  628.     b    getout
  629. setflag:
  630.     rxf              ; set flag
  631.  
  632. getout:
  633.  
  634.     ret
  635. ;---------------------------------------------------------------------------
  636. ; Reconstruct output signal
  637. ; OUTPUT INTERPOLATOR 4 PASS 1
  638. OUTSIG:
  639.  
  640.     ldpk    LPFO2
  641.     ZAC
  642.     LT      LPFO23
  643.     MPYK    -289
  644.     LTD     LPFO22
  645.     MPYK    2335
  646.     LTD     LPFO21
  647.     MPYK    2335
  648.     LTD     LPFO2
  649.     MPYK    -289
  650.     APAC
  651.     ADLK    1,11         ; ADD 0.5 TO ROUND      ===JF===
  652.     SACH    SIGOUT,4     ; SAVE 1ST OUTPUT SIGNAL
  653.  
  654. ; SECOND OUTPUT SIGNAL
  655.  
  656.     ZALS    LPFO22
  657.     SACL    SIGOUT1      ; SAVE 2ND OUTPUT SIGNAL
  658.  
  659. ; OUTPUT INTERPOLATOR 3
  660.  
  661.     ZAC
  662.     LT      LPFO15
  663.     MPYK    111
  664.     LTD     LPFO14
  665.     MPYK    -530
  666.     LTD     LPFO13
  667.     MPYK    2474
  668.     LTD     LPFO12
  669.     MPYK    2474
  670.     LTD     LPFO11
  671.     MPYK    -530
  672.     LTD     LPFO1
  673.     MPYK    111
  674.     APAC
  675.     ADLK    1,11         ; ADD 0.5 TO ROUND      ===JF===
  676.     SACH    LPFO2,4      ; SAVE TO INTERP 4 W/SHIFT
  677.  
  678.     ZALH    BPFOUT         ; filter in
  679. ;    ZALH    BPF40         ; filter out, decimators remain in line
  680.     SACH    LPFO1
  681.  
  682. ; OUTPUT INTERPOLATOR 4 PASS 2
  683.  
  684.     ZAC
  685.     LT      LPFO23
  686.     MPYK    -289
  687.     LTD     LPFO22
  688.     MPYK    2335
  689.     LTD     LPFO21
  690.     MPYK    2335
  691.     LTD     LPFO2
  692.     MPYK    -289
  693.     APAC
  694.     ADLK    1,11         ; ADD 0.5 TO ROUND      ===JF===
  695.     SACH    SIGOUT2,4    ; SAVE 3RD OUTPUT SIGNAL
  696.  
  697. ; FOURTH OUTPUT SIGNAL
  698.  
  699.     ZALS    LPFO22
  700.     SACL    SIGOUT3      ; SAVE 4TH OUTPUT SIGNAL
  701.  
  702. ; LOAD OUTPUT INTERPOLATOR
  703.  
  704.     ZALH    LPFO13
  705.     SACH    LPFO2
  706.     ret
  707. ;---------------------------------------------------------------------------
  708.  
  709.  
  710. RINT    ret
  711. XINT    ret
  712. ****************************************************************************
  713. * Routine to set up AIC
  714. ****************************************************************************
  715. AIC_SET: 
  716. *
  717. * Reset AIC by defining some GLOBAL memory space, then
  718. * reading it. 
  719.     dint                    ; Normally after reset interrupts are disabled
  720.     ldpk    DXR
  721.     lack    0x80            ; AIC reset by pulsing /BR (Global Data)
  722.     sach    DXR             ; send 0 to DXR (AIC)
  723.     sacl    GREG            ; 256 * 100 nS /BR pulse
  724.     lrlk    AR0,0xFFFF      ;
  725.     rptk    255             ; read junk from address 0xFFFF
  726.     lac     *,0,AR0         ;
  727.  
  728.  .if CONF_1
  729.     conf    1               ; B0    is code (FA00 - FBFF)
  730.                 ; B1,B3 is data (0400 - 07FF)
  731.  .endif
  732.  .if CONF_2
  733.     conf    2               ; B0,B1 is code (FA00 - FD00)
  734.  .endif
  735.  
  736. ;----------------------------------------------------------------------------
  737. * Configure AIC.
  738. * The transmit interrupt must be used to sense when
  739. * the AIC has processed the commands that we are sending
  740. * to it. Since interrupts have been disabled at entry, arm
  741. * the transmit interrupt first.
  742. *
  743.     LDPK    IMR
  744.     LAC    IMR
  745.     ORK    020h
  746.     SACL    IMR
  747.         eint
  748. ;-----------------------command 00 = TX/RX A-cntrs <= TA/TB
  749.         lalk       TA,9
  750.         adlk       RA,2
  751.         call       AIC_2nd
  752. ;-----------------------command 01 = TX/RX A-cntrs <= TA+TA'/TB+TB'
  753.         lalk       TAp,9
  754.         adlk       RAp,2
  755.         addk       01h
  756.         call       AIC_2nd
  757. ;-----------------------command 10 = TX/RX A-cntrs <= TA-TA'/TB-TB'
  758.         lalk       TB,9
  759.         adlk       RB,2
  760.         addk       02h
  761.         call       AIC_2nd
  762. ;-----------------------command 11 = set command register
  763.         lalk       AIC_CMD,2
  764.         addk       03h
  765.         call       AIC_2nd
  766. ;------------------------
  767.  
  768.         nop             ; Introduce a brief delay (5*tics)
  769.         nop
  770.         nop
  771.         nop
  772.         nop
  773.  
  774.         ssxm            ; Allows sign extention during shifts
  775.         spm     0        ; Disable shifts on P-reg 
  776.  
  777. * AIC is now initialized. Disable XINT, then leave only the RINT activated.
  778.  
  779.     dint
  780.     LDPK    IMR
  781.     LAC    IMR
  782.     andk    0xFFCF
  783.     ORK    010h
  784.     SACL    IMR
  785.     ret
  786. ;----------------------------------------------------------------
  787. AIC_2nd: ldpk   0                 ;
  788.          sach   DXR               ;
  789.          idle                     ;
  790.          adlk   6,15              ;0000 0000 0000 0011 XXXX XXXX XXXX XXXX b
  791.          sach   DXR               ;
  792.          idle                     ;ACCU_hi requests 2nd XMIT
  793.          sacl   DXR               ;
  794.          idle                     ;ACCU_lo sets up registers
  795.          zac                      ;
  796.          sacl   DXR               ;make sure the word got sent
  797.          idle                     ;
  798.          ret                      ;
  799.  
  800. *---------------------------------------------------
  801. * Write accumulator to D/A
  802. *---------------------------------------------------
  803. DA_DISP:
  804. ;    sfl
  805. ;    sfl
  806.     andk     0fffch
  807.     ldpk     DXR
  808.     sacl     DXR         ; write output word to transmit register
  809.     ret
  810. ;----------------------------------------------------------------------------
  811. ; Read from A/D
  812. DA_IN:
  813.         ldpk     DRR         ; point to memory mapped serial port recieve reg
  814.         lac      DRR         ; load accumulator with word received from AIC
  815.         sfr                  ; shift right twice to remove unused lsb's
  816.         sfr                  ;
  817.     ret
  818. ;----------------------------------------------------------------------------
  819. * SQUARE INPUT FOR LED DISPLAY, 3DB/SEGMENT
  820.  
  821. BARGRA: 
  822.     ldpk    TEMP 
  823.     SACH    TEMP
  824.     LT      TEMP
  825.     MPY     TEMP
  826.     PAC
  827.     SACH    TEMP
  828.     SUBH    SQUARE
  829.     BGZ     PEAK
  830.     ZALH    SQUARE
  831.     SUBH    ONE
  832.     ABS
  833.     SACH    SQUARE
  834.     B       DISPLAY
  835.  
  836. PEAK    ZALH    TEMP
  837.     SACH    SQUARE
  838.  
  839. * CONVERT TO DISPLAY BY BITWISE OR
  840.  
  841. DISPLAY LAC     SQUARE,12
  842.     SACH    LED
  843.  
  844.     LAC     SQUARE,11
  845.     SACH    TEMP
  846.     ZALS    TEMP
  847.     OR      LED
  848.     SACL    LED
  849.  
  850.     LAC     SQUARE,10
  851.     SACH    TEMP
  852.     ZALS    TEMP
  853.     OR      LED
  854.     SACL    LED
  855.  
  856.     LAC     SQUARE,9
  857.     SACH    TEMP
  858.     ZALS    TEMP
  859.     OR      LED
  860.     SACL    LED
  861.  
  862.     LAC     SQUARE,8
  863.     SACH    TEMP
  864.     ZALS    TEMP
  865.     OR      LED
  866.     SACL    LED
  867.  
  868.     LAC     SQUARE,7
  869.     SACH    TEMP
  870.     ZALS    TEMP
  871.     OR      LED
  872.     SACL    LED
  873.  
  874.     LAC     SQUARE,6
  875.     SACH    TEMP
  876.     ZALS    TEMP
  877.     OR      LED
  878.     SACL    LED
  879.  
  880.     LAC     SQUARE,5
  881.     SACH    TEMP
  882.     ZALS    TEMP
  883.     OR      LED
  884.     SACL    LED
  885.  
  886.     LAC     SQUARE,4
  887.     SACH    TEMP
  888.     ZALS    TEMP
  889.     OR      LED
  890.     SACL    LED
  891.  
  892.     LAC     SQUARE,3
  893.     SACH    TEMP
  894.     ZALS    TEMP
  895.     OR      LED
  896.  
  897.     cmpl                ; invert bits
  898.     SACL    LED
  899.  
  900.     OUT     LED,0            ; PA0
  901.     ret
  902. ;-------------------------------------------------------------------------
  903.     .end
  904.  
  905.  
  906.  
  907.  
  908.  
  909.  
  910.  
  911.  
  912.  
  913.  
  914.  
  915.  
  916.  
  917.  
  918.  
  919.  
  920.  
  921.  
  922.  
  923.  
  924.  
  925.  
  926.  
  927.  
  928.  
  929.  
  930.  
  931.  
  932.  
  933.  
  934.  
  935.  
  936.  
  937.  
  938.  
  939.  
  940.  
  941.  
  942.  
  943.  
  944.  
  945.  
  946.  
  947.  
  948.  
  949.  
  950.  
  951.  
  952.  
  953.  
  954.  
  955.  
  956.  
  957.  
  958.  
  959.  
  960.  
  961.  
  962.  
  963.  
  964.  
  965.  
  966.  
  967.  
  968.  
  969.  
  970.  
  971.  
  972.  
  973.  
  974.  
  975.  
  976.  
  977.  
  978.  
  979.  
  980.  
  981.  
  982.  
  983.  
  984.  
  985.  
  986.  
  987.  
  988.  
  989.  
  990.