搜索
bottom↓
回复: 2

G2Launchpad 硬件IIC 调试问题啊!两天了,卡在循环里面

[复制链接]

出0入0汤圆

发表于 2014-5-5 23:28:58 | 显示全部楼层 |阅读模式
我最近在G2553 Launchpad 用模拟IIC方法调试出 BH1750光照强度模块,现在想实现用硬件IIC查询法调试。为了便于清晰,我只上传了我的 iic初始化和 iic写函数。用CCSV5编译器进行调试的时候,程序总是卡在图中红线位置。不知道为啥啊?真心给跪了。都调试了两天,搞不懂原因,求大神们指点指点小弟!另外还有个问题是,如何收到从机发来的应答信号(ACK)?
/*
* I2C_Init(I2C_MODE i2c_mode, UCSSELx ucsselx)
* 初始化I2C
*
* 参数:
*         i2c_mode --I2C主从模式设置
*      |__        Slave
*      |__        Master
*      |
*         ucsselx --I2C时钟信号选择
*      |__        UCLKI
*      |__        ACLK
*      |__        SMCLK
* 输出:
*    无
*
*/
void I2C_Init(I2C_MODE i2c_mode, UCSSELx ucsselx)
{
        _disable_interrupts();

        P1SEL |= BIT6 + BIT7;                 // GPIO 配置为USCI_B0功能
        P1SEL2|= BIT6 + BIT7;                 // GPIO 配置为USCI_B0功能
        // Own address is a 7-bit address | Address slave with 7-bit address | Single master environment
        switch(i2c_mode)
        {
                case Slave:
                        UCB0CTL0 = UCMODE_3 + UCSYNC;                         //同步通信I2C从机状态
                        break;
                case Master:
                        UCB0CTL0 = UCMST + UCMODE_3 + UCSYNC;         //同步通信I2C主机状态
                        break;
        }
        switch(ucsselx)
        {
                case UCLKI:
                        UCB0CTL1 = UCSSEL_0 + UCSWRST;                         // Use UCLKI,USCI Software Reset
                        break;
                case ACLK:
                        UCB0CTL1 = UCSSEL_1 + UCSWRST;                         // Use ACLK,USCI Software Reset
                        break;
                case SMCLK:
                        UCB0CTL1 = UCSSEL_2 + UCSWRST;                         // Use SMCLK,USCI Software Reset
                        break;
        }
        UCB0BR0 =I2C_BAUDRATE_DIV ;        // 除了分频系数,实际波特率还与时钟有关
        UCB0BR1 = 0;                                 // 这一级别的分频一般不启用
        UCB0I2CSA = SLAVE_ADDR;         // I2C从机地址,可在宏定义中修改
        UCB0CTL1 &= ~UCSWRST;                 // 开启I2C

        _enable_interrupts();
}


void I2C_WriteData(uint8 data)
{
        I2C_Init(Master,SMCLK);
        i2c_delay_ms(1);
        while((UCB0CTL1 & UCTXSTP));         // 确保总线空闲
        UCB0CTL1 |= UCTR + UCTXSTT;     // I2C TX, start condition
        while((IFG2 & UCB0TXIFG)==0);         // UCB0TXIFG is set when UCB0TXBUF is empty.
        UCB0TXBUF = SlaveAddress;                // Load TX buffer
       while((IFG2 & UCB0TXIFG)==0);        // UCB0TXIFG is set when UCB0TXBUF is empty.
        UCB0TXBUF = data;
        while((IFG2 & UCB0TXIFG)==0);         // UCB0TXIFG is set when UCB0TXBUF is empty.
        UCB0CTL1 |= UCTXSTP;                  // I2C stop condition
        i2c_delay_ms(1);
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

 楼主| 发表于 2014-5-6 09:14:36 | 显示全部楼层
求大神指导啊!!!!

出0入0汤圆

 楼主| 发表于 2014-5-6 13:27:31 | 显示全部楼层
自己顶顶,怕沉了。。。。就没有大神出来说句话啊、、、、
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-27 03:12

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表