数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 11802|回复: 30

[C51] RX8025AC时钟芯片驱动有问题的新手可以看看

[复制链接]
发表于 2020-1-8 10:19:29 | 显示全部楼层
本帖最后由 infozx 于 2020-1-8 10:26 编辑

我搞得那个高频烙铁里用了这个Epson得时钟芯片8025T,折腾了几次,写地址没问题;但发现读取得寄存器地址位跟实际地址漂移了1个,不知道为啥,反正能读,后来就一直那样了懒得深究。

8025能获取得厂家标准资料不多,都是犹抱琵琶半遮面得;上一个跟这种一样蛋疼得芯片是LT8920,datasheet讳莫如深,几十个寄存器配置参数跟神符一样,没有厂家人员得支持只能浑水摸鱼。

  1. void R8025AC_Read(u8 sadd, u8 *buf, u8 len)
  2. {
  3.         u8 i;
  4.     i=0;
  5.    
  6.     while(I2C_GetFlagStatus(I2C_FLAG_BUSBUSY));  //等待总线空闲
  7.     I2C_AcknowledgeConfig(I2C_ACK_CURR);  //开启发送ACK
  8.    
  9.         I2C_GenerateSTART(ENABLE);  //开启I2C起始位
  10.    
  11.     I2C_GenerateSTART(ENABLE);  //开启I2C起始位
  12.     while(!I2C_CheckEvent(I2C_EVENT_MASTER_MODE_SELECT));   /*EV5,主模式*/
  13.     I2C_Send7bitAddress(0x64, I2C_DIRECTION_TX);   //发送iic从器件物理地址,最低位0,写操作; 器件地址0x64
  14.     while(!I2C_CheckEvent(I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));
  15.    
  16.     I2C_SendData((sadd<<4)|0x01); //寄存器地址
  17.     while (!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_TRANSMITTED));
  18.    
  19.         //---//
  20.     I2C_GenerateSTART(ENABLE);//开启I2C1起始位
  21.     while(!I2C_CheckEvent(I2C_EVENT_MASTER_MODE_SELECT));   /*EV5,主模式*/
  22.     I2C_Send7bitAddress(0x65, I2C_DIRECTION_RX);   //发送iic从器件物理地址,最低位1,读操作; 器件地址 --
  23.     while(!I2C_CheckEvent(I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));
  24.    
  25.    
  26.         for(i=0;i<len-1;i++)
  27.         {
  28.         while (!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_RECEIVED));  //等待数据接收器非空
  29.         buf[i]=I2C_ReceiveData();    //读取一个字节数据
  30.         }
  31.        
  32.     while (!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_RECEIVED));  //等待数据接收器非空
  33.     buf[i]=I2C_ReceiveData();    //读取最后一个字节数据
  34.        
  35.     I2C_AcknowledgeConfig(I2C_ACK_NONE);  //停止发送ACK

  36.     I2C_GenerateSTOP(ENABLE);//发送STOP,关闭I2C1总线
  37. }

  38. void R8025AC_Write(u8 sadd,u8 *buf,u8 len)
  39. {
  40.         u8 i;
  41.     i=0;
  42.    
  43.     while(I2C_GetFlagStatus(I2C_FLAG_BUSBUSY));  //等待总线空闲
  44.     I2C_AcknowledgeConfig(I2C_ACK_CURR);  //开启发送ACK
  45.    
  46.         I2C_GenerateSTART(ENABLE);  //开启I2C起始位
  47.    
  48.     I2C_GenerateSTART(ENABLE);  //开启I2C起始位
  49.     while(!I2C_CheckEvent(I2C_EVENT_MASTER_MODE_SELECT));   /*EV5,主模式*/
  50.     I2C_Send7bitAddress(0x64, I2C_DIRECTION_TX);   //发送iic从器件物理地址,最低位0,写操作; 器件地址0x64
  51.     while(!I2C_CheckEvent(I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));
  52.    
  53.     I2C_SendData((sadd<<4)|0x01); //寄存器地址
  54.     while (!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_TRANSMITTED));
  55.    
  56.         for(i=0;i<len;i++)
  57.         {
  58.         while (!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_TRANSMITTED));  //等待数据发送完毕
  59.         I2C_SendData(buf[i]);    //发送一个字节数据
  60.         }   
  61.        
  62.         I2C_GenerateSTOP(ENABLE);//发送STOP,关闭I2C1总线
  63. }
复制代码



回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 微信登录

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-6-25 18:39 , Processed in 0.109200 second(s), 9 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

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