CLUZE Remy -EXT пре 6 година
родитељ
комит
28c405bf01
5 измењених фајлова са 93 додато и 40 уклоњено
  1. 20 17
      Include/Eeprom.h
  2. 13 3
      Include/RTC.h
  3. 37 19
      Source/Eeprom.c
  4. 22 1
      Source/RTC.c
  5. 1 0
      Source/lcd.c

+ 20 - 17
Include/Eeprom.h

@@ -10,15 +10,6 @@
  *
  *
  *
- * Penser a ajouter les fonction de lecture ecriture dans le fichier i2c.c "générer"
- *
-void readEeprom(int add, uint8_t *tab, int len){
-
-}
-
-void writeEeprom(int add, uint8_t *tab, int len){
-
-}
  *
  */
 
@@ -26,24 +17,36 @@ void writeEeprom(int add, uint8_t *tab, int len){
 #define EEPROM_H_
 
 #include <stdint.h>
-
-extern void readEeprom(int add, uint8_t *tab, int len);
-extern void writeEeprom(int add, uint8_t *tab, int len);
+#include "i2c.h"
 
 #define EepromADD 0XA0
 
+typedef struct{
+	I2C_HandleTypeDef I2C;
+	GPIO_TypeDef WC_PORT;
+	uint16_t WC_PIN;
+}EEprom_HandleTypeDef;
+
+EEprom_HandleTypeDef EEprom;
+
+/****Private fonction */
+void readEeprom(uint8_t *tab, int len);
+void writeEeprom(uint8_t *tab, int len);
+
 uint16_t readPointerEcriture();
 void writePointerEcriture(uint16_t p);
 
-
 uint16_t readPointerLecture();
 void writePointerLecture(uint16_t p);
 
-void writeData(uint8_t *tab, uint8_t size);
+/** Public Fonction*/
+
+void initEprom(I2C_HandleTypeDef typ,GPIO_TypeDef port, uint16_t pin);
+
+void writeData(uint16_t add, uint8_t *tab, uint8_t size);
 
-void readData(uint8_t *tab, uint8_t size);
+void readData(uint16_t add, uint8_t *tab, uint8_t size);
 
-//fonction pour tester le hard de l'Eeprom
-void testEeprom();
+void testEeprom();//fonction pour tester le hard de l'Eeprom
 
 #endif /* EEPROM_H_ */

+ 13 - 3
Include/RTC.h

@@ -32,6 +32,7 @@ void writeRTC(uint8_t add, uint8_t *tab, int len){
 #define RTC_H
 
 #include <stdint.h>
+#include "i2c.h"
 
 #define RTC_ADD 0XD0
 
@@ -64,7 +65,7 @@ typedef struct {
 	uint8_t jour;
 	uint8_t joursemaine;
 	uint8_t mois;
-	uint8_t annee;
+	uint16_t annee;
 
 }Date;
 
@@ -73,8 +74,17 @@ typedef struct {
 	uint8_t heure;
 }Heure;
 
-extern void readRTC(uint8_t add, uint8_t *tab, int len);
-extern void writeRTC(uint8_t add, uint8_t *tab, int len);
+
+I2C_HandleTypeDef I2C_RTC;
+
+/****Private fonction */
+void readRTC(uint8_t reg, uint8_t *tab, int len);
+
+void writeRTC(uint8_t reg, uint8_t *tab, int len);
+
+/** Public Fonction*/
+void initRTC(I2C_HandleTypeDef typ);
+
 void readHeure(Heure *heure);
 
 void readDate(Date *date);

+ 37 - 19
Source/Eeprom.c

@@ -1,13 +1,25 @@
 #include "Eeprom.h"
 
+/****Private fonction */
 
+void readEeprom(uint8_t *tab, int len){
+	//TODO (EEPROM IMPORTANT) On donne pas d'adresse a laqeuel on veux lire.
+	HAL_I2C_Master_Receive(&EEprom.I2C,EepromADD,tab,len,1000);
+}
+
+void writeEeprom(uint8_t *tab, int len){
+	//TODO (EEPROM IMPORTANT) On donne pas d'adresse a laqeuel on veux ecrire
+	HAL_GPIO_WritePin(&EEprom.WC_PORT,EEprom.WC_PIN,0);
+	HAL_I2C_Master_Transmit(&EEprom.I2C,EepromADD,tab,len,1000);
+	HAL_GPIO_WritePin(&EEprom.WC_PORT,EEprom.WC_PIN,1);
+}
 
 uint16_t readPointerEcriture(){
 	uint8_t t[2];
 	t[0]=0x00;
 	t[1]=0x00;
-	writeEeprom(EepromADD,t,2);
-	readEeprom(EepromADD,t,2);
+	writeEeprom(t,2);
+	readEeprom(t,2);
 	uint16_t res = t[0]<<8 & t[1];
 	return res;
 }
@@ -18,15 +30,15 @@ void writePointerEcriture(uint16_t p){
 	t[1]=0x00;
 	t[2]=(uint8_t)p>>8;
 	t[3]=(uint8_t)p>>8;
-	writeEeprom(EepromADD,t,4);
+	writeEeprom(t,4);
 }
 
 uint16_t readPointerLecture(){
 	uint8_t t[2];
 	t[0]=0x00;
 	t[1]=0x01;
-	writeEeprom(EepromADD,t,2);
-	readEeprom(EepromADD,t,2);
+	writeEeprom(t,2);
+	readEeprom(t,2);
 	uint16_t res = t[0]<<8 & t[1];
 	return res;
 }
@@ -37,27 +49,33 @@ void writePointerLecture(uint16_t p){
 	t[1]=0x01;
 	t[2]=(uint8_t)p>>8;
 	t[3]=(uint8_t)p>>8;
-	writeEeprom(EepromADD,t,4);
+	writeEeprom(t,4);
 }
 
+/** Public Fonction*/
+
+void initEprom(I2C_HandleTypeDef typ,GPIO_TypeDef port, uint16_t pin){
+	EEprom.I2C = typ;
+	EEprom.WC_PORT = port;
+	EEprom.WC_PIN = pin;
+}
 
-//ne fonctionne pas a refaire on eccrit même si on arrivent a la fin
-void writeDataFifo(uint8_t *tab, uint8_t size){
+
+void writeData(uint16_t add, uint8_t *tab, uint8_t size){
 	uint8_t t[size+2];
-	uint16_t pr = readPointerEcriture();
-	t[0]=(uint8_t)pr>>8;
-	t[1]=(uint8_t)pr;
-	for (int i= 0; i<size;i++)
+	t[0]=add>>8;
+	t[1]=add;
+	for(int i=0;i<size;i++)
 		t[i+2]=tab[i];
-	writeEeprom(EepromADD,t,size+2);
-
-	pr=pr+(size/2);//
-	if (pr>0x800)
-	writePointerEcriture(pr);
+	writeEeprom(t,size+2);
 }
 
-void readDataFifo(uint8_t *tab, uint8_t size){
-
+void readData(uint16_t add, uint8_t *tab, uint8_t size){
+	uint8_t t[size+2];
+	t[0]=add>>8;
+	t[1]=add;
+	writeEeprom(t,2);
+	readEeprom(tab,size);
 }
 
 //fonction pour tester le hard de l'Eeprom

+ 22 - 1
Source/RTC.c

@@ -7,6 +7,26 @@
 
 #include "RTC.h"
 
+/** Private Fonction*/
+void readRTC(uint8_t reg, uint8_t *tab, int len){
+	HAL_I2C_Master_Transmit(&I2C_RTC,RTC_ADD,&reg,1,1000);
+	HAL_I2C_Master_Receive(&I2C_RTC,RTC_ADD,tab,len,1000);
+}
+
+void writeRTC(uint8_t reg, uint8_t *tab, int len){
+	uint8_t t[len+1];
+	t[0]=reg;
+	for(int i=0;i<len;i++)
+		t[i+1]=tab[i];
+	HAL_I2C_Master_Transmit(&I2C_RTC,RTC_ADD,t,len+1,1000);
+}
+
+/** Public Fonction*/
+
+void initRTC(I2C_HandleTypeDef typ){
+	I2C_RTC = typ;
+}
+
 void readHeure(Heure *heure){
 	uint8_t tab[2];
 	readRTC(MINUTES,tab,2);
@@ -14,6 +34,7 @@ void readHeure(Heure *heure){
 	heure->heure = (((tab[1]&0X30)>>4)*10)+(tab[1]&0X0F);
 }
 
+/** Public Fonction*/
 void readDate(Date *date){
 	uint8_t tab[7];
 	readRTC(SECOND,tab,7);
@@ -25,7 +46,7 @@ void readDate(Date *date){
 	date->annee=((tab[6]>>4)*10)+(tab[6]&0X0F);
 }
 
-void WriteDate(Date *date){
+void writeDate(Date *date){
 	uint8_t tab[7];
 
 	tab[0]=((date->second/10)<<4) + (date->second%10);

+ 1 - 0
Source/lcd.c

@@ -6,6 +6,7 @@
  */
 
 #include "lcd.h"
+#include <stdio.h>
 
 const uint8_t ROW_16[] = {0x00, 0x40, 0x10, 0x50};
 const uint8_t ROW_20[] = {0x00, 0x40, 0x14, 0x54};