一段用GPIO模拟IIC的参考程序.docx

上传人:牧羊曲112 文档编号:3195517 上传时间:2023-03-11 格式:DOCX 页数:6 大小:37.15KB
返回 下载 相关 举报
一段用GPIO模拟IIC的参考程序.docx_第1页
第1页 / 共6页
一段用GPIO模拟IIC的参考程序.docx_第2页
第2页 / 共6页
一段用GPIO模拟IIC的参考程序.docx_第3页
第3页 / 共6页
一段用GPIO模拟IIC的参考程序.docx_第4页
第4页 / 共6页
一段用GPIO模拟IIC的参考程序.docx_第5页
第5页 / 共6页
亲,该文档总共6页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《一段用GPIO模拟IIC的参考程序.docx》由会员分享,可在线阅读,更多相关《一段用GPIO模拟IIC的参考程序.docx(6页珍藏版)》请在三一办公上搜索。

1、一段用GPIO模拟IIC的参考程序一段用GPIO模拟IIC的参考程序 /* * 函数名 : * 功能 : 延时等待10 us,循环所需次数跟cpu速度有关 * 输入参数 : * 输出参数 : * 返回值说明 : */ static void DelayXus(U32 xus_n) volatile U32 i,j; i = 110; j = xus_n; for(;j0;j-) for(;i0; i-); /* * 函数名 : * 功能 : 通过IO口模拟IIC时钟线 * 输入参数 : * 输出参数 : * 返回值说明 : */ static void I2cSetSclk(U8 isHigh

2、) if(isHigh) REG BITSET1 = xxxx; /SCLK set to high else REG BITCLR1 = xxxx; /SCLK set to low /* * 函数名 : * 功能 : 通过IO口模拟IIC数据线 * 输入参数 : * 输出参数 : * 返回值说明 : */ static void I2cSetSdin(U8 isHigh) if(isHigh) REG BITSET1 = yyyy; /SDATA set to high else REG BITCLR1 = yyyy; /SDATA set to low /* * 函数名 :I2cChec

3、kAck * 功能 :IIC的ACK周期 * 输入参数 : * 输出参数 : * 返回值说明 : */ static U16 I2cCheckAck(void) U16 retVal_n = 0; retVal_n = (REG BITSET1)&(yyyy); /需要先改变该gpio 为input 模式 return retVal_n; /* * 函数名 : * 功能 : 启动IIC * 输入参数 : * 输出参数 : * 返回值说明 : */ static void I2cStart(void) I2cSetSclk(1); I2cSetSdin(1); DelayXus(1); I2cS

4、etSdin(0); DelayXus(1); I2cSetSclk(0); DelayXus(1); /* * 函数名 : * 功能 : 停止IIC * 输入参数 : * 输出参数 : * 返回值说明 : */ static void I2cStop(void) I2cSetSclk(0); I2cSetSdin(0); DelayXus(1); I2cSetSclk(1); DelayXus(1); I2cSetSdin(1); DelayXus(1); /* * 函数名 :I2cTxByte * 功能 :通过IIC传送一个字节的数据 * 输入参数 : * 输出参数 : * 返回值说明 :

5、 */ static U16 I2cTxByte(U8 txData_n) U16 index_n = 0, retVal_n = 0; I2cSetSclk(0); /force SCLK to low for(index_n=0;index_n8;index_n+) /MSB first if(txData_n&0x80) I2cSetSdin(1); /set SDATA to high else I2cSetSdin(0); /set SDATA to low /SDATA left shift txData_n = 1; I2cSetSclk(1); /force SCLK to h

6、igh DelayXus(1); I2cSetSclk(0); /force SCLK to low DelayXus(1); I2cSetSdin(1); /set SDATA to high I2cSetSclk(1); /force SCLK to high DelayXus(1); retVal_n = I2cCheckAck; I2cSetSclk(0); /force SCLK to low return retVal_n; /* * 函数名 :I2cWriteReg * 功能 :通过IIC完成一次对从设备寄存器的写操作 * 输入参数 : * 输出参数 : * 返回值说明 : */

7、 static U16 I2cWriteReg(U8 devAddr_n, U8 regAddr_n, U8 txData_n) U16 retVal_n = 1; wai_sem(RES_I2C_SEMID); xdisable; / Send start command I2cStart; DelayXus(10); do / Send device code if (I2cTxByte(devAddr_n) = 1) break; DelayXus(10); / Send register code if (I2cTxByte(regAddr_n) = 1) break; DelayXus(10); / Send data if (I2cTxByte(txData_n) = 1) break; DelayXus(10); retVal_n = 0; while(0); / Send stop command I2cStop; DelayXus(10); sig_sem(RES_I2C_SEMID); xenable; return retVal_n;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号