diff options
author | Christian Pointner <equinox@mur.at> | 2012-06-07 21:00:43 +0000 |
---|---|---|
committer | Christian Pointner <equinox@mur.at> | 2012-06-07 21:00:43 +0000 |
commit | e1f53cd54b705d2b77b98eec1e1acfbfb98f3383 (patch) | |
tree | c075a92f8e32d926b96d64e8c8e69dd543f762fa | |
parent | added ad conversion (diff) |
buffer partly works now
git-svn-id: https://svn.spreadspace.org/mur.sat@514 7de4ea59-55d0-425e-a1af-a3118ea81d4c
-rw-r--r-- | software/idm/idm.asm | 187 |
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 ;; ------------------------------------- |