diff options
author | Christian Pointner <equinox@mur.at> | 2012-03-04 21:14:42 +0000 |
---|---|---|
committer | Christian Pointner <equinox@mur.at> | 2012-03-04 21:14:42 +0000 |
commit | 5a3bb8920b733baf572aa89d4c63c88003e26763 (patch) | |
tree | 6385624f99d290d6dde174911df72708a4a1e2e2 /software/ctr/i2c.inc | |
parent | added datasheet for PMGD370XN (diff) |
moved ttx_crx to ctr
git-svn-id: https://svn.spreadspace.org/mur.sat@272 7de4ea59-55d0-425e-a1af-a3118ea81d4c
Diffstat (limited to 'software/ctr/i2c.inc')
-rw-r--r-- | software/ctr/i2c.inc | 148 |
1 files changed, 148 insertions, 0 deletions
diff --git a/software/ctr/i2c.inc b/software/ctr/i2c.inc new file mode 100644 index 0000000..52c90e3 --- /dev/null +++ b/software/ctr/i2c.inc @@ -0,0 +1,148 @@ + ;; + ;; mur.sat + ;; + ;; 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@mur.at> + ;; + ;; This file is part of mur.sat. + ;; + ;; mur.sat 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, + ;; 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/>. + ;; + + ;; ------------------------------------- +i2c_start + movlb .1 + bcf TRISB,I2C_SDA + nop + bcf TRISB,I2C_SCL + movlb .0 + return + + ;; ------------------ +i2c_restart + movlb .1 + bsf TRISB,I2C_SDA + nop + bsf TRISB,I2C_SCL + nop + nop + nop + bcf TRISB,I2C_SDA + nop + bcf TRISB,I2C_SCL + movlb .0 + return + + ;; ------------------ +i2c_stop + movlb .1 + bsf TRISB,I2C_SCL + nop + bsf TRISB,I2C_SDA + movlb .0 + return + + ;; ------------------ +i2c_send_byte + movwf I2C_BYTE + movlw .8 + movwf I2C_BIT_CNT + movlb .1 +i2c_send_byte_next + btfss I2C_BYTE,7 + bcf TRISB,I2C_SDA + btfsc I2C_BYTE,7 + bsf TRISB,I2C_SDA + nop + bsf TRISB,I2C_SCL + nop + nop + bcf TRISB,I2C_SCL + rlf I2C_BYTE,f + decfsz I2C_BIT_CNT,f + goto i2c_send_byte_next + + nop + nop + bsf TRISB,I2C_SDA + bsf TRISB,I2C_SCL + movlb .0 + movf PORTB,w + movlb .1 + bcf TRISB,I2C_SCL + bcf TRISB,I2C_SDA + movlb .0 + andlw b'00010000' + movwf I2C_BYTE + swapf I2C_BYTE,f + return + + ;; ------------------ +i2c_recv_byte + clrf I2C_BYTE + movlw .8 + movwf I2C_BIT_CNT + movlb .1 + bsf TRISB,I2C_SDA +i2c_recv_byte_loop + bsf TRISB,I2C_SCL + movlb .0 + btfsc PORTB,I2C_SDA + bsf I2C_BYTE,0 + movlb .1 + bcf TRISB,I2C_SCL + decfsz I2C_BIT_CNT,f + goto i2c_recv_byte_next + + bcf TRISB,I2C_SDA + movlb .0 + return + +i2c_recv_byte_next + bcf STATUS,C + rlf I2C_BYTE,f + goto i2c_recv_byte_loop + + ;; ------------------ +i2c_ack + movlb .1 + bcf TRISB,I2C_SDA + bsf TRISB,I2C_SCL + nop + nop + bcf TRISB,I2C_SCL + movlb .0 + return + + ;; ------------------ +i2c_nack + movlb .1 + bsf TRISB,I2C_SDA + bsf TRISB,I2C_SCL + nop + nop + bcf TRISB,I2C_SCL + bcf TRISB,I2C_SDA + movlb .0 + return + + ;; ------------------------------------- |