MF32BSP_XerolySkinner 2.0.0
C++版本的驱动库
载入中...
搜索中...
未找到
bsp_IIC.cpp
浏览该文件的文档.
1/*----------------------------------------------------------------------------------------------------
2 #
3 # Copyright (c) 2022 Yuankang Liang(XerolySkinner)
4 #
5 # 本软件按原样提供,无任何明示或暗示
6 # 在任何情况下,作者都不承担任何损害赔偿责任
7 #
8 # 使用的许可声明:
9 # 1. 不得歪曲本软件的来源,你不能声称你编写了原始软件.
10 # 2. 免费授予以任何目的,前提是版权声明出现在所有副本中.
11 # 并且版权声明和许可声明同时出现.
12 # 3. 你有使用,复制,修改,分发,和销售本软件的许可.
13 # 4. 如果你在产品中使用,产品文档中的声明是赞赏的但不是必须的.
14 # 5. 本通知不得从任何来源删除或更改.
15 #
16 # Yuankang Liang(XerolySkinner)
17 # E-mail:zabbcccbbaz@163.com
18 # QQ:2715099320
19 # Mobile Phone:13005636215
20 #
21 # All rights reserved.
22 */
23
37//----------------------------------------------------------------------------------------------------
38// 头文件
39#include "bsp_IIC.h"
41//----------------------------------------------------------------------------------------------------
42// 底层程序
43//
51 IIC_Delay();
53 IIC_Delay();
55//----------------------------------------------------------------------------------------------------
62 IIC_Delay();
64 IIC_Delay();}
65//----------------------------------------------------------------------------------------------------
66//发送应答或非应答信号
73 IIC_SDA(ackbit);
74 IIC_Delay();
76 IIC_Delay();
79 IIC_Delay();}
80//----------------------------------------------------------------------------------------------------
86 u8 ackbit;
88 IIC_Delay();
89 ackbit = IIC_SDA(IIC_READ);
91 IIC_Delay();
92 return ackbit;}
93//----------------------------------------------------------------------------------------------------
99 u8 i;
100 for (i = 0; i < 8; i++) {
102 IIC_Delay();
103 IIC_SDA((byt & 0x80) != 0);
104 IIC_Delay();
106 byt <<= 1;
107 IIC_Delay();}
109//----------------------------------------------------------------------------------------------------
115 u8 i=0, da=0;
116 for (i = 0; i < 8; i++) {
118 IIC_Delay();
119 da <<= 1;
120 if (IIC_SDA(IIC_READ))da |= 1;
122 IIC_Delay();}
123 return da;}
125//----------------------------------------------------------------------------------------------------
126// 封装程序
127//
136void bsp_IIC::IIC_WriteOneByte(u8 id, u8 addr, u8 dat) {
137 IIC_Start();
138 IIC_SendByte(id << 1);
139 IIC_WaitAck();
140 IIC_SendByte(addr);
141 IIC_WaitAck();
142 IIC_SendByte(dat);
143 IIC_WaitAck();
144 IIC_Stop();}
145//----------------------------------------------------------------------------------------------------
154 u8 temp = 0;
155 IIC_Start();
156 IIC_SendByte(id << 1);
157 IIC_WaitAck();
158 IIC_SendByte(addr);
159 IIC_SendAck(0);
160 IIC_Start();
161 IIC_SendByte((id << 1) | 0x01);
162 IIC_SendAck(0);
163 temp = IIC_RecByte();
164 IIC_SendAck(1);
165 IIC_Stop();
166 return temp;}
167//----------------------------------------------------------------------------------------------------
177void bsp_IIC::IIC_Write(u8 id,u8 addr,u8* dat,u32 len){
178 IIC_Start();
179 IIC_SendByte(id<<1);
180 IIC_WaitAck();
181 IIC_SendByte(addr);
182 IIC_WaitAck();
183 for(int i=0;i<len;i++){
184 IIC_SendByte(dat[i]);
185 IIC_WaitAck();}
186 IIC_Stop();
187 return;}
188//----------------------------------------------------------------------------------------------------
198void bsp_IIC::IIC_Read(u8 id,u8 addr,u8* dat,u32 len){
199 IIC_Start();
200 IIC_SendByte(id<<1);
201 IIC_WaitAck();
202 IIC_SendByte(addr);
203 IIC_SendAck(0);
204 IIC_Start();
205 IIC_SendByte((id<<1)|0x01);
206 IIC_SendAck(0);
207 for(int i=0;i<len;i++){
208 dat[i]=IIC_RecByte();
209 IIC_SendAck(i==(len-1));}
210 IIC_Stop();
211 return;}
213
本类实现软件IIC功能 依此类派生出其他软件IIC功能
@ IIC_RESET
管脚复位状态
Definition: bsp_IIC.h:45
@ IIC_SET
管脚置位状态
Definition: bsp_IIC.h:46
@ IIC_READ
读取管脚状态
Definition: bsp_IIC.h:47
u8 IIC_RecByte(void)
接收IIC一个字节信号
Definition: bsp_IIC.cpp:114
u8 IIC_WaitAck(void)
等待应答信号
Definition: bsp_IIC.cpp:85
void IIC_SendAck(u8 ackbit)
发送IIC应答信号
Definition: bsp_IIC.cpp:71
void IIC_Start(void)
发送IIC开始信号
Definition: bsp_IIC.cpp:47
virtual u8 IIC_SCK(u8 var)=0
控制SCK管脚口
void IIC_Write(u8 id, u8 addr, u8 *dat, u32 len)
使用总线发送定长数据
Definition: bsp_IIC.cpp:177
u8 IIC_ReadOneByte(u8 id, u8 addr)
使用总线接收一个字节数据
Definition: bsp_IIC.cpp:153
void IIC_WriteOneByte(u8 id, u8 addr, u8 dat)
使用总线发送一个字节数据
Definition: bsp_IIC.cpp:136
void IIC_Read(u8 id, u8 addr, u8 *dat, u32 len)
使用总线接收定长数据
Definition: bsp_IIC.cpp:198
virtual void IIC_Delay(void)=0
时序中的延时 在此处短暂延时
virtual u8 IIC_SDA(u8 var)=0
控制SDA管脚口
void IIC_SendByte(u8 byt)
发送IIC一个字节信号
Definition: bsp_IIC.cpp:98
void IIC_Stop(void)
发送IIC停止信号
Definition: bsp_IIC.cpp:59
uint8_t u8
8位无符号数类型
Definition: varint.h:40
uint32_t u32
32位无符号数类型
Definition: varint.h:42