24LC0X.c
102 lines
| 3.1 KiB
| text/x-c
|
CLexer
r11 | /*------------------------------------------------------------------------------ | |||
-- This file is a part of the libuc, microcontroler library | ||||
-- Copyright (C) 2011, Alexis Jeandet | ||||
-- | ||||
-- This program 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 | ||||
-- (at your option) any later version. | ||||
-- | ||||
-- This program 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 this program; if not, write to the Free Software | ||||
-- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||||
------------------------------------------------------------------------------- | ||||
-- Author : Alexis Jeandet | ||||
-- Mail : alexis.jeandet@gmail.com | ||||
-------------------------------------------------------------------------------*/ | ||||
#include "24LC0X.h" | ||||
#include "iic.h" | ||||
#include "core.h" | ||||
/* | ||||
struct 24LC0X_str | ||||
{ | ||||
r12 | i2cDev iicdev; | |||
r11 | unsigned char devAddress; | |||
unsigned char size; | ||||
}; | ||||
*/ | ||||
r12 | void eeprom24lc0xopen(eeprom24lc0xDev* dev,i2cDev iicdev,unsigned char A0_A1_A2_val,unsigned int size) | |||
r11 | { | |||
dev->iicdev = iicdev; | ||||
dev->devAddress = 0x50 | (A0_A1_A2_val & 0x7); | ||||
if(size == 2048) dev->size = 2; | ||||
if(size == 1024) dev->size = 1; | ||||
} | ||||
void eeprom24lc0xpagewrite(eeprom24lc0xDev dev,unsigned char address,unsigned char* page) | ||||
{ | ||||
int cmdcnt=1,datacnt=8; | ||||
i2cwrite2(dev.iicdev,dev.devAddress,&address,&cmdcnt,page,&datacnt); | ||||
} | ||||
void eeprom24lc0xpageread(eeprom24lc0xDev dev,unsigned char address,unsigned char* page) | ||||
{ | ||||
int cmdcnt=1,datacnt=8; | ||||
i2cwrite(dev.iicdev,dev.devAddress,&address,&cmdcnt); | ||||
i2cread(dev.iicdev,dev.devAddress,page,&datacnt); | ||||
} | ||||
void eeprom24lc0xbytewrite(eeprom24lc0xDev dev,unsigned char address,unsigned char data) | ||||
{ | ||||
int cmdcnt=1,datacnt=1; | ||||
i2cwrite2(dev.iicdev,dev.devAddress,&address,&cmdcnt,&data,&datacnt); | ||||
} | ||||
unsigned char eeprom24lc0xbyteread(eeprom24lc0xDev dev,unsigned char address) | ||||
{ | ||||
int cmdcnt=1,datacnt=1; | ||||
unsigned char data = 0; | ||||
i2cwrite(dev.iicdev,dev.devAddress,&address,&cmdcnt); | ||||
i2cread(dev.iicdev,dev.devAddress,&data,&datacnt); | ||||
return data; | ||||
} | ||||
void eeprom24lc0xreadn(eeprom24lc0xDev dev,unsigned char address,unsigned char* data, unsigned int count) | ||||
{ | ||||
int cmdcnt=1,datacnt=count; | ||||
i2cwrite(dev.iicdev,dev.devAddress,&address,&cmdcnt); | ||||
i2cread(dev.iicdev,dev.devAddress,data,&datacnt); | ||||
} | ||||
void eeprom24lc0xwriten(eeprom24lc0xDev dev,unsigned char address,unsigned char* data, unsigned int count) | ||||
{ | ||||
int cmdcnt=1,datacnt=8; | ||||
while(count >8) | ||||
{ | ||||
cmdcnt=1;datacnt=8; | ||||
while(i2noerr!=i2cwrite2(dev.iicdev,dev.devAddress,&address,&cmdcnt,data,&datacnt)){cmdcnt=1;datacnt=8;} | ||||
count-=8; | ||||
address+=8; | ||||
data+=8; | ||||
} | ||||
cmdcnt=1;datacnt=count; | ||||
while(i2noerr!=i2cwrite2(dev.iicdev,dev.devAddress,&address,&cmdcnt,data,&datacnt)){cmdcnt=1;datacnt=count;} | ||||
} | ||||