查看: 3011|回复: 2

[求助] ke02 iic 求教

[复制链接]

该用户从未签到

4

主题

22

帖子

0

注册会员

Rank: 2

积分
115
最后登录
2020-8-27
发表于 2015-1-7 13:43:58 | 显示全部楼层 |阅读模式
调试了几天的iic  读fm24c04,老是不行,求救
void data_read1(void)
{unsigned char x1,i,h,temp,m[15];
unsigned int x,y,z;
   
     I2C0_C1 |=  I2C_C1_IICEN_MASK;    //使能IIC
     I2C0_C1 &=~ I2C_C1_RSTA_MASK;
     //--------------------
     temp    = I2C0_S;          //清中断   
     I2C0_S |= I2C_S_IICIF_MASK;//清中断
     //--------------------
     I2C0_C1 &=~ I2C_C1_MST_MASK ;     
     I2C0_C1 |= I2C_C1_TX_MASK ;   //写使能
     I2C0_C1 |= I2C_C1_MST_MASK ;  //开始信号
     I2C0_S |= I2C_S_IICIF_MASK;//清中断
     //-----------------------
     I2C0_D = 0xA0;                   //发送芯片地址,写命令
     asm("nop");asm("nop"); asm("nop");asm("nop");
     while(!I2C_S_IICIF_MASK )
             ;
     //-------------------
     temp    = I2C0_S;          //清中断   
     I2C0_S |= I2C_S_IICIF_MASK;//清中断
     //===================
     I2C0_D=(char)x;            //发送寄存器地址
     asm("nop");asm("nop"); asm("nop");asm("nop");
     while(!I2C_S_IICIF_MASK)
            ;
     temp    = I2C0_S;          //清中断   
     I2C0_S |= I2C_S_IICIF_MASK;//清中断
     //--------------------
     I2C0_C1 |= I2C_C1_RSTA_MASK;   //重启
     //--------------------
     I2C0_D = 0xA1;                   //发送读命令
     asm("nop");asm("nop"); asm("nop");asm("nop");
     while(!I2C_S_IICIF_MASK)
           ;
     temp    = I2C0_S;          //清中断   
     I2C0_S |= I2C_S_IICIF_MASK;//清中断
     //--------------------
     I2C0_S &=~ I2C_S_SRW_MASK;
     I2C0_C1 &=~ I2C_C1_TX_MASK ;   //写使能
     data1=I2C0_D;
     //--------------------
     for(i=0;i<15;i++)
       {
        while(!I2C_S_IICIF_MASK)
              ;
        temp = I2C0_S;
        I2C0_S |= I2C_S_IICIF_MASK;//清中断  
        m[i]=I2C0_D;       //读一个字节
        }
     //=====================================================
     I2C0_C1 &=~ I2C_C1_TX_MASK ;   //清写使能   
     I2C0_C1 &=~ I2C_C1_MST_MASK ;   //产生一个停止信号   
     I2C0_C1 &=~ I2C_C1_IICEN_MASK ;    //NO使能IIC
   }
我知道答案 目前已有2人回答
回复

使用道具 举报

该用户从未签到

4

主题

22

帖子

0

注册会员

Rank: 2

积分
115
最后登录
2020-8-27
 楼主| 发表于 2015-1-7 13:52:58 | 显示全部楼层
