"); //-->
GPIO模拟IIC接口的公开的代码应该有很多了,最近正好要做一个GPIO模拟IIC主机的代码,驱动一个芯片。但是发现网上的代码基本没有让偶满意的,所以自己从新写了一个代码模板。在AVR和MTK(ARM)上测试通过,效果还8错。
1. 模板化的代码,使用还算比较方便
2. 输出信号的延时控制,延时函数用户定义,可以delay,也可以sleep
3. 总线检测,可以适应各种速度的IIC设备。当然,需要设置最大延时等参数。
使用方法(MTK平台下程序作为例子):
定义:
static void delay_us(uint32_t dly)
{
while(dly--);
}
static void SCL_R(void)
{
GPIO_InitIO(INPUT, EMIIC_TOUCH_SCL_PIN);
}
static void SCL_D(void)
{
GPIO_WriteIO(0, EMIIC_TOUCH_SCL_PIN);
GPIO_InitIO(OUTPUT, EMIIC_TOUCH_SCL_PIN);
}
static uint8_t SCL_G(void)
{
return GPIO_ReadIO(EMIIC_TOUCH_SCL_PIN);
}
static void SDA_R(void)
{
GPIO_InitIO(INPUT, EMIIC_TOUCH_SDA_PIN);
}
static void SDA_D(void)
{
GPIO_WriteIO(0, EMIIC_TOUCH_SDA_PIN);
GPIO_InitIO(OUTPUT, EMIIC_TOUCH_SDA_PIN);
}
static uint8_t SDA_G(void)
{
return GPIO_ReadIO(EMIIC_TOUCH_SDA_PIN);
}
DEFINE_EMIIC_MOD(TOUCH, SCL_D, SCL_R, SCL_G, SDA_D, SDA_R, SDA_G, delay_us, uint32_t)
其中,TOUCH是模块名,SCL_D是设置SCL为显性电平,SCL_R是设置SCL为隐性电平,SCL_G是读取SCL信号值,SDA类似,delay_us是用户定义的延时函数,uint32_t是延时函数的参数类型(也是系统延时参数的类型)。
申明:
DECLARE_EMIIC_MOD(TOUCH, uint32_t)
使用:
1. EMIIC_##MOD_NAME##_SetParameter
设置延时参数,第一个参数是SCL隐性电平延时,第二个是SCL显性电平延时,第三个是等待设备最大延时,第四个是等待时,检测设备的时间间隔,最后一个参数是信号变化间的延时。
2. EMIIC_##MOD_NAME##_Init
IIC初始化,无参数,调用之前需要把相应的IO口设置为GPIO模式。
3. EMIIC_##MOD_NAME##_DeInit
终止化,无参数。
4. EMIIC_##MOD_NAME##_Send
发送数据,参数1是设备地址,参数2是数据指针,参数3是数据长度,参数4是是否需要STOP,参数5是实际发送数据长度的变量指针。
5. EMIIC_##MOD_NAME##_Receive
接收数据,参数1是设备地址,参数2是数据指针,参数3是数据长度,参数4是是否需要STOP,参数5是实际接收数据长度的变量指针。
代码:
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
台积电拥“获利双马达” NVIDIA、苹果大单合计占比破4成
基于DSP和光缆通信的远程高速数据采集及处理系统的设计与应用
英飞凌推出采用全新EasyPACK™ C封装的碳化硅功率模块,助力提升工业应用的能效与使用寿命
AI时代,如何用服务器存储如何升级?
IAR 使用 [利尔达]
由CH4040组成的声响发生器
MSP430 单片机外围模块 - LCD [利尔达]
嵌入式中怎么创建一个根文件系统跟内核在flash中启动
[讨论]LABVIEW,VXWORKS,ICCAVR,ADS
MSP430 介绍 (一)
由NE555、CC4051组成的多功能音响发生器
基于DSP的网络化无刷直流电动机控制系统
基于DSP的串行通信在变频调速系统中的应用
Vishay推出5W小型1206封装Power Metal Strip电阻器
由CC4040构成的电子校音器
基于DSP的单兵背负式短波数字通信系统
MSP430 介绍 (二)
RealView Debugger 1.8能调试gcc 3.x编译映象
基于DSP和PCI总线的通信数据采集系统
塔克热系统MBX系列微型热电制冷器赋能AI数据中心下一代可插拔设备
大联大世平集团推出基于onsemi产品的汽车智能LED灯组评估板方案
嵌入式根文件系统怎么做在flash中被内核链接
INA20x 社区视频
开关式警音发生器(KD9561)
NSSine™实时控制MCU/DSP矩阵完善,覆盖高中低实时控制场景
英飞凌扩展电源路径保护产品组合,赋能48V及未来400V和800V AI数据中心架构发展
英特尔与京东方合作推出AI显示技术创新
LABVIEW,VXWORKS,ICCAVR,ADS
数字式电子琴包络发生器
Diodes公司的车规级重定时器可满足汽车高速USB和DisplayPort连接的严格要求