summaryrefslogtreecommitdiff
path: root/software/idm/idm.asm
diff options
context:
space:
mode:
authorChristian Pointner <equinox@mur.at>2012-05-30 21:42:55 +0000
committerChristian Pointner <equinox@mur.at>2012-05-30 21:42:55 +0000
commit2b11c0fb9353bba065cc19b936dd275a8b6e7747 (patch)
tree98c5443b86649a3a28ca9b99d35c1a6459820d2f /software/idm/idm.asm
parentidm 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.asm482
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