这个程序在aw32上面运行没问题,在ke02上面咋就不行了?求帮助,多谢!
总线10M,
速度设置   I2C0_F = (I2C_F_MULT(0x02) | I2C_F_ICR(0x08));  即SCL  89k,sda 2.6微妙
具体如下
void I2C0_Init(void)
{
  
SIM_PINSEL |= SIM_PINSEL_IICPS_MASK;
SIM_SCGC |= SIM_SCGC_IIC_MASK;   //打开I2C0模块时钟
  /* I2C0_FLT: SHEN=0,STOPF=1,SSIE=0,STARTF=1,FLT=0 */
  I2C0_FLT = (I2C_FLT_STOPF_MASK | IIC_FLT_STARTF_MASK | IIC_FLT_FLT(0x00));
  /* I2C0_A1: AD=0,??=0 */
  I2C0_A1 = I2C_A1_AD(0x00);
  /* I2C0_C2: GCAEN=0,ADEXT=0,SBRC=1,RMEN=0,AD=0 */
  I2C0_C2 = (uint8_t)((I2C0_C2 & (uint8_t)~(uint8_t)(
             //I2C_C2_GCAEN_MASK |   
             I2C_C2_ADEXT_MASK |
             I2C_C2_RMEN_MASK |
             I2C_C2_AD(0x07)
            )) | (uint8_t)(
             I2C_C2_SBRC_MASK
            ));
  /* I2C0_RA: RAD=0,??=0 */
  I2C0_RA = I2C_RA_RAD(0x00);
  /* I2C0_F: MULT=2,ICR=0x14 */
    I2C0_F = (I2C_F_MULT(0x02) | I2C_F_ICR(0x08));
  /* I2C0_A2: SAD=0x61,??=0 */
  I2C0_A2 = I2C_A2_SAD(0x61);
  /* I2C0_SMB: FACK=0,ALERTEN=0,SIICAEN=0,TCKSEL=0,SLTF=1,SHTF1=0,SHTF2=1,SHTF2IE=0 */
  I2C0_SMB = (I2C_SMB_SLTF_MASK | I2C_SMB_SHTF2_MASK);  
  /* I2C0_SLTH: SSLT=0 */
  I2C0_SLTH = I2C_SLTH_SSLT(0x00);
  /* I2C0_SLTL: SSLT=0 */
  I2C0_SLTL = I2C_SLTL_SSLT(0x00);
  /* I2C0_S: TCF=0,IAAS=0,BUSY=0,ARBL=1,RAM=0,SRW=0,IICIF=1,RXAK=0 */
  I2C0_S = (I2C_S_ARBL_MASK | I2C_S_IICIF_MASK);
  /* I2C0_C1: IICEN=1,IICIE=0,MST=0,TX=0,TXAK=0,RSTA=0,WUEN=0 */
  I2C0_C1 = (uint8_t)((I2C0_C1 & (uint8_t)~(uint8_t)(
             //I2C_C1_IICIE_MASK |
             //I2C_C1_MST_MASK |
             I2C_C1_TX_MASK |
             I2C_C1_TXAK_MASK |//使能I2C0自动应答信号
             I2C_C1_RSTA_MASK |
             I2C_C1_WUEN_MASK
            )) | (uint8_t)(
             I2C_C1_IICEN_MASK
            ));
  I2C0_FLT |= 0x03;
  /* I2C0_C1: MST=1 */
  I2C0_C1 |= I2C_C1_MST_MASK;
}
回复 支持 反对

使用道具 举报

该用户从未签到

4

主题

22

帖子

0

注册会员

Rank: 2

积分
115
最后登录
2020-8-27
 楼主| 发表于 2015-1-7 13:57:04 | 显示全部楼层
这个程序在aw32上面运行没问题,在ke02上面咋就不行了?求帮助,多谢!
总线10M,
速度设置   I2C0_F = (I2C_F_MULT(0x02) | I2C_F_ICR(0x08));  即SCL  89k,sda 2.6微妙
整理一下
void I2C0_Init(void)
{  
SIM_PINSEL |= SIM_PINSEL_IICPS_MASK;
SIM_SCGC |= SIM_SCGC_IIC_MASK;   //打开I2C0模块时钟
   I2C0_FLT = (I2C_FLT_STOPF_MASK | IIC_FLT_STARTF_MASK | IIC_FLT_FLT(0x00));
   I2C0_A1 = I2C_A1_AD(0x00);
   I2C0_C2 = (uint8_t)((I2C0_C2 & (uint8_t)~(uint8_t)(
              I2C_C2_GCAEN_MASK |   
              I2C_C2_ADEXT_MASK |
              I2C_C2_RMEN_MASK |
              I2C_C2_AD(0x07)
             )) | (uint8_t)(
              I2C_C2_SBRC_MASK
             ));
   I2C0_RA = I2C_RA_RAD(0x00);
   I2C0_F = (I2C_F_MULT(0x02) | I2C_F_ICR(0x08));
   I2C0_A2 = I2C_A2_SAD(0x61);
   I2C0_SMB = (I2C_SMB_SLTF_MASK | I2C_SMB_SHTF2_MASK);  
   I2C0_SLTH = I2C_SLTH_SSLT(0x00);
   I2C0_SLTL = I2C_SLTL_SSLT(0x00);
   I2C0_S = (I2C_S_ARBL_MASK | I2C_S_IICIF_MASK);
   I2C0_C1 = (uint8_t)((I2C0_C1 & (uint8_t)~(uint8_t)(
              I2C_C1_IICIE_MASK |
              I2C_C1_MST_MASK |
              I2C_C1_TX_MASK |
              I2C_C1_TXAK_MASK |//使能I2C0自动应答信号
             I2C_C1_RSTA_MASK |
              I2C_C1_WUEN_MASK
             )) | (uint8_t)(
              I2C_C1_IICEN_MASK
             ));
   I2C0_FLT |= 0x03;
   I2C0_C1 |= I2C_C1_MST_MASK;
}
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-7-23 12:47 , Processed in 0.081570 second(s), 22 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

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