Projet-Voilier-3/driver/Driver_IMU.c
Sanchez Manon c930991ccb Ajout du Driver_IMU, pour la gestion de l'accéléromètre.
Les fichiers Driver_SPI sont des versions personnelles non fonctionelle de la gestion du SPI.
C'est la bibliothèque MySPI qui est utilisée dans le projet.

Ajout de commentaires dans tous les fichiers driver en format doxygen.
2023-04-05 16:39:01 +02:00

57 lines
1.6 KiB
C

#include "MySpi.h"
const char POWER_CTL = 0x2D; //Power Control Register
const char BW_RATE = 0x2C;
const char DATA_FORMAT = 0x31;
/*fonction écriture registre IMU*/
void source_IMU_write_register(char registerAddress, char value)
{
// On s'assure que le Chip Select est bien au niveau bas
MySPI_Clear_NSS();
// Envoi de l'adresse du registre par SPI
MySPI_Send(registerAddress);
// Envoi de la valeur désirée du registre par SPI
MySPI_Send(value);
// On active le chip select
MySPI_Set_NSS();
}
/* Fonction d'initialisation*/
void source_IMU_init(void)
{
int i;
/* FSCK = 281kHz, Repos SCK = '1', Front actif = up
Gestion /CS logicielle à part, configure les 4 IO
- SCK, MOSI : Out Alt push pull
- MISO : floating input
- /NSS (/CS) : Out push pull */
MySPI_Init(SPI1);
//Paramètrage du registre POWER_CTL
source_IMU_write_register(POWER_CTL, 0x08);
//Paramètrage du registe BW_RATE
source_IMU_write_register(BW_RATE, 0x0A);
//Paramètrage du registre DATA_FORMAT
source_IMU_write_register(BW_RATE, 0x08); //Full resolution, et alignement à droite
}
/* Fonction de lecture des données*/
void source_IMU_read(char registerAddress, int numBytes, unsigned char * values)
{
int i;
// Pour effectuer une lecture des registre, on doit mettre les bits R/W et MB à 1
char trame = registerAddress | 0x80;
trame = trame | 0x40;
// On active le chip select
MySPI_Clear_NSS();
// Envoie de la config
MySPI_Send(trame);
// On effectue la lecture
for(i=0; i<numBytes; i++)
{
values[i] = MySPI_Read();
}
// On met le Chip Select au niveau bas
MySPI_Set_NSS();
}