打印

i2c模块程序哪里出错了

[复制链接]
1126|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yangguangaisha|  楼主 | 2014-7-24 08:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
I2c, ST, se, TE, AD
程序的功能是给24c02   第0x00个字节写入0x20,然后再读回到变量b中
#include "DSP28x_Project.h"

#define I2C_SLAVE_ADDR        0x50
#define I2C_NUMBYTES   15
#define I2C_EEPROM_HIGH_ADDR  0x00
#define I2C_EEPROM_LOW_ADDR   0x00
void  I2CA_SendData(void);
void  I2CA_ReceiveData(void);

void main(void)

{

        InitSysCtrl();
        InitI2CGpio();
        DINT;
        InitPieCtrl();

        IER = 0xffff;
        IFR = 0x0000;

        InitPieVectTable();
        InitI2C();
        I2CA_SendData();
        I2CA_ReceiveData();
        while(1);
}

void  I2CA_SendData(void)
{
        Uint16 i;
    I2caRegs.I2CSAR = I2C_SLAVE_ADDR;                         //Set slave address
    I2caRegs.I2CCNT = 1 + 1;                         //Set count to 5 characters plus 2 address bytes
    I2caRegs.I2CDXR = 0x02;//Send eeprom high address
    I2caRegs.I2CMDR.bit.TRX = 1;                                 //Set to Transmit mode
    I2caRegs.I2CMDR.bit.MST = 1;                                 //Set to Master mode
    I2caRegs.I2CMDR.bit.FREE = 1;                                //Run in FREE mode
    I2caRegs.I2CMDR.bit.STP = 1;                                 //Stop when internal counter becomes 0
    I2caRegs.I2CMDR.bit.STT = 1;                                 //Send the start bit, transmission will follow

    while(I2caRegs.I2CSTR.bit.XRDY == 0);                 //Do nothing till data is shifted out
    I2caRegs.I2CDXR = 0x20;                          //Send eeprom low address
}

void  I2CA_ReceiveData(void)
{
        Uint16 i;
        char b[20];
        b[0]=0;
    I2caRegs.I2CSAR = I2C_SLAVE_ADDR;                         //Set slave address
    I2caRegs.I2CCNT = 1;                                                 //Set count to 2 address bytes
    I2caRegs.I2CDXR = 0x00;                        //Send eeprom high address
    I2caRegs.I2CMDR.bit.TRX = 1;                                 //Set to Transmit mode
    I2caRegs.I2CMDR.bit.MST = 1;                                 //Set to Master mode
    I2caRegs.I2CMDR.bit.FREE = 1;                                //Run in FREE mode
    I2caRegs.I2CMDR.bit.STP = 0;                                 //Dont release the bus after Tx
    I2caRegs.I2CMDR.bit.STT = 1;                                 //Send the start bit, transmission will follow

    I2caRegs.I2CCNT = 1;                                //read 5 bytes from eeprom
    I2caRegs.I2CMDR.bit.TRX = 0;                                 //Set to Recieve mode
    I2caRegs.I2CMDR.bit.MST = 1;                                 //Set to Master mode
    I2caRegs.I2CMDR.bit.FREE = 1;                                //Run in FREE mode
    I2caRegs.I2CMDR.bit.STP = 1;                                 //Stop when internal counter becomes 0
    I2caRegs.I2CMDR.bit.STT = 1; //Repeated start, Reception will follow
    b[0] = I2caRegs.I2CDRR;
    while(1);
}
void InitI2C(void)
{
    // Initialize I2C-A:
        I2caRegs.I2CSAR = 0x0050;        // Slave address - EEPROM control code
        I2caRegs.I2CPSC.all = 6;       // Prescaler - need 7-12 Mhz on module clk
        I2caRegs.I2CCLKL = 10;           // NOTE: must be non zero
        I2caRegs.I2CCLKH = 5;            // NOTE: must be non zero
         I2caRegs.I2CIER.bit.ARDY = 0;
         I2caRegs.I2CIER.bit.XRDY = 0;
        I2caRegs.I2CFFTX.all = 0x0000;   // Disable FIFO mode and TXFIFO
        I2caRegs.I2CFFRX.all = 0x0000;   // Disable RXFIFO, clear RXFFINT,

          I2caRegs.I2CMDR.all = 0x0020;    // Take I2C out of reset
                                            // Stop I2C when suspended


}

相关帖子

沙发
yangguangaisha|  楼主 | 2014-7-24 08:18 | 只看该作者
求助,,,大家帮我看看我的28027 i2c模块程序哪里出错了

使用特权

评论回复
板凳
shenmu2012| | 2014-7-24 21:02 | 只看该作者
这程序怎么了?是输出的结果不对么?还涉及?

使用特权

评论回复
地板
shenmu2012| | 2014-7-24 21:05 | 只看该作者
24c02的存储芯片的我原来用过的,挺好用的。

使用特权

评论回复
5
shenmu2012| | 2014-7-24 21:05 | 只看该作者
这里主要就看你的I2C总线的使用是否正确了。。检查下该总线的吧。

使用特权

评论回复
6
zhangmangui| | 2014-7-24 23:34 | 只看该作者
先用示波器等工具看看输出波形   确保DSP这边没有问题
然后确保硬件上上拉电阻等都合理

使用特权

评论回复
7
angerbird| | 2014-7-27 17:58 | 只看该作者
这个检查下你的I2C总线的是否正常被启动的吧。

使用特权

评论回复
8
tianli1980| | 2014-7-29 14:06 | 只看该作者
建议楼主看程序的同时,也要看看TI关于I2C的手册。

使用特权

评论回复
9
jxmzzr| | 2014-7-29 17:28 | 只看该作者
建议楼主先用示波器看看有没有波形输出 ,排除IIC是否配置合适 。   


使用特权

评论回复
10
1831249703| | 2015-4-17 17:01 | 只看该作者
您好,你解决了吗?我最近也在搞i2c但是一直不出波形啊

使用特权

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

本版积分规则

168

主题

1522

帖子

3

粉丝