专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
TI
哪位大神接触过DSP28335读取陀螺仪L3G4200D的程序,麻烦发给小弟一份,本人初学
2019-08-02 19:57
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
TI MCU
1466
9
997
邮箱:
thelust@sina.com
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
thelust
1楼-- · 2019-08-03 09:12
以下是小弟改的F28335的I2C模块读写函数,可是程序还是读不出数,希望大家看看有什么不妥之处
#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File
#include "DSP2833x_Examples.h" // DSP2833x Examples Include File
/*****************************************************************************
名称:WriteData;
功能:I2C写多字节函数;
形参:*Wdata(写入的数据)、Address(写入数据的目标地址)、bytenumber(数据字节数);
******************************************************************************/
Uint16 WriteData(Uint16 *Wdata, Uint16 Address, Uint16 bytenumber)
{
Uint16 i;
if(I2caRegs.I2CMDR.bit.STP == 1)
{
return I2C_STP_NOT_READY_ERROR;
}
if(I2caRegs.I2CSTR.bit.BB == 1)
{
return I2C_BUS_BUSY_ERROR;
} //前两句判断数据总线是否空闲
I2caRegs.I2CSAR = 0x68; //从机地址
I2caRegs.I2CCNT = bytenumber+1; //I2C模块传输数据个数:起始信号、器件地址、数据。
//但是由于器件地址紧随起始信号送到数据总线,
//因此实际需要传输的数据是 数据字节数+1,1为起始信号
I2caRegs.I2CDXR = Address; //写入数据的目标地址,先传输数据地址再传输数据
I2caRegs.I2CMDR.all = 0x6E20; //对I2C模块进行配置:1、主机;2、发送数据;3、在结束后产生停止位
//4、使能I2C模块;5、启动开始信号发送数据
for (i=0;i<bytenumber;i++)
{
I2caRegs.I2CDXR = *Wdata;
Wdata++;
if (I2caRegs.I2CSTR.bit.NACK == 1)
return I2C_BUS_BUSY_ERROR;
} //数据压入数据缓存寄存器I2CDXR
return I2C_SUCCESS;
}
/*****************************************************************************
名称:ReadData;
功能:I2C读多字节函数;
形参:*data(读入的数据)、Address(读入数据的源地址)、bytenumber(数据字节数);
******************************************************************************/
Uint16 ReadData(Uint16 *data, Uint16 address, Uint16 bytenumber)
{
Uint16 i,Temp;
if (I2caRegs.I2CMDR.bit.STP == 1)
{
return I2C_STP_NOT_READY_ERROR;
}
if (I2caRegs.I2CSTR.bit.BB == 1)
{
return I2C_BUS_BUSY_ERROR;
} //前两句判断数据总线是否空闲
I2caRegs.I2CSAR = 0x68; //从机地址
I2caRegs.I2CCNT = 1; //开始时需要传输的只是一个内存地址,
//所以数据计数寄存器I2CCNT设置为1。
I2caRegs.I2CDXR = address; //传输源地址
I2caRegs.I2CMDR.all = 0x6620; //对I2C模块进行配置:1、主机;2、发送数据;3、在结束后不产生停止位
//4、使能I2C模块;5、启动开始信号发送数据
if (I2caRegs.I2CSTR.bit.NACK == 1)
return I2C_BUS_BUSY_ERROR;
DELAY_US(50);
I2caRegs.I2CCNT = bytenumber; //I2C模块传输数据个数:1(数据)
I2caRegs.I2CMDR.all = 0x6C20; //对I2C模块进行配置:1、开始位;2、停止位;3、主机;
//4、接收器状态;5、启动开始信号发送数据
if (I2caRegs.I2CSTR.bit.NACK == 1)
return I2C_BUS_BUSY_ERROR;
for(i=0;i<bytenumber;i++)
{
Temp = I2caRegs.I2CDRR;
if (I2caRegs.I2CSTR.bit.NACK == 1)
return I2C_BUS_BUSY_ERROR;
*data = Temp;
data++; //数据压入数据缓存寄存器I2CDRR
}
return I2C_SUCCESS;
}
加载中...
chengdongx
2楼-- · 2019-08-03 13:17
用io模拟i2c试试看
加载中...
edishen
3楼-- · 2019-08-03 18:56
不是很懂 帮顶
加载中...
上一页
1
2
一周热门
更多
>
相关问题
CPLD的方波输出
4 个回答
11个版本Quartus II 软件下载,安装包网盘合集,附教程,47G!
20 个回答
请大家帮忙到21IC发展大家谈支持我申请新版面
20 个回答
【通知】21ic中国电子网服务条款 (所有人员必读)
1 个回答
满载而归乙亥年,大展鸿途庚子年---集签赢好礼
20 个回答
携手ADI,踏上电子工程师之巅—车辆电气化视频,答题领奖!
1 个回答
如何提升论坛质量,看你了!
20 个回答
【最终名单】二姨家喊你来拿100份新年大礼啦~
20 个回答
相关文章
×
关闭
采纳回答
向帮助了您的网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
TI
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
关闭
您已邀请
15
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File
#include "DSP2833x_Examples.h" // DSP2833x Examples Include File
/*****************************************************************************
名称:WriteData;
功能:I2C写多字节函数;
形参:*Wdata(写入的数据)、Address(写入数据的目标地址)、bytenumber(数据字节数);
******************************************************************************/
Uint16 WriteData(Uint16 *Wdata, Uint16 Address, Uint16 bytenumber)
{
Uint16 i;
if(I2caRegs.I2CMDR.bit.STP == 1)
{
return I2C_STP_NOT_READY_ERROR;
}
if(I2caRegs.I2CSTR.bit.BB == 1)
{
return I2C_BUS_BUSY_ERROR;
} //前两句判断数据总线是否空闲
I2caRegs.I2CSAR = 0x68; //从机地址
I2caRegs.I2CCNT = bytenumber+1; //I2C模块传输数据个数:起始信号、器件地址、数据。
//但是由于器件地址紧随起始信号送到数据总线,
//因此实际需要传输的数据是 数据字节数+1,1为起始信号
I2caRegs.I2CDXR = Address; //写入数据的目标地址,先传输数据地址再传输数据
I2caRegs.I2CMDR.all = 0x6E20; //对I2C模块进行配置:1、主机;2、发送数据;3、在结束后产生停止位
//4、使能I2C模块;5、启动开始信号发送数据
for (i=0;i<bytenumber;i++)
{
I2caRegs.I2CDXR = *Wdata;
Wdata++;
if (I2caRegs.I2CSTR.bit.NACK == 1)
return I2C_BUS_BUSY_ERROR;
} //数据压入数据缓存寄存器I2CDXR
return I2C_SUCCESS;
}
/*****************************************************************************
名称:ReadData;
功能:I2C读多字节函数;
形参:*data(读入的数据)、Address(读入数据的源地址)、bytenumber(数据字节数);
******************************************************************************/
Uint16 ReadData(Uint16 *data, Uint16 address, Uint16 bytenumber)
{
Uint16 i,Temp;
if (I2caRegs.I2CMDR.bit.STP == 1)
{
return I2C_STP_NOT_READY_ERROR;
}
if (I2caRegs.I2CSTR.bit.BB == 1)
{
return I2C_BUS_BUSY_ERROR;
} //前两句判断数据总线是否空闲
I2caRegs.I2CSAR = 0x68; //从机地址
I2caRegs.I2CCNT = 1; //开始时需要传输的只是一个内存地址,
//所以数据计数寄存器I2CCNT设置为1。
I2caRegs.I2CDXR = address; //传输源地址
I2caRegs.I2CMDR.all = 0x6620; //对I2C模块进行配置:1、主机;2、发送数据;3、在结束后不产生停止位
//4、使能I2C模块;5、启动开始信号发送数据
if (I2caRegs.I2CSTR.bit.NACK == 1)
return I2C_BUS_BUSY_ERROR;
DELAY_US(50);
I2caRegs.I2CCNT = bytenumber; //I2C模块传输数据个数:1(数据)
I2caRegs.I2CMDR.all = 0x6C20; //对I2C模块进行配置:1、开始位;2、停止位;3、主机;
//4、接收器状态;5、启动开始信号发送数据
if (I2caRegs.I2CSTR.bit.NACK == 1)
return I2C_BUS_BUSY_ERROR;
for(i=0;i<bytenumber;i++)
{
Temp = I2caRegs.I2CDRR;
if (I2caRegs.I2CSTR.bit.NACK == 1)
return I2C_BUS_BUSY_ERROR;
*data = Temp;
data++; //数据压入数据缓存寄存器I2CDRR
}
return I2C_SUCCESS;
}
一周热门 更多>