diff options
author | Christian Pointner <equinox@mur.at> | 2012-05-30 21:42:55 +0000 |
---|---|---|
committer | Christian Pointner <equinox@mur.at> | 2012-05-30 21:42:55 +0000 |
commit | 2b11c0fb9353bba065cc19b936dd275a8b6e7747 (patch) | |
tree | 98c5443b86649a3a28ca9b99d35c1a6459820d2f /software/idm/idm.asm | |
parent | idm hardware cleanup (diff) |
started new empty idm code
git-svn-id: https://svn.spreadspace.org/mur.sat@493 7de4ea59-55d0-425e-a1af-a3118ea81d4c
Diffstat (limited to 'software/idm/idm.asm')
-rw-r--r-- | software/idm/idm.asm | 482 |
1 files changed, 46 insertions, 436 deletions
diff --git a/software/idm/idm.asm b/software/idm/idm.asm index 01ef2b4..2560a07 100644 --- a/software/idm/idm.asm +++ b/software/idm/idm.asm @@ -1,477 +1,87 @@ ;; - ;; mur.sat + ;; spreadspace pic utils ;; - ;; Somewhen in the year 2012, mur.at will have a nano satellite launched - ;; into a low earth orbit (310 km above the surface of our planet). The - ;; satellite itself is a TubeSat personal satellite kit, developed and - ;; launched by interorbital systems. mur.sat is a joint venture of mur.at, - ;; ESC im Labor and realraum. ;; - ;; Please visit the project hompage at sat.mur.at for further information. + ;; Copyright (C) 2011 Christian Pointner <equinox@spreadspace.org> + ;; + ;; This file is part of spreadspace pic utils. ;; - ;; - ;; Copyright (C) 2011 Christian Pointner <equinox@mur.at> - ;; - ;; This file is part of mur.sat. - ;; - ;; mur.sat is free software: you can redistribute it and/or modify + ;; spreadspace pic utils is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; any later version. ;; - ;; mur.sat is distributed in the hope that it will be useful, + ;; spreadspace pic utils is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; ;; You should have received a copy of the GNU General Public License - ;; along with mur.sat. If not, see <http://www.gnu.org/licenses/>. + ;; along with spreadspace pic utils. If not, see <http://www.gnu.org/licenses/>. ;; ;; ------------------------------------- ;; PREAMBLE - LIST p=16F887 - include "p16f887.inc" - __config _CONFIG1, _DEBUG_OFF & _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_NSLEEP & _CPD_OFF & _CP_OFF & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_CLKOUT - __config _CONFIG2, _BOR21V & _WRT_OFF + LIST p=16F1847 + include "p16f1847.inc" + __config _CONFIG1, _FOSC_INTOSC & _WDTE_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _CPD_OFF & _BOREN_OFF & _CLKOUTEN_OFF & _IESO_OFF & _FCMEN_OFF + __config _CONFIG2, _WRT_OFF & _PLLEN_OFF & _STVREN_OFF & _BORV_LO & _LVP_OFF + ;; ------------------------------------- ;; DEFINES - ;; constants -BUF_PAGE_LEN EQU H'0050' -BUF_PAGE_CNT EQU H'0004' -BUF_OFFSET EQU H'0020' - - ;; I/O Pins -;; PortA -DBG1 EQU .4 -DBG2 EQU .5 -;; PortC - - ;; variables -;; page 0 only - - -;; all pages -RX_BYTE EQU H'0070' -WAIT_CNT EQU H'0071' -FLAGS EQU H'0072' - -WBUF_PAGE_PTR EQU H'0074' -WBUF_PAGE_NUM EQU H'0075' -RBUF_PAGE_PTR EQU H'0076' -RBUF_PAGE_NUM EQU H'0077' - -W_TEMP EQU H'007E' -STATUS_TEMP EQU H'007F' - - ;; bits -;; FLAGS -UNDERRUN EQU .0 -OVERRUN EQU .1 -CTS EQU .7 + +CNT0 EQU H'0020' +CNT1 EQU H'0021' ;; ------------------------------------- - ;; Reset Vector + ;; OFFSET org 0 - goto init - - ;; ------------------------------------- - ;; Interrupt Vector - org 4 - ;; save context - movwf W_TEMP - swapf STATUS,W - movwf STATUS_TEMP - - bcf STATUS,RP0 - bcf STATUS,RP1 - - ;; dispatch interrupt sources - btfsc PIR1,TMR2IF - goto int_tmr2 - btfsc PIR1,RCIF - goto int_uart_rx - btfsc PIR1,TXIF - goto int_uart_tx - goto interrupt_end - -int_tmr2 - 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 - - call wbuf_next - btfsc FLAGS,OVERRUN - goto int_tmr2_end - movf ADRESH,w - movwf INDF - -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 - call uart_rx_byte - btfss RCSTA,OERR - goto int_uart_rx_oe - goto interrupt_end - -int_uart_rx_oe - bcf RCSTA,CREN - bsf RCSTA,CREN - - goto interrupt_end - - -interrupt_end - ;; restore context - swapf STATUS_TEMP,W - movwf STATUS - swapf W_TEMP,F - swapf W_TEMP,W - retfie ;; ------------------------------------- ;; INIT init - ;; bank 3 - bsf STATUS,RP0 - bsf STATUS,RP1 - movlw b'00000000' - movwf BAUDCTL - movlw b'00100000' - movwf ANSEL - - ;; bank 2 - bcf STATUS,RP0 - bsf STATUS,RP1 - movlw b'10000000' - movwf CM1CON0 - movlw b'10010000' - movwf CM2CON0 - - ;; bank 1 - bsf STATUS,RP0 - bcf STATUS,RP1 - movlw b'10000010' - movwf OPTION_REG - clrf PSTRCON - movlw b'01111000' - movwf OSCCON - movlw b'11001111' + ;; BANK 3 + movlw b'00000011' + movwf BSR + clrf ANSELA + + ;; BANK 2 + movlw b'00000010' + movwf BSR + + ;; BANK 1 + movlw b'00000001' + movwf BSR + movlw b'01111111' movwf TRISA - movlw b'11111111' - movwf TRISB - movlw b'11111111' - movwf TRISC - movlw b'11111111' - movwf TRISD - movlw b'00100100' - movwf TXSTA - movlw .8 - movwf SPBRG - clrf SPBRGH - movlw b'00100010' - movwf PIE1 - clrf PIE2 -; movlw .250 ;; 8kHz - movlw .200 ;; 5kHz -; movlw .156 ;; ~50Hz / ~200Hz - movwf PR2 - clrf ADCON1 - - ;; bank 0 - bcf STATUS,RP0 - bcf STATUS,RP1 - movlw b'10010000' - movwf RCSTA -; movlw b'00000100' ;; 8kHz - movlw b'00001100' ;; 5kHz -; movlw b'01111110' ;; ~50Hz -; movlw b'01111101' ;; ~200Hz - movwf T2CON - movlw b'01000000' - movwf INTCON - clrf TMR2 - movlw b'10010101' - movwf ADCON0 - bcf PORTA,DBG1 - bcf PORTA,DBG2 - - call wbuf_reset - call rbuf_reset - clrf RX_BYTE - bsf INTCON,GIE - - goto main - - - ;; ------------------------------------- - ;; TABLES -digit - addwf PCL,f - retlw '0' - retlw '1' - retlw '2' - retlw '3' - retlw '4' - retlw '5' - retlw '6' - retlw '7' - retlw '8' - retlw '9' - retlw 'A' - retlw 'B' - retlw 'C' - retlw 'D' - retlw 'E' - retlw 'F' - - - ;; ------------------------------------- - ;; SUBROUTINES -wait_ms - movwf WAIT_CNT -wait_next - movlw .6 - movwf TMR0 - bcf INTCON,T0IF -wait_loop - btfss INTCON,T0IF - goto wait_loop - decfsz WAIT_CNT,f - goto wait_next - return - - ;; ------------------- -uart_rx_byte - btfsc RCSTA,FERR - goto uart_rx_fe - movf RCREG,w - movwf RX_BYTE - return - -uart_rx_fe - movf RCREG,w - return - - ;; ------------------- -wbuf_reset - movlw BUF_PAGE_LEN - 1 - movwf WBUF_PAGE_PTR - movlw BUF_PAGE_CNT - 1 - movwf WBUF_PAGE_NUM - bcf FLAGS,OVERRUN - bcf PORTA,DBG1 - - - ;; ------------------- -wbuf_next - btfsc FLAGS,UNDERRUN - goto wbuf_move_ptr - - movf RBUF_PAGE_NUM,w - xorwf WBUF_PAGE_NUM,w - btfss STATUS,Z - goto wbuf_move_ptr - - movf RBUF_PAGE_PTR,w - xorwf WBUF_PAGE_PTR,w - btfss STATUS,Z - 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 - decf WBUF_PAGE_PTR,f - goto wbuf_fill_fsr - -wbuf_next_page - movlw BUF_PAGE_LEN - 1 - movwf WBUF_PAGE_PTR - movf WBUF_PAGE_NUM,f - btfsc STATUS,Z - goto wbuf_next_cycle - decf WBUF_PAGE_NUM,f - goto wbuf_fill_fsr - -wbuf_next_cycle - movlw BUF_PAGE_CNT - 1 - movwf WBUF_PAGE_NUM - -wbuf_fill_fsr - movlw BUF_OFFSET - addwf WBUF_PAGE_PTR,w - movwf FSR - - btfss WBUF_PAGE_NUM,0 - bcf FSR,7 - btfsc WBUF_PAGE_NUM,0 - bsf FSR,7 - btfss WBUF_PAGE_NUM,1 - bcf STATUS,IRP - btfsc WBUF_PAGE_NUM,1 - bsf STATUS,IRP - return - - ;; ------------------- -rbuf_reset - movlw BUF_PAGE_LEN - 1 - movwf RBUF_PAGE_PTR - 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 - btfsc FLAGS,OVERRUN - goto rbuf_move_ptr - - movf WBUF_PAGE_NUM,w - xorwf RBUF_PAGE_NUM,w - btfss STATUS,Z - goto rbuf_move_ptr - - movf WBUF_PAGE_PTR,w - xorwf RBUF_PAGE_PTR,w - btfss STATUS,Z - 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 - decf RBUF_PAGE_PTR,f - goto rbuf_fill_fsr - -rbuf_next_page - movlw BUF_PAGE_LEN - 1 - movwf RBUF_PAGE_PTR - movf RBUF_PAGE_NUM,f - btfsc STATUS,Z - goto rbuf_next_cycle - decf RBUF_PAGE_NUM,f - goto rbuf_fill_fsr - -rbuf_next_cycle - movlw BUF_PAGE_CNT - 1 - movwf RBUF_PAGE_NUM - -rbuf_fill_fsr - movlw BUF_OFFSET - addwf RBUF_PAGE_PTR,w - movwf FSR - - btfss RBUF_PAGE_NUM,0 - bcf FSR,7 - btfsc RBUF_PAGE_NUM,0 - bsf FSR,7 - btfss RBUF_PAGE_NUM,1 - bcf STATUS,IRP - btfsc RBUF_PAGE_NUM,1 - bsf STATUS,IRP - return + ;; BANK 0 + clrf BSR + bcf PORTA,7 ;; ------------------------------------- ;; MAINLOOP 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 + movlw .50 + movwf CNT0 -cmd_read - bsf FLAGS,CTS - clrf RX_BYTE - goto main +outer + movlw .255 + movwf CNT1 -cmd_noread - bcf FLAGS,CTS - clrf RX_BYTE - goto main +inner + decfsz CNT1,f + goto inner -cmd_start - ;; start sampling - ;; bsf FLAGS,CTS - clrf RX_BYTE - goto main + decfsz CNT0,f + goto outer -cmd_stop - clrf RX_BYTE - goto main - -powerdown - sleep - nop - goto main + movlw b'10000000' + xorwf PORTA,f + + goto main ;; ------------------------------------- ;; END |