From 0d5ccafaaca9f2d587dde8104ba904751ad1c1ff Mon Sep 17 00:00:00 2001 From: Christian Pointner Date: Thu, 8 Dec 2011 19:51:44 +0000 Subject: idm initial checkin git-svn-id: https://svn.spreadspace.org/mur.sat@207 7de4ea59-55d0-425e-a1af-a3118ea81d4c --- software/idm/Makefile | 34 +++++++++ software/idm/idm.asm | 201 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 235 insertions(+) create mode 100644 software/idm/Makefile create mode 100644 software/idm/idm.asm (limited to 'software') diff --git a/software/idm/Makefile b/software/idm/Makefile new file mode 100644 index 0000000..9c8089a --- /dev/null +++ b/software/idm/Makefile @@ -0,0 +1,34 @@ +## +## 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 +## +## 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 . +## + +PROJECT := idm +PROC_TYPE := 16F887 + +include ../pic.include.mk 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 + ;; + ;; 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 . + ;; + ;; ------------------------------------- + ;; 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 -- cgit v1.2.3