单片机驱动SD3077时钟芯片

SD3077时钟芯片驱动编写及初始时间读写、用户RAM数据读写功能测试
摘要由CSDN通过智能技术生成

一、前言       

        前面辛辛苦苦找了一堆资料关于SD3077时钟(给我找麻了,资料很多但几乎都是是要币的),肝胆了一晚上找到了一个免费的资料获取方式SD3077、SD3078时钟芯片数据手册、例程https://blog.csdn.net/wfm700305/article/details/127076815?spm=1001.2014.3001.5502,既然资料找到了那就动手看看实际效果。

二、硬件部分

         我这里控制端用的是南京沁恒微电子的CH579主控,芯片资料和例程他们官网有可以直接下载我这里就不再解释了。至于硬件电路很简单就CH579最小主控 + SD3077参考电路(数据手册15页中部),显示部分手上没东西就用串口调试把数据打印出来。

三、驱动部分(参照芯片数据手册)       

1、SD3077时钟芯片驱动——开始、停止信号时序分析

        开始,停止时序如上图,这里就不解释(有点太基础了)代码如下:

开始信号:

/*********************************************
 * 函数名:IIC_Start_SD3077
 * 描  述:开启IIC总线
 * 输  入:无
 * 输  出:无
 ********************************************/
static UINT8 IIC_Start_SD3077(void)
{
	SDA_OUT_SD3077();     //sda线输出
	IIC_SDA_H_SD3077;	  	  
	IIC_SCL_H_SD3077;
	mDelayuS(4);
	if(!READ_SDA_SD3077)    return FALSE;	//SDA线为低电平则总线忙,退出
 	IIC_SDA_L_SD3077;    //START:when CLK is high,DATA change form high to low 
	mDelayuS(4);
	while(READ_SDA_SD3077)    return FALSE; 
	IIC_SCL_L_SD3077;    //钳住IIC总线,准备发送或接收数据
	mDelayuS(4);
	return TRUE;	
}

停止信号: 

/*********************************************
 * 函数名:IIC_Stop_SD3077
 * 描  述:释放IIC总线
 * 输  入:无
 * 输  出:无
 ********************************************/
static void IIC_Stop_SD3077(void)
{
    SDA_OUT_SD3077();    //sda线输出
	IIC_SCL_L_SD3077;
	IIC_SDA_L_SD3077;    //STOP:when CLK is high DATA change form low to high
	mDelayuS(4);
	IIC_SCL_H_SD3077; 
	IIC_SDA_H_SD3077;    //发送IIC总线结束信号
	mDelayuS(4);
}

2、SD3077时钟芯片驱动——数据传输准备(应答信号)

         IIC是按字节来传输的,当每传输完一个字节的数据,后面必须紧跟一个校验位,这个校验位是接收端通过控制SDA(数据线)来实现的,以提醒发送端数据我这边已经接收完成。(SDA=0为ACK 接收完成 ;SDA=1为NACK 繁忙中;)
        主机应答: 传输完一个字节数据以后(数据传输方向:从机——>主机),主机控制(此时是接收端)SDA来提醒从机(发送端)我这边接受完成;
        从机应答: 传输完一个字节数据以后(数据传输方向:主机——>从机),从机控制(此时是接收端)SDA来提醒主机(发送端)我这边接受完成

/*********************************************
 * 函数名:IIC_Ack_SD3077
 * 描  述:发送ASK
 * 输  入:无
 * 输  出:无
 ********************************************/
static void IIC_Ack_SD3077(void)
{
	IIC_SCL_L_SD3077;
	SDA_OUT_SD3077();
	IIC_SDA_L_SD3077;
	mDelayuS(4);
	IIC_SCL_H_SD3077;
	mDelayuS(4);
	IIC_SCL_L_SD3077;
}
/*********************************************
 * 函数名:IIC_NAck_SD3077
 * 描  述:发送NOASK
 * 输  入:无
 * 输  出:无
 ********************************************/
static void IIC_NoAck_SD3077(void)
{
	IIC_SCL_L_SD3077;
	SDA_OUT_SD3077();
	IIC_SDA_H_SD3077;
	mDelayuS(2);
	IIC_SCL_H_SD3077;
	mDelayuS(2);
	IIC_SCL_L_SD3077;
}
/
  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值