应用层写的一个驱动,希望能帮助你
int CDisplay::Get_SHT1_SENSOR(int command)
{
//IO_SHT1_SCK ,IO_SHT1_DATA ,IO_DEV_D
GPIO_RestBit(IO_DEV_D,IO_SHT1_SCK);
GPIO_SetBit(IO_DEV_D,IO_SHT1_DATA);
for(int i = 0; i < 9; i++) //9个复位脉冲
{
GPIO_RestBit(IO_DEV_D,IO_SHT1_SCK);
usleep(1);
GPIO_SetBit(IO_DEV_D,IO_SHT1_SCK);
usleep(1);
}
GPIO_RestBit(IO_DEV_D,IO_SHT1_SCK); //复位结束
usleep(1);
GPIO_SetBit(IO_DEV_D,IO_SHT1_SCK); //启动传输
usleep(1);
GPIO_RestBit(IO_DEV_D,IO_SHT1_DATA);
usleep(1);
GPIO_RestBit(IO_DEV_D,IO_SHT1_SCK);
usleep(1);
GPIO_SetBit(IO_DEV_D,IO_SHT1_SCK);
usleep(1);
GPIO_SetBit(IO_DEV_D,IO_SHT1_DATA);
usleep(1);
GPIO_RestBit(IO_DEV_D,IO_SHT1_SCK); //启动完成
usleep(1);
GPIO_RestBit(IO_DEV_D,IO_SHT1_DATA);
usleep(1);
for(int i =0 ; i<3;i++) //地址000
{
//000
GPIO_SetBit(IO_DEV_D,IO_SHT1_SCK);
usleep(1);
GPIO_RestBit(IO_DEV_D,IO_SHT1_SCK);
usleep(1);
}
//int command = 0x03;
int temp = 0x10;
for(int i =0; i<5 ; i++) //5位command
{
if(command & temp)
{
GPIO_SetBit(IO_DEV_D,IO_SHT1_DATA);
}
else
{
GPIO_RestBit(IO_DEV_D,IO_SHT1_DATA);
}
temp >>=1;
usleep(1);
GPIO_SetBit(IO_DEV_D,IO_SHT1_SCK);
usleep(1);
GPIO_RestBit(IO_DEV_D,IO_SHT1_SCK);
usleep(1);
}
GPIO_SetBit(IO_DEV_D,IO_SHT1_SCK); //ACK
usleep(1);
if(GPIO_ReadInputDataBit(IO_DEV_D,IO_SHT1_DATA) )
{
// DC_DEBUG(LM_DEBUG, ACE_TEXT("Get_SHT1_SENSOR"), ACE_TEXT("SHT1 SENSOR ACK faild....."));
return -1; // NO ACK
}
GPIO_RestBit(IO_DEV_D,IO_SHT1_SCK);
GPIO_SetBit(IO_DEV_D,IO_SHT1_DATA);
for(int i =0; i<25 ; i++)
{
usleep(1); //80ms for 12bit
}
int value = 0;
for(int i =0;i<16;i++) //读取数据
{
value <<= 1; //MSB start
GPIO_SetBit(IO_DEV_D,IO_SHT1_SCK);
if(GPIO_ReadInputDataBit(IO_DEV_D,IO_SHT1_DATA))//上升沿读数据
{
value |= 0x01;
}
usleep(1);
GPIO_RestBit(IO_DEV_D,IO_SHT1_SCK);
usleep(1);
}
GPIO_RestBit(IO_DEV_D,IO_SHT1_SCK); //skip ACK
GPIO_SetBit(IO_DEV_D,IO_SHT1_DATA);
usleep(1);
GPIO_SetBit(IO_DEV_D,IO_SHT1_SCK);
usleep(1);
GPIO_RestBit(IO_DEV_D,IO_SHT1_SCK);
stringstream ss;
ss << "SHT1 SENSOR value=" << value << "command = " <<command;
DC_DEBUG(LM_DEBUG, ACE_TEXT("Get_SHT1_SENSOR"), ACE_TEXT(ss.str().c_str()));
return value;
}
|