打印

哪位大神接触过DSP28335读取陀螺仪L3G4200D的程序,麻烦发给小弟一份,本人初学

[复制链接]
1966|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
thelust|  楼主 | 2014-9-10 10:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
小木欧尼| | 2014-9-10 21:49 | 只看该作者
具体没写过针对这个陀螺仪的代码    是什么接口   然后找到28335对应的应用程序
然后改改就可以啦

使用特权

评论回复
板凳
edishen| | 2014-9-10 22:18 | 只看该作者
lz是实在人啊 邮箱直接上了

使用特权

评论回复
地板
thelust|  楼主 | 2014-9-11 09:56 | 只看该作者
本人比较着急心切,请各位见谅

使用特权

评论回复
5
thelust|  楼主 | 2014-9-11 09:57 | 只看该作者
本人比较着急心切,请各位见谅

使用特权

评论回复
6
thelust|  楼主 | 2014-9-11 09:57 | 只看该作者
本人比较着急心切,请各位见谅

使用特权

评论回复
7
siyida| | 2014-9-11 10:12 | 只看该作者
陀螺仪有SPI\I2C 2种接口,陀螺仪内有哪些寄存器,还未看

使用特权

评论回复
8
thelust|  楼主 | 2014-9-15 16:00 | 只看该作者
以下是小弟改的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;
}


使用特权

评论回复
9
chengdongx| | 2014-9-15 17:23 | 只看该作者
用io模拟i2c试试看

使用特权

评论回复
10
edishen| | 2014-9-15 20:24 | 只看该作者
不是很懂  帮顶

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

11

帖子

0

粉丝