S35390驱动程序
/* 时钟芯片驱动程序 */
/*******************************************************************/
#include "msp430x41x.h"
#include "delay.h"
#include "iodefine.h"
#include "all_variable.h"
/*****************************************************************/
/* 内部函数声明 */
/*****************************************************************/
void S35390A_SDA_HIGH(void); //SDA脚输出高电平
void S35390A_SDA_LOW(void); //SDA脚输出低电平
void S35390A_SCL_HIGH(void); //SCK脚输出高电平
void S35390A_SCL_LOW(void); //SDA脚输出低电平
void S35390A_START(void); //启动S35390
void S35390A_STOP(void); //停止S35390
unsigned char S35390A_GETACK(void); //获得ACK信号
void S35390A_SETACK(void); //输出ACK信号
void S35390A_SETNCK(void); //输出NACK信号
unsigned char S35390A_RECEIVE_BYTE(void); //从S35390接收一个字节数据
void S35390A_SEND_BYTE(unsigned char senddata); //向S35390发送一个字节数据
extern void DELAYeightNOP(void);
extern void DELAYthreeNOP(void);
extern void SetS35390ATime(void);
extern void readS35390ATime(void);
unsigned char S35390A_WRITE(unsigned char opt,unsigned char count);//向S35390A写数据
unsigned char S35390A_READ(unsigned char opt,unsigned char count); //从S35390A读数据
unsigned char S35390A_SWAP_BYTE(unsigned char swdata); //字节首尾交换
unsigned char S35390A_CACULATE_WEEK(unsigned char year,unsigned char month,unsigned char date);//通过年月日计算星期
void S35390A_INIT(void);//S35390A初始化
/*********************************************************
Function: S35390A_SDA_HIGH(void)
Description: SDA脚输出高电平
Input: none
output: none
Return: none
**********************************************************/
void S35390A_SDA_HIGH(void)
{
S35390A_SDA_DIR|=S35390A_SDA; // set SDA as output pin
S35390A_SDA_OUT|=S35390A_SDA; //set SDA pin high
_NOP();
return;
}
/**********************************************************
Function: S35390A_SDA_low(void)
Description: SDA脚输出低电平
Input: none
output: none
Return: none
**********************************************************/
void S35390A_SDA_LOW(void)
{
S35390A_SDA_DIR|=S35390A_SDA; //set SDA as output pin
S35390A_SDA_OUT&=~S35390A_SDA; //set SDA pin low
_NOP();
return;
}
/**********************************************************
Function: S35390A_SCL_HIGH(void)
Description: SCK脚输出高电平
Input: none
output: none
Return: none
**********************************************************/
void S35390A_SCL_HIGH(void)
{
S35390A_SCL_DIR|=S35390A_SCL; // set SCK as output pin
S35390A_SCL_OUT|=S35390A_SCL; //set SCK pin high
_NOP();
return;
}
/**********************************************************
Function: S35390A_SCL_low(void)
Description: SDA脚输出低电平
Input: none
output: none
Return: none
**********************************************************/
void S35390A_SCL_LOW(void)
{
S35390A_SCL_DIR|=S35390A_SCL; //set SCK as output pin
S35390A_SCL_OUT&=~S35390A_SCL; //set SCK pin low
_NOP();
return;
}
/**********************************************************
Function: S35390A_RECEIVE_BYTE(void)
Description: 从S35390接收一个字节数据
Input: none
output: none
Return: none
**********************************************************/
unsigned char S35390A_RECEIVE_BYTE(void)
{
unsigned char S35390A_buf=0;
unsigned char w;
S35390A_SDA_DIR &= ~S35390A_SDA; //输入方式
//S35390A_SDA_OUT|=1
for(w=0; w<8; w++)
{
S35390A_SCL_HIGH();
if((S35390A_SDA_IN & S35390A_SDA))
{
S35390A_buf |= (1
S35390A_SCL_LOW();
DELAYeightNOP();
}
return(S35390A_buf);
}
/**********************************************************
Function: S35390A_SEND_BYTE(void)
Description: 向S35390发送一个字节数据
Input: none
output: none
Return: none
**********************************************************/
void S35390A_SEND_BYTE(unsigned char senddata)
{
unsigned char w;
for(w=0;w<8;w++)
{
if(senddata&0x80)
{
S35390A_SDA_HIGH();
}
else
{
S35390A_SDA_LOW();
}
S35390A_SCL_HIGH();
DELAYthreeNOP();
senddata<=1;
S35390A_SCL_LOW();
DELAYeightNOP();
}
}
S35390驱动程 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)