summaryrefslogtreecommitdiff
path: root/software
diff options
context:
space:
mode:
authorChristian Pointner <equinox@mur.at>2012-02-26 16:33:07 +0000
committerChristian Pointner <equinox@mur.at>2012-02-26 16:33:07 +0000
commit54fa4e490ff9cec02f07975deda2ddf93b667d84 (patch)
tree20d25e076cec9b0296895724388349eb8e958554 /software
parentsplitted code info include files (diff)
added test code for i2c (temporary RTC)
git-svn-id: https://svn.spreadspace.org/mur.sat@254 7de4ea59-55d0-425e-a1af-a3118ea81d4c
Diffstat (limited to 'software')
-rw-r--r--software/ttx_crx/ttx_crx.asm190
1 files changed, 184 insertions, 6 deletions
diff --git a/software/ttx_crx/ttx_crx.asm b/software/ttx_crx/ttx_crx.asm
index 066379f..bdff971 100644
--- a/software/ttx_crx/ttx_crx.asm
+++ b/software/ttx_crx/ttx_crx.asm
@@ -80,6 +80,9 @@ PENTLECNT EQU H'0027'
ACK_DATA EQU H'0028'
TMP1 EQU H'0029'
TMP2 EQU H'002A'
+
+BUF EQU H'0040'
+BUF_END EQU H'004F'
;; all pages
BEACON_INTL EQU H'0070'
@@ -93,6 +96,7 @@ TUNE EQU H'0075'
I2C_BYTE EQU H'0077'
I2C_BIT_CNT EQU H'0078'
+I2C_BYTE_CNT EQU H'0079'
NVSTATE EQU H'007A'
BEACONCNTH EQU H'007B'
@@ -135,10 +139,176 @@ interrupt_end
;; -------------------------------------
include "i2c.inc"
+
+ ;;; TODO remove this
+ ;; -------------------------------------
+ ;; -------------------------------------
+ ;; -------------------------------------
+ ;; -------------------------------------
+ ;; constants
+RTC_ADDR_W EQU b'11010000'
+RTC_ADDR_R EQU b'11010001'
+RTC_REG_SEC EQU H'00'
+RTC_REG_MIN EQU H'01'
+RTC_REG_HOUR EQU H'02'
+RTC_REG_DOW EQU H'03'
+RTC_REG_DOM EQU H'04'
+RTC_REG_MON EQU H'05'
+RTC_REG_YEAR EQU H'06'
+RTC_REG_A1S EQU H'07'
+RTC_REG_A1M EQU H'08'
+RTC_REG_A1H EQU H'09'
+RTC_REG_A1D EQU H'0A'
+RTC_REG_A2M EQU H'0B'
+RTC_REG_A2H EQU H'0C'
+RTC_REG_A2D EQU H'0D'
+RTC_REG_CON EQU H'0E'
+RTC_REG_STAT EQU H'0F'
+
+ ;; -------------------------------------
+rtc_init
+ movlb .1
+ movlw OSC_HIGH
+ movwf OSCCON
+ movlb .0
+
+ call i2c_start
+
+ movlw RTC_ADDR_W
+ call i2c_send_byte
+ btfsc I2C_BYTE,0
+ goto rtc_error_ack
+
+ movlw RTC_REG_STAT
+ call i2c_send_byte
+ btfsc I2C_BYTE,0
+ goto rtc_error_ack
+
+ call i2c_restart
+
+ movlw RTC_ADDR_R
+ call i2c_send_byte
+ btfsc I2C_BYTE,0
+ goto rtc_error_ack
+
+ call i2c_recv_byte
+ call i2c_nack
+
+ btfsc I2C_BYTE,7
+ goto rtc_init_after_clock_fail
+
+ call i2c_stop
+ return
+
+rtc_init_after_clock_fail
+ call i2c_restart
+
+ movlw RTC_ADDR_W
+ call i2c_send_byte
+ btfsc I2C_BYTE,0
+ goto rtc_error_ack
+
+ movlw RTC_REG_SEC
+ call i2c_send_byte
+ btfsc I2C_BYTE,0
+ goto rtc_error_ack
+
+ movlw .16
+ movwf I2C_BYTE_CNT
+rtc_init_clear
+ clrw
+ call i2c_send_byte
+ btfsc I2C_BYTE,0
+ goto rtc_error_ack
+ decfsz I2C_BYTE_CNT,f
+ goto rtc_init_clear
+
+ call i2c_stop
+
+ movlb .1
+ movlw OSC_LOW
+ movwf OSCCON
+ movlb .0
+
+ return
+
+ ;; ---------------
+rtc_get_time
+ movlb .1
+ movlw OSC_HIGH
+ movwf OSCCON
+ movlb .0
+
+
+ call i2c_start
+
+ movlw RTC_ADDR_W
+ call i2c_send_byte
+ btfsc I2C_BYTE,0
+ goto rtc_error_ack
+
+ movlw RTC_REG_SEC
+ call i2c_send_byte
+ btfsc I2C_BYTE,0
+ goto rtc_error_ack
+
+ call i2c_restart
+
+ movlw RTC_ADDR_R
+ call i2c_send_byte
+ btfsc I2C_BYTE,0
+ goto rtc_error_ack
+
+ movlw .7
+ movwf I2C_BYTE_CNT
+rtc_get_time_loop
+ call i2c_recv_byte
+ movf I2C_BYTE,w
+ movwf INDF1
+ decfsz I2C_BYTE_CNT,f
+ goto rtc_get_time_next
+
+ call i2c_nack
+ call i2c_stop
+
+ movlb .1
+ movlw OSC_LOW
+ movwf OSCCON
+ movlb .0
+ return
+
+rtc_get_time_next
+ incf FSR1L,f
+ call i2c_ack
+ goto rtc_get_time_loop
+
+ ;; ---------------
+rtc_error_ack
+ call i2c_stop
+ ;; TODO: add error handling
+
+ movlb .1
+ movlw OSC_LOW
+ movwf OSCCON
+ movlb .0
+ return
+
+ ;; -------------------------------------
+ ;; -------------------------------------
+ ;; -------------------------------------
+ ;; -------------------------------------
+ ;; -------------------------------------
+
+
;; -------------------------------------
;; INIT
init
;; BANK 3
+ movlb .4
+ clrf WPUA
+ clrf WPUB
+
+ ;; BANK 3
movlb .3
clrf ANSELA
clrf ANSELB
@@ -148,6 +318,8 @@ init
movlw b'01100000'
movwf APFCON0
clrf APFCON1
+ bcf LATB,I2C_SDA
+ bcf LATB,I2C_SCL
;; BANK 1
movlb .1
@@ -157,7 +329,7 @@ init
movwf TRISB
movlw OSC_LOW
movwf OSCCON
- movlw b'01000011'
+ movlw b'11000011'
movwf OPTION_REG
;; BANK 0
@@ -168,7 +340,7 @@ init
bcf PORTA,CW_OUT
bcf PORTA,CW_ENABLE
-
+
clrf NVSTATE ; TODO: read State from EEPROM
movlw .42
movwf BEACONCNTL ; TODO: read Beaconcnt from EEPROM
@@ -191,11 +363,17 @@ init
;; -------------------------------------
;; MAINLOOP
main
- clrw
- call dottime
-
- call send_beacon
+ movlw BUF
+ movwf FSR1L
+ clrf FSR1H
+ call rtc_get_time
+
+ ;; clrw
+ ;; call dottime
+ ;; movlw b'00001100'
+ ;; xorwf PORTA,f
+
goto main
;; -------------------------------------