IIC协议接口在ARM系统下的操作
来源:互联网 发布:外汇期货实时数据接口 编辑:程序博客网 时间:2024/04/29 22:57
在做IIC协议测试的时候对于写入的数据通过demo自带的测试函数都能够正确的读取出来,但是通过自己按照IIC协议的流程图写出来的函数也能够把所有的数据读取出来,但是是偶数读一遍,奇数读一遍。交叉着读取出来的。这是不正确的。。调试了好几天都没修正过来。今天我又重新把他的函数重新写了一遍。。关键的部分在while(rIICCON&0x10)这个条件上。。为什么呢?请看这个截图
这个是判断是否写中断或者读取中断的标志。。我将把我的代码附上,请大家学习。。
//先传输地址
rIICDS=slavaddr;
rIICSTAT=0xf0;
_iicDataCount=1;
while(_iicDataCount!=-1)
{
if(rIICCON&0x10)
{
rIICDS = addr;
for(i=0;i<10;i++); //for setup time until rising edge of IICSCL
rIICCON = 0xaf;
_iicDataCount--;
}
rIICDS=slavaddr;
rIICSTAT=0xf0;
_iicDataCount=1;
while(_iicDataCount!=-1)
{
if(rIICCON&0x10)
{
rIICDS = addr;
for(i=0;i<10;i++); //for setup time until rising edge of IICSCL
rIICCON = 0xaf;
_iicDataCount--;
}
}
这些都是写操作,将slavaddr addr 传输到rIICDS寄存器里面去。。。
/////////////////////////////////////////////////////////
下面是配置为master Rx 模式。。按照流程操作。
rIICDS=slavaddr;
rIICSTAT=0xb0;
_iicDataCount=1;
_iicPt=0;
rIICDS=slavaddr;
rIICSTAT=0xb0;
_iicDataCount=1;
_iicPt=0;
while(_iicDataCount!=-1)
{
if(rIICCON&0x10)
{
if((_iicDataCount--)==0)
{
_iicData[_iicPt++] = rIICDS;
rIICSTAT = 0x90; //Stop MasRx condition
rIICCON = 0xaf; //Resumes IIC operation.
Delay(1); //Wait until stop condtion is in effect.
}
_iicData[_iicPt++] = rIICDS;
//The last data has to be read with no ack.
if((_iicDataCount)==0)
rIICCON = 0x2f; //Resumes IIC operation with NOACK.
else
rIICCON = 0xaf; //Resumes IIC operation with ACK
}
}
*data=_iicData[1];
{
if(rIICCON&0x10)
{
if((_iicDataCount--)==0)
{
_iicData[_iicPt++] = rIICDS;
rIICSTAT = 0x90; //Stop MasRx condition
rIICCON = 0xaf; //Resumes IIC operation.
Delay(1); //Wait until stop condtion is in effect.
}
_iicData[_iicPt++] = rIICDS;
//The last data has to be read with no ack.
if((_iicDataCount)==0)
rIICCON = 0x2f; //Resumes IIC operation with NOACK.
else
rIICCON = 0xaf; //Resumes IIC operation with ACK
}
}
*data=_iicData[1];
- IIC协议接口在ARM系统下的操作
- DS1621在Linux下的IIC接口驱动设计
- ARM的IIC
- 这一个在OMAP3530/DM3730 ARM A8平台上,LINUX系统下,对GPIO的操作
- 个人笔记_EEPROM在微控STM32F1外设IIC控制下的操作细节总结
- 20130715-STM8L152C6T6通过IIC接口操作M24LR64的正确波形
- IIC协议的那些事儿
- EEPROM通过IIC协议进行读写操作
- WINCE下IIC接口FLASH驱动
- IIC协议
- IIC协议
- IIC协议
- IIC协议
- IIC协议
- IIC协议
- STM8L101-IIC接口操作M24LR64地址错误无ACK响应的波形
- FL2440下的IIC实验
- linux下的IIC驱动
- POJ1018解题报告
- 如何让后台管理员登录默认需要输入验证码?
- Android 源码目录结构详解
- MAXScript101_4.2 Case Expressions
- Div+CSS布局入门教程
- IIC协议接口在ARM系统下的操作
- MySQL优化之索引的使用(1)
- activity使用事项
- poj2846 The Bank of Kalii
- Android开发小知识文章目录
- emacs 转载的杂记
- geometry(4.1)
- Linux下修改MAC 地址
- eval与new Function()之比较