diff options
Diffstat (limited to 'software/idm')
-rw-r--r-- | software/idm/idm.asm | 111 |
1 files changed, 94 insertions, 17 deletions
diff --git a/software/idm/idm.asm b/software/idm/idm.asm index a4fd653..3dc9538 100644 --- a/software/idm/idm.asm +++ b/software/idm/idm.asm @@ -46,9 +46,12 @@ BUF_OFFSET EQU H'0020' UNDERRUN EQU .0 OVERRUN EQU .1 +CTS EQU .7 + ;; I/O Pins ;; PortA -MPU_INT EQU .4 +DBG1 EQU .4 +DBG2 EQU .5 ;; PortC @@ -57,7 +60,7 @@ MPU_INT EQU .4 ;; all pages -TMP EQU H'0070' +RX_BYTE EQU H'0070' WAIT_CNT EQU H'0071' FLAGS EQU H'0072' @@ -92,13 +95,20 @@ STATUS_TEMP EQU H'007F' goto int_tmr2 btfsc PIR1,RCIF goto int_uart_rx + btfsc PIR1,TXIF + goto int_uart_tx goto interrupt_end int_tmr2 -; movlw b'00010000' -; xorwf PORTA,f - bsf ADCON0,GO + + bsf STATUS,RP0 + btfss FLAGS,CTS + bcf PIE1,TXIE + btfsc FLAGS,CTS + bsf PIE1,TXIE + bcf STATUS,RP0 + int_tmr2_adcon btfsc ADCON0,GO goto int_tmr2_adcon @@ -108,12 +118,21 @@ int_tmr2_adcon goto int_tmr2_end movf ADRESH,w movwf INDF - movwf TXREG - + int_tmr2_end bcf PIR1,TMR2IF goto interrupt_end + +int_uart_tx + call rbuf_next + btfsc FLAGS,UNDERRUN + goto interrupt_end + movf INDF,w + movwf TXREG + goto interrupt_end + + int_uart_rx call uart_rx_byte btfsc PIR1,RCIF @@ -151,9 +170,9 @@ init ;; bank 2 bcf STATUS,RP0 bsf STATUS,RP1 - movlw b'10100000' + movlw b'10000000' movwf CM1CON0 - movlw b'10110000' + movlw b'10010000' movwf CM2CON0 ;; bank 1 @@ -182,7 +201,7 @@ init clrf PIE2 ; movlw .250 ;; 8kHz movlw .200 ;; 5kHz -; movlw .156 ;; ~50Hz +; movlw .156 ;; ~50Hz / ~200Hz movwf PR2 clrf ADCON1 @@ -194,6 +213,7 @@ init ; movlw b'00000100' ;; 8kHz movlw b'00001100' ;; 5kHz ; movlw b'01111110' ;; ~50Hz +; movlw b'01111101' ;; ~200Hz movwf T2CON movlw b'01000000' movwf INTCON @@ -201,11 +221,12 @@ init movlw b'10010101' movwf ADCON0 -; bcf PORTA,MPU_INT + bcf PORTA,DBG1 + bcf PORTA,DBG2 call wbuf_reset call rbuf_reset - clrf TMP + clrf RX_BYTE bsf INTCON,GIE goto main @@ -253,7 +274,7 @@ uart_rx_byte btfsc RCSTA,FERR goto uart_rx_fe movf RCREG,w ; TODO: move to input string - movwf TMP + movwf RX_BYTE return uart_rx_fe @@ -267,6 +288,8 @@ wbuf_reset movlw BUF_PAGE_CNT - 1 movwf WBUF_PAGE_NUM bcf FLAGS,OVERRUN + bcf PORTA,DBG1 + ;; ------------------- wbuf_next @@ -284,10 +307,18 @@ wbuf_next goto wbuf_move_ptr bsf FLAGS,OVERRUN + bsf PORTA,DBG1 + return wbuf_move_ptr bcf FLAGS,UNDERRUN + bcf PORTA,DBG2 + bsf STATUS,RP0 + btfsc FLAGS,CTS + bsf PIE1,TXIE + bcf STATUS,RP0 + movf WBUF_PAGE_PTR,f btfsc STATUS,Z goto wbuf_next_page @@ -329,6 +360,13 @@ rbuf_reset movlw BUF_PAGE_CNT - 1 movwf RBUF_PAGE_NUM bsf FLAGS,UNDERRUN + bsf PORTA,DBG2 + + bsf STATUS,RP0 + bcf PIE1,TXIE + bcf STATUS,RP0 + + bcf FLAGS,CTS ;; ------------------- rbuf_next @@ -346,10 +384,17 @@ rbuf_next goto rbuf_move_ptr bsf FLAGS,UNDERRUN + bsf PORTA,DBG2 + bsf STATUS,RP0 + bcf PIE1,TXIE + bcf STATUS,RP0 + return rbuf_move_ptr bcf FLAGS,OVERRUN + bcf PORTA,DBG1 + movf RBUF_PAGE_PTR,f btfsc STATUS,Z goto rbuf_next_page @@ -388,10 +433,42 @@ rbuf_fill_fsr ;; ------------------------------------- ;; MAINLOOP main - ;; movf TMP,f - ;; btfsc STATUS,Z - ;; goto main - + movlw 'r' + xorwf RX_BYTE,w + btfsc STATUS,Z + goto cmd_read + movlw 'n' + xorwf RX_BYTE,w + btfsc STATUS,Z + goto cmd_noread + movlw 's' + xorwf RX_BYTE,w + btfsc STATUS,Z + goto cmd_start + movlw 'p' + xorwf RX_BYTE,w + btfsc STATUS,Z + goto cmd_stop + goto main + +cmd_read + bsf FLAGS,CTS + clrf RX_BYTE + goto main + +cmd_noread + bcf FLAGS,CTS + clrf RX_BYTE + goto main + +cmd_start + ;; start sampling + ;; bsf FLAGS,CTS + clrf RX_BYTE + goto main + +cmd_stop + clrf RX_BYTE goto main powerdown |