diff options
author | Christian Pointner <equinox@mur.at> | 2011-12-08 19:51:44 +0000 |
---|---|---|
committer | Christian Pointner <equinox@mur.at> | 2011-12-08 19:51:44 +0000 |
commit | 0d5ccafaaca9f2d587dde8104ba904751ad1c1ff (patch) | |
tree | e57c997417fc16551cf5fd75572ed4e45c092a1a /software/idm/idm.asm | |
parent | added datasheet for GMSK modem (diff) |
idm initial checkin
git-svn-id: https://svn.spreadspace.org/mur.sat@207 7de4ea59-55d0-425e-a1af-a3118ea81d4c
Diffstat (limited to 'software/idm/idm.asm')
-rw-r--r-- | software/idm/idm.asm | 201 |
1 files changed, 201 insertions, 0 deletions
diff --git a/software/idm/idm.asm b/software/idm/idm.asm new file mode 100644 index 0000000..352d6a0 --- /dev/null +++ b/software/idm/idm.asm @@ -0,0 +1,201 @@ + ;; + ;; mur.sat + ;; + ;; Somewhen in the year 2011, 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@mur.at> + ;; + ;; This file is part of mur.sat. + ;; + ;; mur.sat 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, + ;; 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/>. + ;; + ;; ------------------------------------- + ;; 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 + + ;; ------------------------------------- + ;; DEFINES + ;; constants + + ;; I/O Pins + + ;; variables + ;; page 0 only +TMP EQU H'0020' +WAIT_CNT EQU H'0021' + + + ;; all pages +FSR_TEMP EQU H'007D' +W_TEMP EQU H'007E' +STATUS_TEMP EQU H'007F' + + ;; bits + + ;; ------------------------------------- + ;; Reset Vector + org 0 + goto init + + ;; ------------------------------------- + ;; Interrupt Vector + org 4 + ;; save context + movwf W_TEMP + swapf STATUS,W + movwf STATUS_TEMP + movf FSR,w + movwf FSR_TEMP + + bcf STATUS,RP0 + bcf STATUS,RP1 + + ;; dispatch interrupt sources + btfsc PIR1,RCIF + goto int_uart_rx + 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 + movf FSR_TEMP,w + movwf FSR + 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 + + ;; bank 1 + bsf STATUS,RP0 + bcf STATUS,RP1 + movlw b'10000000' + movwf OPTION_REG + clrf PSTRCON + movlw b'01101000' + movwf OSCCON + movlw b'11111111' + movwf TRISA + movlw b'11111111' + movwf TRISB + movlw b'11111111' + movwf TRISC + movlw b'11111111' + movwf TRISD + movlw b'00100100' + movwf TXSTA + movlw .12 + movwf SPBRG + clrf SPBRGH + movlw b'00100000' + movwf PIE1 + clrf PIE2 + + ;; bank 0 + bcf STATUS,RP0 + bcf STATUS,RP1 + movlw b'10010000' + movwf RCSTA + movlw B'01000000' + movwf INTCON + + clrf TMP + bsf INTCON,GIE + + goto main + + + ;; ------------------------------------- + ;; SUBROUTINES +wait_ms + movwf WAIT_CNT +wait_next + movlw .9 + 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 ; TODO: move to input string + movwf TMP + return + +uart_rx_fe + movf RCREG,w + return + + ;; ------------------------------------- + ;; MAINLOOP +main + ;; movf TMP,f + ;; btfsc STATUS,Z + ;; goto main + + movlw '.' + movwf TXREG + movlw .255 + call wait_ms + + goto main + +powerdown + sleep + nop + goto main + + ;; ------------------------------------- + ;; END + end |