資源簡介
SC7A20加速度傳感器驅動,SC7A20加速度傳感器驅動,SC7A20加速度傳感器驅動。
代碼片段和文件信息
#include?“Analog_IIC.h“
/*
??@16M---精確延時到微秒
*/
void?Analog_IIC_Delay(u8?n)//@16M---精確延時到微秒
{
??n?=?n;
??nop();?
??nop();
??nop();
}
/*
??模擬IIC引腳方向配置
*/
void?Analog_IIC_Pin_Init(void)
{
??GPIOC->DDR?|=?((uint8_t)0x01);//PC0?IIC_SDA??輸出
??GPIOC->CR1?|=?((uint8_t)0x01);//PC0?IIC_SDA??推挽
??GPIOC->DDR?|=?((uint8_t)0x02);//PC1?IIC_SCL??輸出
??GPIOC->CR1?|=?((uint8_t)0x02);//PC1?IIC_SCL??推挽
??
??IIC_SCL_1;??//拉高時鐘線
??IIC_SDA_1;??//拉高數據線
}
/*
??模擬IIC_SDA引腳方向配置
??參數值??1 輸出
??????????0 輸入
*/
void?IIC_SDA_Dir(u8?d)
{
??if(d?==?1)//輸出
??{
????GPIOC->DDR?|=?((uint8_t)0x01);//PC0?IIC_SDA??輸出
????GPIOC->CR1?|=?((uint8_t)0x01);//PC0?IIC_SDA??推挽
??}
??else?if(d?==?0)//輸入
??{
????GPIOC->DDR?&=?((uint8_t)~0x01);//PC0?IIC_SDA??輸入
????GPIOC->CR1?&=?((uint8_t)~0x01);//PC0?IIC_SDA??浮空
??}
}
//產生IIC起始信號
void?IIC_Start(void)
{
??IIC_SDA_Dir(1);//IIC_SDA線輸出
??IIC_SDA_1; ?//拉高數據線? ??
??IIC_SCL_1; ?//拉高時鐘線
??Analog_IIC_Delay(10);
??IIC_SDA_0;???//拉低數據線
??Analog_IIC_Delay(10);
??IIC_SCL_0;???//拉低時鐘線??發送IIC總線開始信號
} ??
//產生IIC停止信號
void?IIC_Stop(void)
{
??IIC_SDA_Dir(1);//IIC_SDA線輸出
??IIC_SCL_0;???//拉低時鐘線?
??IIC_SDA_0;???//拉低數據線
??Analog_IIC_Delay(10);
??IIC_SCL_1;???//拉高時鐘線 ??
??Analog_IIC_Delay(10);
??IIC_SDA_1;???//拉高數據線??發送IIC總線停止信號
??Analog_IIC_Delay(10); ???
}
//產生ACK應答
void?IIC_Ack(void)
{
??IIC_SCL_0;???//拉低時鐘線?
??IIC_SDA_Dir(1);//IIC_SDA線輸出
??IIC_SDA_0;???//拉低數據線
??Analog_IIC_Delay(10);
??IIC_SCL_1;???//拉高時鐘線
??Analog_IIC_Delay(10);
??IIC_SCL_0;???//拉低時鐘線?
}
//不產生ACK應答 ????
void?IIC_NAck(void)
{
??IIC_SCL_0;???//拉低時鐘線?
??IIC_SDA_Dir(1);//IIC_SDA線輸出
??IIC_SDA_1;???//拉高數據線
??Analog_IIC_Delay(10);
??IIC_SCL_1;???//拉高時鐘線
??Analog_IIC_Delay(10);
??IIC_SCL_0;???//拉低時鐘線?
}
//等待應答信號到來
//返回值:1 接收應答失敗
//???????0 ????????接收應答成功
u8?IIC_Wait_Ack(void)
{
??u8?Wait_TOut_Cnt?=?0;//設置等待應答信號超時計數
??IIC_SDA_Dir(0);? ?//IIC_SDA線輸入
??IIC_SDA_1; ?????//拉高數據線
??Analog_IIC_Delay(10); ???
??IIC_SCL_1;?????????//拉高時鐘線??等待應答信號
??Analog_IIC_Delay(10); ?
??while(IIC_SDA)
??{
????Wait_TOut_Cnt++;
????if(Wait_TOut_Cnt?>?250)
????{
??????IIC_Stop(); ?//等待應答信號超時??發送IIC總線停止信號
??????return?1;
????}
??}
??IIC_SCL_0; ?//拉低時鐘線??結束應答信號
??return?0;??
}? ? ?????
//IIC發送一個字節 ??
void?IIC_Write_Byte(u8?WByte)
{????????????????????????
??u8?Wb_Cnt?=?0;?//寫數據位計數????
??IIC_SDA_Dir(1);//IIC_SDA線輸出? ????
??IIC_SCL_0;???//拉低時鐘線????開始數據傳輸
??for(Wb_Cnt=0;?Wb_Cnt<8;?Wb_Cnt++)
??{
????if(WByte&0x80)
????{
??????IIC_SDA_1;????
????}
????else
????{
??????IIC_SDA_0;
????}
????WByte?<<=?1;?//數據移位
????Analog_IIC_Delay(10);
????IIC_SCL_1;?//拉高時鐘線
????Analog_IIC_Delay(10);?
????IIC_SCL_0;?//拉低時鐘線???準備開始傳送數據位
????Analog_IIC_Delay(10);
??} ?
}? ????
//IIC讀取一個字節
//參數值:1 發送Ack
//???????0 ????????不發送Ack
u8?IIC_Read_Byte(u8?SF_Ack)
{
??u8?Rb_Cnt?=?0;?//讀數據位計數?
??u8?RByte??=?0;?//讀字節
??IIC_SDA_Dir(0);//SDA設置為輸入
??for(Rb_Cnt=0;?Rb_Cnt<8;?Rb_Cnt++)
?
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????6200??2017-03-14?09:17??SC7A20驅動\Analog_IIC.c
?????文件????????955??2017-04-25?16:41??SC7A20驅動\Analog_IIC.h
?????文件??????15159??2017-03-21?09:00??SC7A20驅動\drv_l1_gsensor.c
?????文件???????3704??2017-03-21?08:57??SC7A20驅動\drv_l1_gsensor.h
?????文件???????2675??2017-05-05?17:15??SC7A20驅動\SC7A20.c
?????目錄??????????0??2017-05-06?09:29??SC7A20驅動
?????文件????1602327??2017-04-14?16:46??SC7660-SC7A30E-SC7A20內部功能應用說明書_0.2.pdf
?????文件?????623318??2017-03-31?10:30??SC7A20說明書_0.6_帶寄存器描述_?.pdf
-----------?---------??----------?-----??----
??????????????2254338????????????????????8
評論
共有 條評論