1493|0

2015

帖子

0

TA的资源

纯净的硅(中级)

楼主
 

MSP430F5438 I2C学习—AT24C02代码实现 [复制链接]

void ucb0_config(void)  
{  
  P3SEL &= ~BIT2;                        // P3.2@UCB0SCL  
  P3DIR |= BIT2;  
  P3OUT |= BIT2;  
  // 输出9个时钟以恢复I2C总线状态  
  for( uint8_t i= 0; i <9 ; i++)  
  {  
    P3OUT |= BIT2;  
    __delay_cycles(8000);  
    P3OUT &= ~BIT2;  
    __delay_cycles(8000);  
  }  

  P3SEL |= (BIT1 + BIT2);                // P3.1@UCB0SDAP3.2@UCB0SCL  
  // P3.1@ISP.1 P3.2@ISP.5  

  UCB0CTL1 |= UCSWRST;  
  UCB0CTL0 = UCMST+ UCMODE_3 + UCSYNC;  // I2C主机模式  
  UCB0CTL1 |= UCSSEL_2;                  // 选择SMCLK  
  UCB0BR0 = 40;  
  UCB0BR1 = 0;  
  UCB0CTL0 &= ~UCSLA10;                  // 7位地址模式  
  UCB0I2CSA = EEPROM_ADDRESS;           // EEPROM地址  
  UCB0CTL1 &= ~UCSWRST;  
代码分析

      I2C从设备的地址一般有以下通俗说法——7位地址,写地址(写控制字)和读地址(读控制字)。1个I2C通信的控制字节(I2C启动之后传送的第一个字节)由7位I2C地址和1位读写标志位组成,7位I2C地址即7位地址,若读写标志位为读标志(读写标志位置位)加上7位I2C地址便组成了读地址(读控制字),若读写标志位为写标志(读写标志位清零)加上7位地址便组成了写地址(写控制字)。例如AT24C02的I2C7位地址为0x50,读地址(读控制字)为0xA1,写地址(写控制字)为0xA1。

在MSP430F5系列中,I2CSA地址寄存器应写入7位地址,参照上面的例子应写入0X50。至于I2C读写位的控制由CTL1寄存器完成,用户无需干预。

在I2C设置开始之前,可以先通过SCL端口发送9个时钟信号,该时钟信号可以是I2C从机芯片从一种错误的通信状态恢复,虽然这9个时钟信号不起眼但是对于调试过程来说非常有用。例如在调试过程中,错误的发送了停止位,若再次启动调试则I2C从设备仍处于一种错误的状态,这9个时钟信号可以把I2C从设备从错误的状态“拉”回来。

 
点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表