#include "stm32f10x.h"
#include "accelerometer.h"
#include "MySPI.h"
#include "gpio.h"

void Init_accelerometre(void)
{
	//char testReg;
	
	MySPI_Init(SPI1);
	
	MySPI_Clear_NSS(); //CS LOW
	MySPI_Send(0x2D);//Registre Auto_sleep + Write + measure a 1
	MySPI_Send(0x08);// désactive 
	MySPI_Set_NSS();//CS HIGH
	/*	
	MySPI_Clear_NSS(); //CS LOW
	MySPI_Send(0xAD);// regisstre 0x2D en lecture 
	testReg = MySPI_Read(); // lecture de la valeur du registre
	MySPI_Set_NSS();//CS HIGH
	*/
	
	MySPI_Clear_NSS(); //CS LOW
	MySPI_Send(0X2C);//Registre power consuption + Write
	MySPI_Send(0X1A);//Paramétrage hors low consumption + 100Hz output data rate
	MySPI_Set_NSS();//CS HIGH
	
	MySPI_Clear_NSS(); //CS LOW
	MySPI_Send(0x31);//registre Data format + write
	MySPI_Send(0x17);//
	MySPI_Set_NSS();//CS HIGH
}

void Lecture_accelerometre(float* GX, float* GY, float* GZ)
{
	int16_t dataX ;
	int16_t dataY ;
	int16_t		dataZ ;
	
	MySPI_Clear_NSS(); //CS LOW
	
	MySPI_Send(0xF2);//lecture 1er registre accéléromètre + lecture multibytes
	dataX = MySPI_Read()<<8; // données sur 13 (12 data + sign) bits passage 8 bit en PF
	dataX |= MySPI_Read(); //lecture SPI
	dataX &= 0x1FFF; //masquage au dessus du bit 13
	if (dataX > 511)
	{
	dataX -= 1024;
	}
	*GX = dataX*0.004;//valeur du registre x pas accelerometre
		
	dataY = MySPI_Read()<<8;
	dataY |= MySPI_Read();
	dataY &= 0x1FFF;
	if (dataY > 511)
	{
	dataY -= 1024;
	}
	*GY = dataY*0.004;//valeur du registre x pas accelerometre
	
	dataZ = ((MySPI_Read()<<8)|MySPI_Read());
	dataZ &= 0x1FFF;
/*	if (dataZ > 511)
	{
	dataZ -= 1024;
	}
*/
	*GZ = dataZ*0.004;//valeur du registre x pas accelerometre		
	
	MySPI_Set_NSS();//CS HIGH
}
