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.
57 lines
1.6 KiB
C
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();
|
|
}
|