OpenCores
URL https://opencores.org/ocsvn/rf6809/rf6809/trunk

Subversion Repositories rf6809

[/] [rf6809/] [trunk/] [software/] [boot/] [rtc_driver.asm] - Rev 13

Compare with Previous | Blame | View Log

; ============================================================================
;        __
;   \\__/ o\    (C) 2022  Robert Finch, Waterloo
;    \  __ /    All rights reserved.
;     \/_//     robfinch<remove>@opencores.org
;       ||
;  
;
; BSD 3-Clause License
; Redistribution and use in source and binary forms, with or without
; modification, are permitted provided that the following conditions are met:
;
; 1. Redistributions of source code must retain the above copyright notice, this
;    list of conditions and the following disclaimer.
;
; 2. Redistributions in binary form must reproduce the above copyright notice,
;    this list of conditions and the following disclaimer in the documentation
;    and/or other materials provided with the distribution.
;
; 3. Neither the name of the copyright holder nor the names of its
;    contributors may be used to endorse or promote products derived from
;    this software without specific prior written permission.
;
; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
; DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
; FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
; SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
; CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
; OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
; OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
;
; ============================================================================

;===============================================================================
; Realtime clock routines
;===============================================================================

; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; Read the real-time-clock chip.
;
; The entire contents of the clock registers and sram are read into a buffer
; in one-shot rather than reading the registers individually.
;
; Parameters: none
; Returns: d = 0 on success, otherwise non-zero
; Modifies: d and RTCBuf
; Stack space: 6 words
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

rtc_read:
        ldx                     #RTC
        ldy                     #RTCBuf
        ldb                     #$80
        stb                     I2C_CTRL,x              ; enable I2C
        ldd                     #$900DE                         ; read address, write op, STA + wr bit
        bsr                     i2c_wr_cmd
        bitb            #$80
        bne                     rtc_rxerr
        ldd                     #$10000                         ; address zero, wr bit
        bsr                     i2c_wr_cmd
        bitb            #$80
        bne                     rtc_rxerr
        ldd                     #$900DF                         ; read address, read op, STA + wr bit
        bsr                     i2c_wr_cmd
        bitb            #$80
        bne                     rtc_rxerr
        
        clrb
rtcr0001:
        lda                     #$20
        sta                     I2C_CMD,x                       ; rd bit
        bsr                     i2c_wait_tip
        bsr                     i2c_wait_rx_nack
        lda                     I2C_STAT,x
        bita            #$80
        bne                     rtc_rxerr
        lda                     I2C_RXR,x
        sta                     b,y
        incb
        cmpb            #$5F
        blo                     rtcr0001
        lda                     #$68
        sta                     I2C_CMD,x                       ; STO, rd bit + nack
        bsr                     i2c_wait_tip
        lda                     I2C_STAT,x
        bita            #$80
        bne                     rtc_rxerr
        lda                     I2C_RXR,x
        sta                     b,y
        clrd                                                                    ; return 0
rtc_rxerr:
        clr                     I2C_CTRL,x      ; disable I2C and return status
        clra
        rts

; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; Write the real-time-clock chip.
;
; The entire contents of the clock registers and sram are written from a 
; buffer (RTCBuf) in one-shot rather than writing the registers individually.
;
; Parameters: none
; Returns: r1 = 0 on success, otherwise non-zero
; Modifies: r1 and RTCBuf
; Stack space: 6 words
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

rtc_write:
        ldx             #RTC
        ldy             #RTCBuf
        
        ldb             #$80
        stb             I2C_CTRL,x              ; enable I2C
        ldd             #$900DE                         ; read address, write op, STA + wr bit
        bsr             i2c_wr_cmd
        bitb    #$80
        bne             rtc_rxerr
        ldd             #$10000                         ; address zero, wr bit
        bsr             i2c_wr_cmd
        bitb    #$80
        bne             rtc_rxerr

        ldb             #0
rtcw0001:
        pshs    b
        ldb             b,y
        lda             #$10
        bsr             i2c_wr_cmd
        bitb    #$80
        puls    b
        bne             rtc_rxerr
        incb
        cmpb    #$5F
        blo             rtcw0001
        ldb             b,y
        lda             #$50                                    ; STO, wr bit
        bsr             i2c_wr_cmd
        bitb    #$80
        bne             rtc_rxerr
        clrd                                                            ; return 0
        clr             I2C_CTRL,x              ; disable I2C and return status
        rts

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.