新手上路
- 积分
- 24
- 金钱
- 24
- 注册时间
- 2016-8-15
- 在线时间
- 22 小时
|
20金钱
本人使用的是模拟SPI,频率为5M。因为ADXL345最大5M。
int ADXL_ReadWrite()
{
char ControlValue = 0x00;
unsigned int iTemp = 0;
SPI_ADXL_HIGH();
SET_ADXL_SCK();//a11 1
Delay_Us(1000);
int data_out=0;
uint8_t i = 0;
SPI_ADXL_LOW();
Delay_Us(1000);
CLEAR_ADXL_SCK();
SET_SDO();//READ 1
Delay_Us(1000);
SET_ADXL_SCK();
Delay_Us(1000);
ControlValue <<= 1;
CLEAR_ADXL_SCK();
SET_SDO();//MB 1
Delay_Us(1000);
SET_ADXL_SCK();
Delay_Us(1000);
ControlValue <<= 1;
for(i=0;i<6;i++)//0X00
{
CLEAR_ADXL_SCK(); //a11 0
if(0x80 == (ControlValue & 0x80))
{
SET_SDO(); //Send one to SDO pin
}
else
{
CLR_SDO(); //Send zero to SDO pin
}
Delay_Us(1000);
SET_ADXL_SCK();
Delay_Us(1000);
ControlValue <<= 1; //Rotate data
}
Delay_Us(1000);
for(i=0; i<8; i++)
{
CLEAR_ADXL_SCK();
data_out <<= 1; //Rotate data
Delay_Us(1000);
SET_ADXL_SCK();
iTemp = GET_ADXL_SDO(); //Read SDI of ADXL345
if(0x00000020 == (iTemp & 0x00000020)) //SDI P1.5
{
data_out |= 1;
}
Delay_Us(1000);
}
//返回读出的数据
SET_ADXL_SCK();
Delay_Us(1000);
SPI_ADXL_HIGH();
return data_out;
}
本人想读取他的器件名00,dataout值应为5E。但是接收基本为0,求各位大哥有空看看,指点新手
|
|