summaryrefslogtreecommitdiff
path: root/software
diff options
context:
space:
mode:
Diffstat (limited to 'software')
-rw-r--r--software/idm/idm.asm187
1 files changed, 101 insertions, 86 deletions
diff --git a/software/idm/idm.asm b/software/idm/idm.asm
index 03daa6d..48c8351 100644
--- a/software/idm/idm.asm
+++ b/software/idm/idm.asm
@@ -31,11 +31,19 @@
;; -------------------------------------
;; DEFINES
;; constants
-BUF_STARTH EQU 020h
-BUF_STARTL EQU 000h
-BUF_ENDH EQU 023h
-BUF_ENDL EQU 0BFh
-
+BUF_STARTH EQU H'0020'
+BUF_STARTL EQU H'0000'
+BUF_ENDH EQU H'0023'
+BUF_ENDL EQU H'00BF'
+#define FSRW FSR0
+#define FSRWH FSR0H
+#define FSRWL FSR0L
+#define INDFW INDF0
+#define FSRR FSR1
+#define FSRRH FSR1H
+#define FSRRL FSR1L
+#define INDFR INDF1
+
;; I/O Pins
;; PortA
#define C1m PORTA,0
@@ -43,8 +51,8 @@ BUF_ENDL EQU 0BFh
#define AMP_OUT PORTA,2
#define ADC_IN PORTA,3
#define SPEAKER PORTA,4
-#define DBG1 PORTA,6
-#define DBG2 PORTA,7
+#define DBG2 PORTA,6
+#define DBG1 PORTA,7
;; PortB
#define DBG0 PORTB,0
#define SDI PORTB,1
@@ -56,21 +64,25 @@ BUF_ENDL EQU 0BFh
;; variables
;; all Pages
-CNT0 EQU H'0070'
-CNT1 EQU H'0071'
-CNT2 EQU H'0072'
-TMP EQU H'0073'
+TMP EQU H'0070'
-FLAGS EQU H'007F'
+FLAGS EQU H'007F'
;; bits
;; FLAGS
-UNDERRUN EQU .0
-OVERRUN EQU .1
+#define UNDERRUN FLAGS,0
+#define OVERRUN FLAGS,1
;; -------------------------------------
;; OFFSET
org .0
+ movlb .1
+; movlw b'01011000' ; 1 MHz
+; movlw b'01100000' ; 2 MHz
+; movlw b'01101000' ; 4 MHz
+; movlw b'01110000' ; 8 MHz
+ movlw b'01111000' ; 16 MHz
+ movwf OSCCON
goto init
;; -------------------------------------
@@ -85,16 +97,17 @@ OVERRUN EQU .1
int_tmr2
bcf PIR1,TMR2IF
+ bsf DBG0
movlb b'00000001'
bsf ADCON0,GO
call wbuf_next
- btfsc FLAGS,OVERRUN
+ btfsc OVERRUN
retfie
int_tmr2_adcon
btfsc ADCON0,GO
goto int_tmr2_adcon
movf ADRESH,w
- movwf INDF0
+ movwf INDFW
retfie
@@ -112,99 +125,127 @@ int_spi
;; SUBROUTINES
wbuf_reset
movlw BUF_STARTH
- movwf FSR0H
+ movwf FSRWH
movlw BUF_STARTL
- movwf FSR0L
- bcf FLAGS,OVERRUN
+ movwf FSRWL
+ bcf OVERRUN
+
+ movf BSR,w
+ clrf BSR
+ bcf DBG2
+ movwf BSR
return
;; -------------------
wbuf_next
- btfsc FLAGS,UNDERRUN
+ btfsc UNDERRUN
goto wbuf_move_ptr
- movf FSR1H,w
- xorwf FSR0H,w
- btfss STATUS,Z
+ movf FSRRH,w
+ xorwf FSRWH,w
+ btfsc STATUS,Z
goto wbuf_move_ptr
-
- movf FSR1L,w
- xorwf FSR0L,w
- btfss STATUS,Z
+ movf FSRRL,w
+ xorwf FSRWL,w
+ btfsc STATUS,Z
goto wbuf_move_ptr
- bsf FLAGS,OVERRUN
+ bsf OVERRUN
+
+ movf BSR,w
+ clrf BSR
+ bsf DBG2
+ movwf BSR
return
wbuf_move_ptr
- bcf FLAGS,UNDERRUN
- addfsr FSR0,1
+ movf BSR,w
+ clrf BSR
+ bcf DBG1
+ movwf BSR
- movf FSR0H,w
+ bcf UNDERRUN
+ addfsr FSRW,1
+
+ movf FSRWH,w
sublw BUF_ENDH
btfss STATUS,C
goto wbuf_wraparound
btfss STATUS,Z
return
- movf FSR0L,w
+ movf FSRWL,w
sublw BUF_ENDL
btfsc STATUS,C
return
wbuf_wraparound
movlw BUF_STARTH
- movwf FSR0H
+ movwf FSRWH
movlw BUF_STARTL
- movwf FSR0L
+ movwf FSRWL
return
;; -------------------
rbuf_reset
movlw BUF_STARTH
- movwf FSR1H
+ movwf FSRRH
movlw BUF_STARTL
- movwf FSR1L
- bsf FLAGS,UNDERRUN
+ movwf FSRRL
+ bsf UNDERRUN
+
+ movf BSR,w
+ clrf BSR
+ bsf DBG1
+ movwf BSR
;; -------------------
rbuf_next
- btfsc FLAGS,OVERRUN
+ btfsc OVERRUN
goto rbuf_move_ptr
- movf FSR0H,w
- xorwf FSR1H,w
- btfss STATUS,Z
+ movf FSRWH,w
+ xorwf FSRRH,w
+ btfsc STATUS,Z
goto rbuf_move_ptr
-
- movf FSR0L,w
- xorwf FSR1L,w
- btfss STATUS,Z
+ movf FSRWL,w
+ xorwf FSRRL,w
+ btfsc STATUS,Z
goto rbuf_move_ptr
- bsf FLAGS,UNDERRUN
+ bsf UNDERRUN
+
+ movf BSR,w
+ clrf BSR
+ bsf DBG1
+ movwf BSR
return
rbuf_move_ptr
- bcf FLAGS,OVERRUN
- addfsr FSR1,1
+ movf BSR,w
+ clrf BSR
+ bcf DBG2
+ movwf BSR
+
+ bcf OVERRUN
+ addfsr FSRR,1
- movf FSR1H,w
+ movf FSRRH,w
sublw BUF_ENDH
btfss STATUS,C
goto rbuf_wraparound
btfss STATUS,Z
return
- movf FSR1L,w
+ movf FSRRL,w
sublw BUF_ENDL
btfsc STATUS,C
return
rbuf_wraparound
movlw BUF_STARTH
- movwf FSR1H
+ movwf FSRRH
movlw BUF_STARTL
- movwf FSR1L
+ movwf FSRRL
return
;; -------------------------------------
@@ -234,12 +275,6 @@ init
movwf TRISA
movlw b'01110010'
movwf TRISB
-; movlw b'01011000' ; 1 MHz
-; movlw b'01100000' ; 2 MHz
-; movlw b'01101000' ; 4 MHz
-; movlw b'01110000' ; 8 MHz
- movlw b'01111000' ; 16 MHz
- movwf OSCCON
movlw b'01010000' ; Left Justified, FOSC/16, NEG=VSS,POS=VDD
movwf ADCON1
movlw b'00001101' ; AN3, ADC On
@@ -252,46 +287,26 @@ init
movlw .124 ; 8 kHz @ 16MHz
movwf PR2
clrf TMR2 ; reset TMR2
- movlw b'00000101' ; Postscaler 1:1,Timer On,Prescaler 1:4
+ movlw b'00000101' ; Postscaler 1:1,Timer Off,Prescaler 1:4
movwf T2CON
clrf PIR1 ; reset all used interupt flags
- movlw b'11000000' ; GIE,PEIE
+ movlw b'01000000' ; PEIE
movwf INTCON
bcf FILTER_EN
bsf INT
bcf DBG0
- bcf DBG1
- bcf DBG2
+ call wbuf_reset
+ call rbuf_reset
+
+ bsf T2CON,TMR2ON
+ bsf INTCON,GIE
;; -------------------------------------
;; MAINLOOP
main
-;; movlw .255
-;; movwf CNT0
-
-;; outer1
-;; movlw .255
-;; movwf CNT1
-
-;; outer
-;; movlw .5
-;; movwf CNT2
-
-;; inner
-;; decfsz CNT2,f
-;; goto inner
-
-;; decfsz CNT1,f
-;; goto outer
-
-;; decfsz CNT0,f
-;; goto outer1
-
-;; movlw b'00001000'
-;; xorwf PORTB,f
-
+ bcf DBG0
goto main
;; -------------------------------------