From 54fa4e490ff9cec02f07975deda2ddf93b667d84 Mon Sep 17 00:00:00 2001 From: Christian Pointner Date: Sun, 26 Feb 2012 16:33:07 +0000 Subject: added test code for i2c (temporary RTC) git-svn-id: https://svn.spreadspace.org/mur.sat@254 7de4ea59-55d0-425e-a1af-a3118ea81d4c --- software/ttx_crx/ttx_crx.asm | 190 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 184 insertions(+), 6 deletions(-) (limited to 'software') 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,9 +139,175 @@ 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 @@ -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 ;; ------------------------------------- -- cgit v1.2.3