J'aimerais connaitre votre méthode pour effectuer une opération sur un registre de RTC. LA RTC utilise le circuit MCP7951 ( DS en haut du post) .
Ma méthode fonctionne, mais je la trouve longue et tirée par les cheveux. J'entrevois une solution plus propre mais je ne trouve pas. Peut être suis-je trop prés du mur
Je dois incrémenter les jours de la semaine qui vont de 1 à 7 du registre . Ces jours sont dans les bit 0-2 du registre.
Donc pour résumé je dois garder les bit 3,4,5 intact , les bits 6 et 7 ne sont utilisés, et je dois incrémenter la valeur des bits 0,1 et 2 .
Voila ma portion de code pour lire en SPI les valeurs du registre, les modifiées et les ré-injecter dans le registre.
Code : Tout sélectionner
unsigned int tempo, tempo2;
SPI_Set_Active(SPI2_Read, SPI2_Write); // J'active le SPI2
delay_us(1);
//----- Je lis le jour de la semaine
CS = 0;
SPI2_Remappable_Write(READ);
SPI2_Remappable_Write(DAY_REGISTER);
tempo = SPI2_Remappable_Read(0) ;// je recupere la valeur du registre
tempo2= (tempo & 0x07); // J'isole les 3 bit des jours a incrementer
tempo = (tempo & 0x38); // J'isole les 3 bit a garder
tempo2++; // je rajoute un jour en hexa car il ne dépasse pas 9
tempo2 = (tempo2 & 0x07);// Je re-filtre pour suprrimer le bit 3 si jamais il est passé à 1
if (tempo2 == 0) tempo2 = 1; // si à 0, je force à 1
tempo = tempo | tempo2; // J'assemble mes 2 valeurs individuelles en une seule
CS = 1;
CS = 0; //Ecriture du jour de la semaine dans le registre
SPI2_Remappable_Write(WRITE);
SPI2_Remappable_Write(DAY_REGISTER);
SPI2_Remappable_Write (tempo);
CS = 1;
delay_us(1);C'est purement par curiosité , pour ne pas passer à coté d'une méthode peut être plus simple !
Merci à vous


et bien vu !