summaryrefslogtreecommitdiff
path: root/software/ihu/ihu.asm
diff options
context:
space:
mode:
Diffstat (limited to 'software/ihu/ihu.asm')
-rw-r--r--software/ihu/ihu.asm429
1 files changed, 91 insertions, 338 deletions
diff --git a/software/ihu/ihu.asm b/software/ihu/ihu.asm
index 6c33b5c..eef9547 100644
--- a/software/ihu/ihu.asm
+++ b/software/ihu/ihu.asm
@@ -44,59 +44,52 @@
#define SOLAR_C0 PORTA,0
#define SOLAR_C1 PORTA,1
#define SOLAR_C2 PORTA,2
-#define SOLAR_C3 PORTA,3
+#define VREF PORTA,3
#define OWIRE PORTA,4
-#define SOLAR_C4 PORTA,5
+#define OW_TEMP PORTA,5
+;#define OSC2 PORTA,6
+;#define OSC1 PORTA,7
;; PortB
-#define DTMF_INT PORTB,0
-#define BAT_V PORTB,1
-#define SOLAR_V PORTB,2
-#define BAT_C PORTB,3
-#define I2C_SDA PORTB,4
-#define I2C_SCL PORTB,5
-#define RTC_INT PORTB,6
-#define RTC_RST PORTB,7
+#define CTR_INT PORTB,0
+#define POWER_FAIL PORTB,1
+#define CAPGOOD PORTB,2
+#define BAT_INT PORTB,3
+#define DEPLOY PORTB,4
+#define RTC_RST PORTB,5
+;#define PGC PORTB,6
+;#define PGD PORTB,7
;; PortC
-#define MPU_PWRDWN PORTC,0
-#define MPU_RESET PORTC,1
-#define UNDEF_C2 PORTC,2
-#define UNDEF_C3 PORTC,3
-#define UNDEF_C4 PORTC,4
-#define UNDEF_C5 PORTC,5
+#define MPU_RST PORTC,0
+#define CTR_RST PORTC,1
+#define BAT_RST PORTC,2
+#define SPI_SCK PORTC,3
+#define SPI_MISO PORTC,4
+#define SPI_MOSI PORTC,5
#define MPU_TX PORTC,6
#define MPU_RX PORTC,7
;; PortD
-#define DTMF_D0 PORTD,0
-#define DTMF_D1 PORTD,1
-#define DTMF_D2 PORTD,2
-#define DTMF_D3 PORTD,3
-#define DTMF_PWRDWN PORTD,4
-#define TTX_RESET PORTD,5
-#define TTX_SCL PORTD,6
-#define TTX_SDA PORTD,7
+#define I2C_SCL PORTD,0
+#define I2C_SDA PORTD,1
+I2C_PORT EQU PORTD
+I2C_SDA_MASK EQU b'00000010'
+#define CTR_SS PORTD,2
+#define BAT_SS PORTD,3
+#define MPU_EN PORTD,4
+#define HEAT_EN PORTD,5
+#define RADIO_SILENCE PORTD,6
+#define MAIN_OFF PORTD,7
;; PortE
-#define SOLAR_C5 PORTE,0
-#define SOLAR_C6 PORTE,1
-#define SOLAR_C7 PORTE,2
+#define SOLAR_V0 PORTE,0
+#define SOLAR_V1 PORTE,1
+#define SOLAR_V2 PORTE,2
;; variables
;; page 0 only
TMP EQU H'0020'
-TTX_BYTE EQU H'0021'
-TTX_BIT_CNT EQU H'0022'
-TTX_BYTE_CNT EQU H'0023'
-TTX_CSUM EQU H'0024'
-
-RTC_BYTE_CNT EQU H'0028'
WAIT_CNT EQU H'002F'
-DTMF_BUF EQU H'0030' ; 5Bytes for incoming DTMF commands
-DTMF_BUF_END EQU H'0034'
-DTMF_BUF_PTR EQU H'0035'
-DTMF_CS EQU H'0036'
-DTMF_TIMEOUT EQU H'0037'
-
+RTC_BYTE_CNT EQU H'0028'
RTC_TOD0 EQU H'003A'
RTC_TOD1 EQU H'003B'
RTC_TOD2 EQU H'003C'
@@ -105,43 +98,6 @@ RTC_TOD3 EQU H'003D'
BUF EQU H'0040'
BUF_END EQU H'004F'
-ADC_SOLAR_C0 EQU H'0050'
-ADC_SOLAR_C1 EQU H'0051'
-ADC_SOLAR_C2 EQU H'0052'
-ADC_SOLAR_C3 EQU H'0053'
-ADC_SOLAR_V0 EQU H'0054'
-ADC_SOLAR_C4 EQU H'0055'
-ADC_SOLAR_C5 EQU H'0056'
-ADC_SOLAR_C6 EQU H'0057'
-ADC_SOLAR_C7 EQU H'0058'
-ADC_SOLAR_V1 EQU H'0059'
-SOL_POWERL EQU H'005A'
-SOL_POWERH EQU H'005B'
-
-SOL_CALC_0 EQU H'005C'
-SOL_CALC_1 EQU H'005D'
-SOL_CALC_2 EQU H'005E'
-SOL_CALC_3 EQU H'005F'
-SOL_CALC_4 EQU H'0060'
-SOL_CALC_5 EQU H'0061'
-SOL_CALC_6 EQU H'0062'
-SOL_CALC_7 EQU H'0063'
-SOL_CALC_8 EQU H'0064'
-SOL_CALC_9 EQU H'0065'
-SOL_CALC_CNT EQU H'0066'
-
- ;; variables
- ;; page 2 only
-CALC_ACC0 EQU H'0110'
-CALC_ACC1 EQU H'0111'
-CALC_ACC2 EQU H'0112'
-CALC_ACC3 EQU H'0113'
-CALC_TEMP0 EQU H'0114'
-CALC_TEMP1 EQU H'0115'
-CALC_TEMP2 EQU H'0116'
-CALC_TEMP3 EQU H'0117'
-
-
;; all pages
I2C_BYTE EQU H'0070'
I2C_BIT_CNT EQU H'0071'
@@ -157,12 +113,12 @@ STATUS_TEMP EQU H'007F'
;; -------------------------------------
;; Reset Vector
- org 0
+ org 0
goto init
;; -------------------------------------
;; Interrupt Vector
- org 4
+ org 4
;; save context
movwf W_TEMP
swapf STATUS,W
@@ -175,63 +131,21 @@ STATUS_TEMP EQU H'007F'
;; dispatch interrupt sources
btfsc INTCON,INTF
- goto int_dtmf
+ goto int_ctr
btfsc INTCON,RBIF
- goto int_rtc
+ goto int_portchange
btfsc PIR1,RCIF
goto int_uart_rx
- btfsc PIR1,TMR1IF
- goto int_tmr1
goto interrupt_end
-int_dtmf
- movf DTMF_BUF_PTR,w
- movwf FSR
- movf PORTD,w
- andlw b'00001111'
- xorwf DTMF_CS,f
- movwf INDF
- incf DTMF_BUF_PTR,f
- movlw DTMF_BUF_END
- subwf DTMF_BUF_PTR,w
- btfss STATUS,C
- goto int_dtmf_end
- btfsc STATUS,Z
- goto int_dtmf_end
- ;; DTMF command complete
- movlw .1
- movwf TMP
-
-int_dtmf_end
- bcf T1CON,TMR1ON
- clrf TMR1L
- clrf TMR1H
- movlw .6
- movwf DTMF_TIMEOUT
- bsf T1CON,TMR1ON
+int_ctr
bcf INTCON,INTF
goto interrupt_end
-int_tmr1
- decfsz DTMF_TIMEOUT,f
- goto int_tmr1_end
- bsf DTMF_PWRDWN
- bcf T1CON,TMR1ON
- movlw DTMF_BUF
- movwf DTMF_BUF_PTR
- clrf DTMF_CS
- bcf DTMF_PWRDWN
-
-int_tmr1_end
- bcf PIR1,TMR1IF
- goto interrupt_end
-int_rtc
+int_portchange
btfsc RTC_RST
call rtc_init
- goto int_rtc_end
-
-int_rtc_end
bcf INTCON,RBIF
goto interrupt_end
@@ -265,76 +179,61 @@ init
;; bank 3
bsf STATUS,RP0
bsf STATUS,RP1
- movlw b'00000000'
+ movlw b'00010000' ; TX inverted, 8bit Baudrate, no auto baud detect
movwf BAUDCTL
- movlw b'11111111'
- movwf ANSEL
- movlw b'00000111'
- movwf ANSELH
+ movlw b'11101111' ; AN0-AN3,AN5-AN7 as analog
+ movwf ANSEL ; AN4 as digital
+ clrf ANSELH ; AN8-AN13 as digital
;; bank 1
bsf STATUS,RP0
bcf STATUS,RP1
- movlw b'01110000'
- movwf WPUB
- movlw b'11000000'
- movwf IOCB
- movlw b'01000001'
- movwf OPTION_REG
- clrf PSTRCON
- movlw b'00010000'
+ movlw b'00111111' ; Weak Pull-UPS for
+ movwf WPUB ; RTC_RST, DEPLOY, CAPGOOD, POWER_FAIL, BAT_INT, CTR_INT
+ movlw b'00100000' ; Port Change Interrup on
+ movwf IOCB ; RTC_RST
+ movlw b'00000010' ; Weak-Pull-UPs enabled, INT -> falling edge, TMR0 internal clock
+ movwf OPTION_REG ; Prescaler @ TMR0, Prescaler 1:8
+ clrf PSTRCON ; disable pulse steering
+ movlw b'00010000' ; preselct 125 kHz, clock source as configured by configuration word
movwf OSCCON
- movlw b'11111111'
+ movlw b'11001111' ; input: RA0-RA3(analog),RA6-RA7(OSC); output: RA4-RA5(1wire)
movwf TRISA
- movlw b'11111111'
+ movlw b'11111111' ; input: all (interrupts and stats)
movwf TRISB
- movlw b'11111100'
+ ;; movlw b'11010000' ; input: SPI_MISO,RX,TX; output: (MPU|CTR|BAT)_RST,SPI_(CLK|MOSI)
+ movlw b'11111111' ; input: all; output: none
movwf TRISC
- movlw b'10001111'
+ movlw b'00000011' ; input: I2C_(SDA|SCL); output: (CTR,BAT)_SS, (MPU|HEAT)_EN, RADIO_SILENCE, MAIN_OFF
movwf TRISD
- movlw b'11111111'
+ movlw b'11111111' ; intput all (analog)
movwf TRISE
+ movlw b'00010000' ; result left justified, V_REF_low = 0, V_REF_high = AN3
clrf ADCON1
- movlw b'00100100'
+ movlw b'00100100' ; Baudrate = High Speed, async mode, transmit enabled, 8bit
movwf TXSTA
- movlw .12
+ movlw .25 ; Baudrate = 19200 (@ 8MHz)
movwf SPBRG
clrf SPBRGH
- movlw b'00100001'
+ movlw b'00100000' ; enable UART RX Interrupt
movwf PIE1
clrf PIE2
;; bank 0
bcf STATUS,RP0
bcf STATUS,RP1
- movlw b'01000001'
+ movlw b'01000001' ; CLK = FOSC/8, select AN0, ADC on
movwf ADCON0
- movlw b'10010000'
+ movlw b'10010000' ; enable Serial Port, 8bit, enable continues receive, disable address detection
movwf RCSTA
- movlw B'01011000'
+ movlw B'01011000' ; enabble Peripherial, INT and Port Change
movwf INTCON
- clrf PORTB
-
- bcf DTMF_PWRDWN
- movlw DTMF_BUF
- movwf DTMF_BUF_PTR
- clrf DTMF_CS
- clrf TMR1L
- clrf TMR1H
- movlw b'00110000'
- movwf T1CON
-
- bcf TTX_SCL
- bcf TTX_SDA
- nop
- bcf TTX_RESET ;reset TTX
+ call i2c_init
clrf TMR0
-
bsf INTCON,GIE
clrf TMP
- bsf TTX_RESET
goto main
;; -------------------------------------
@@ -360,8 +259,8 @@ wait_loop
uart_rx_byte
btfsc RCSTA,FERR
goto uart_rx_fe
- movf RCREG,w ; TODO: move to input string
- movwf TMP
+ movf RCREG,w ; TODO: check parity
+ movwf TMP ; TODO: move to input string
return
uart_rx_fe
@@ -369,10 +268,7 @@ uart_rx_fe
return
;; -------------------------------------
- include "math.inc"
-
- ;; -------------------------------------
- include "ttx.inc"
+ ;; include "math.inc"
;; -------------------------------------
include "i2c.inc"
@@ -381,13 +277,13 @@ uart_rx_fe
include "rtc.inc"
;; -------------------------------------
- include "temp.inc"
+ ;; include "temp.inc"
;; -------------------------------------
- include "adc.inc"
+ ;; include "adc.inc"
;; -------------------------------------
- include "solar.inc"
+ ;; include "solar.inc"
;; -------------------------------------
;; MAINLOOP
@@ -395,65 +291,6 @@ main
; sleep
; nop
;; --------------------
- ;; TTX Test
- ;; movf TMP,w
- ;; btfsc STATUS,Z
- ;; goto main
-
- ;; movlw BUF
- ;; movwf FSR
- ;; movlw 0x50
- ;; call ttx_send
-
- ;; clrf TMP
- ;; goto main
-
-;; xorlw .0
-;; btfss STATUS,Z
-;; goto main_error
-
-;; movlw 'O'
-;; movwf TXREG
-;; movlw .1
-;; call wait_ms
-;; movlw 'K'
-;; movwf TXREG
-;; movlw .1
-;; call wait_ms
-;; movlw '\r'
-;; movwf TXREG
-;; movlw .1
-;; call wait_ms
-;; movlw '\n'
-;; movwf TXREG
-;; movlw .1
-;; call wait_ms
-;; goto main
-
-;; main_error
-;; movlw 'E'
-;; movwf TXREG
-;; movlw .1
-;; call wait_ms
-;; movlw 'R'
-;; movwf TXREG
-;; movlw .1
-;; call wait_ms
-;; movlw 'R'
-;; movwf TXREG
-;; movlw .1
-;; call wait_ms
-;; movlw '\r'
-;; movwf TXREG
-;; movlw .1
-;; call wait_ms
-;; movlw '\n'
-;; movwf TXREG
-;; movlw .1
-;; call wait_ms
-;; goto main
-
- ;; --------------------
;; ADC Test
;; call adc_get_solar
;; call solar_calc_power
@@ -526,61 +363,60 @@ main
;; goto main
;; --------------------
- ;; DTMF Test program
+ ;; RTC Test program
movf TMP,f
btfsc STATUS,Z
goto main
- movlw BUF
- movwf FSR
- swapf DTMF_BUF+3,w
- andlw b'11110000'
- call ttx_send
+ call rtc_get_time
- movf DTMF_BUF,w
- call dtmfSign
+ swapf RTC_TOD3,w
+ call digit
movwf TXREG
movlw .1
call wait_ms
- movf DTMF_BUF+1,w
- call dtmfSign
+ movf RTC_TOD3,w
+ call digit
movwf TXREG
movlw .1
call wait_ms
- movf DTMF_BUF+2,w
- call dtmfSign
+ swapf RTC_TOD2,w
+ call digit
movwf TXREG
movlw .1
call wait_ms
- movf DTMF_BUF+3,w
- call dtmfSign
+ movf RTC_TOD2,w
+ call digit
movwf TXREG
movlw .1
call wait_ms
- movf DTMF_BUF+4,w
- call dtmfSign
+ swapf RTC_TOD1,w
+ call digit
movwf TXREG
movlw .1
call wait_ms
- movlw ' '
+ movf RTC_TOD1,w
+ call digit
movwf TXREG
movlw .1
call wait_ms
- movf DTMF_CS,f
- btfsc STATUS,Z
- movlw '!'
- btfss STATUS,Z
- movlw 'x'
+ swapf RTC_TOD0,w
+ call digit
movwf TXREG
movlw .1
call wait_ms
+ movf RTC_TOD0,w
+ call digit
+ movwf TXREG
+ movlw .1
+ call wait_ms
movlw '\r'
movwf TXREG
@@ -588,92 +424,11 @@ main
call wait_ms
movlw '\n'
movwf TXREG
- movlw .1
- call wait_ms
-
clrf TMP
- movlw DTMF_BUF
- movwf DTMF_BUF_PTR
- clrf DTMF_CS
-
goto main
;; --------------------
- ;; RTC Test program
- ;; movf TMP,f
- ;; btfsc STATUS,Z
- ;; goto main
-
- ;; call rtc_get_time
-
- ;; swapf RTC_TOD3,w
- ;; andlw b'00001111'
- ;; call digit
- ;; movwf TXREG
- ;; movlw .1
- ;; call wait_ms
-
- ;; movf RTC_TOD3,w
- ;; andlw b'00001111'
- ;; call digit
- ;; movwf TXREG
- ;; movlw .1
- ;; call wait_ms
-
- ;; swapf RTC_TOD2,w
- ;; andlw b'00001111'
- ;; call digit
- ;; movwf TXREG
- ;; movlw .1
- ;; call wait_ms
-
- ;; movf RTC_TOD2,w
- ;; andlw b'00001111'
- ;; call digit
- ;; movwf TXREG
- ;; movlw .1
- ;; call wait_ms
-
- ;; swapf RTC_TOD1,w
- ;; andlw b'00001111'
- ;; call digit
- ;; movwf TXREG
- ;; movlw .1
- ;; call wait_ms
-
- ;; movf RTC_TOD1,w
- ;; andlw b'00001111'
- ;; call digit
- ;; movwf TXREG
- ;; movlw .1
- ;; call wait_ms
-
- ;; swapf RTC_TOD0,w
- ;; andlw b'00001111'
- ;; call digit
- ;; movwf TXREG
- ;; movlw .1
- ;; call wait_ms
-
- ;; movf RTC_TOD0,w
- ;; andlw b'00001111'
- ;; call digit
- ;; movwf TXREG
- ;; movlw .1
- ;; call wait_ms
-
- ;; movlw '\r'
- ;; movwf TXREG
- ;; movlw .1
- ;; call wait_ms
- ;; movlw '\n'
- ;; movwf TXREG
-
- ;; clrf TMP
- ;; goto main
-
- ;; --------------------
;; Temp Test program
;; movf TMP,f
;; btfsc STATUS,Z
@@ -681,14 +436,12 @@ main
;; call temp_read_value
;; swapf OWIRE_BYTE,w
- ;; andlw b'00001111'
;; call digit
;; movwf TXREG
;; movlw .1
;; call wait_ms
;; movf OWIRE_BYTE,w
- ;; andlw b'00001111'
;; call digit
;; movwf TXREG
;; movlw .1