i2c

A collection of i2c related words



\
\ I2C EEPROM driver for BLOCK wordset
\
\ call i2c.ee.blockinit to activate the driver
\ for the BLOCK words. 

#require blocks.frt
#require bounds.frt
#require i2c-eeprom.frt
#require ms.frt

\ select a eeprom module. 
\ the pages differ in size. 
\ do not overrun them
#16 constant 24c08
#16 constant 24c16
#32 constant 24c32
#32 constant 24c64
#64 constant 24c128
#64 constant 24c256
#128 constant 24c512
#256 constant 24c1024

\ runtime configurable parameters, taken from or
\ calculated in i2c.ee.blockinit. Never change them directly
variable i2c.ee.hwid
variable i2c.ee.pagesize
variable i2c.ee.pages/block

: i2c.ee.read-page ( addr len page hwid -- )
  dup i2c.begin
    swap i2c.ee.pagesize @ * i2c.ee.send-addr
    i2c.restart \ repeated start
    i2c.rd i2c.tx 
    1- bounds over >r ?do i2c.rx i c! loop
    i2c.rxn r> c! \ last byte
  i2c.end
;

: i2c.ee.load-buffer ( a-addr u -- ) \ BLOCK API 
   1- i2c.ee.pages/block @ * \ start address
   i2c.ee.pages/block @ bounds ?do
     dup i2c.ee.pagesize @ i i2c.ee.hwid @ i2c.ee.read-page
     i2c.ee.pagesize @ +
   loop drop
;

: i2c.ee.write-page ( addr len page hwid -- )
  i2c.begin
    i2c.ee.pagesize @ * i2c.ee.send-addr
    bounds ?do i c@ i2c.tx loop
  i2c.end 5 ms \ make sure the eeprom gets ready again
;

: i2c.ee.save-buffer ( a-addr u -- ) \ BLOCK API 
   1- i2c.ee.pages/block @ * \ start address
   i2c.ee.pages/block @ bounds ?do
     dup i2c.ee.pagesize @ i i2c.ee.hwid @ i2c.ee.write-page
     i2c.ee.pagesize @ +
   loop drop
;

\ adjust the page size and update the #pages per block buffer
: i2c.ee.setpagesize ( 24cxx -- )
  blocksize over / i2c.ee.pages/block !
  i2c.ee.pagesize !
;

\ for turnkey
\ does not initialize TWI/I2C interface! (i2c.init.default)
: i2c.ee.blockinit ( pagesize hwid -- )
   block:init
   ['] i2c.ee.load-buffer is load-buffer
   ['] i2c.ee.save-buffer is save-buffer
   i2c.ee.hwid !
   i2c.ee.setpagesize
;

by mtrute

avatar of mtrute

Versions

1.0.3, 1.0.2, 1.0.1, 1.0.0

Download current as zip

Tags

i2chardware, i2c, hardware, mcu

Dependencies

None

Dependents

None