⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ds2411.h

📁 DS2411是DALLAS公司的电子序列号芯片
💻 H
字号:
/******************************************************************************


 ******************************************************************************
  文 件 名   : ds2411.h
  版 本 号   : 初稿
  作    者   : liqin
  生成日期   : 2007年6月23日
  最近修改   :
  功能描述   : ds2411.cpp 的头文件
  函数列表   :
  修改历史   :
  1.日    期   : 2007年6月23日
    作    者   : liqin
    修改内容   : 创建文件

******************************************************************************/
#ifndef __DS2411_H__
#define __DS2411_H__
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <string.h>
#include "vdmlib.h"
#include "globalpara.h"

/*----------------------------------------------*
 * 宏定义										*
 *----------------------------------------------*/
#define CPU_WR_32BIT_REG(base, port, value) do {*(volatile unsigned int *)(base+port)=value; } while(0)
#define	UART2_BASE				(0x00501300)
#define UART_ALT_FUNCTION		(0x30)
	
#define PIO0_BASE				(0x00500600)
#define PIO2_BASE				(0x00501B00)
	
#define PIO_INT_REG_OFFSET		(0x00)
#define PIO_DATA_REG_OFFSET		(0x04)
#define PIO_DIR_REG_OFFSET		(0x08)
#define PIO_POL_REG_OFFSET		(0x0C)
#define PIO_INTEN_REG_OFFSET	(0x10)
#define PIO_NE_INTEN_REG_OFFSET	(0x14)
	
#define MAKE_PIOREG(x, n)		((n << x) | (0x10000 << x))

//定义1-wire标准时序中各种操作所需的延迟,单位时us
#define	u32ResetLow 		 480	//主机初始化出发时序
#define	u32WaitResetAck 	 70	//主机等待初始化应答
#define	u32FinishReset		 410	//完成初始化时序,480-70
#define	u32WriteOneLow		 6	//启动写 '1' 的时序
#define	u32WriteOneHigh 	 64	//完成写 '1' 的时序
#define	u32WriteZeroLow 	 60	//写'0'需要保持60us的低电平
#define	u32WriteZeroHigh	 10	//写'0',在拉高电平后保持10us
#define	u32ReadLow			 4	//读时隙开始时拉低
#define	u32ReadBeforSample	 8	//读时隙开始后15us内采样, 6+8=14us
#define	u32FinishRead		 65	//一个读时隙需要至少60us,60-6-8 = 56


//定义存放SN的基地址和偏移地址
#define SN_DEV_ADDR		0xA0
#define SN_OFFSET		0xF0

#if 1
#define I2C_MASTER_BASE_ADDRESS		(0x500800)

#define I2C_MASTER_CONFIG_OFFSET	(0x00)
#define I2C_MASTER_CLK_DIV_OFFSET	(0x04)
#define I2C_MASTER_DEV_ADDR_OFFSET	(0x08)
#define I2C_MASTER_ADR_OFFSET		(0x0c)
#define I2C_MASTER_DATAOUT_OFFSET	(0x10)
#define I2C_MASTER_DATAIN_OFFSET	(0x14)
#define I2C_MASTER_STATUS_OFFSET	(0x18)
#define I2C_MASTER_STARTXFER_OFFSET	(0x1c)
#define I2C_MASTER_BYTE_CNT_OFFSET	(0x20)
#define I2C_MASTER_INTEN_OFFSET		(0x24)
#define I2C_MASTER_INT_OFFSET		(0x28)

#define I2C_MASTER_CONFIG_V			(I2C_MASTER_BASE_ADDRESS + I2C_MASTER_CONFIG_OFFSET)
#define I2C_MASTER_CLK_DIV_V		(I2C_MASTER_BASE_ADDRESS + I2C_MASTER_CLK_DIV_OFFSET)
#define I2C_MASTER_DEV_ADDR_V		(I2C_MASTER_BASE_ADDRESS + I2C_MASTER_DEV_ADDR_OFFSET)
#define I2C_MASTER_ADR_V			(I2C_MASTER_BASE_ADDRESS + I2C_MASTER_ADR_OFFSET)
#define I2C_MASTER_DATAOUT_V		(I2C_MASTER_BASE_ADDRESS + I2C_MASTER_DATAOUT_OFFSET)
#define I2C_MASTER_DATAIN_V			(I2C_MASTER_BASE_ADDRESS + I2C_MASTER_DATAIN_OFFSET)
#define I2C_MASTER_STATUS_V			(I2C_MASTER_BASE_ADDRESS + I2C_MASTER_STATUS_OFFSET)
#define I2C_MASTER_STARTXFER_V		(I2C_MASTER_BASE_ADDRESS + I2C_MASTER_STARTXFER_OFFSET)
#define I2C_MASTER_BYTE_CNT_V		(I2C_MASTER_BASE_ADDRESS + I2C_MASTER_BYTE_CNT_OFFSET)
#define I2C_MASTER_INTEN_V			(I2C_MASTER_BASE_ADDRESS + I2C_MASTER_INTEN_OFFSET)
#define I2C_MASTER_INT_V			(I2C_MASTER_BASE_ADDRESS + I2C_MASTER_INT_OFFSET)

#define SYS_CLK						108000	// 系统时钟为108M
#define CLK_RATE					10		// I2C时钟定义为10K
#define CLK_DIV						((SYS_CLK / CLK_RATE) / 2)
#endif



/*----------------------------------------------*
 * 枚举定义										*
 *----------------------------------------------*/
typedef enum GPIO_DIR
{
    GPIO_IN		= 0,
	GPIO_OUT	= 1
}GPIO_DIR_ENUM;

/*----------------------------------------------*
 * 结构定义										*
 *----------------------------------------------*/
typedef struct tagSN
{
	/*
    UINT8 u8FamilyCode;  //8bit家族码,ds2411应为0x01
    UINT8 SerialNum[6];  //48bit序列码
    UINT8 u8CrcCode;	 //8bit校验码
    */
    //对DS2411的每个位都做判断
    UINT8  SerialNum[8];
} SN, *pSN;

BOOL CheckCopyRight(void);
UINT8 crc8(unsigned char *pDst,unsigned char length);
BOOL GetSerialNum(SN * pSn);
void InitGPIO(void);
UINT16 OWReadBit(void);
UINT8 OWReadByte(void);
UINT16 OWReset(void);
void OWWriteBit(UINT16 value);
void OWWriteByte(UINT8 value);
UINT16 ReadGPIOBit(UINT32 Base, UINT8 Bit);
void SetGPIODirection(UINT32 Base, UINT8 Bit, GPIO_DIR_ENUM Dir);
BOOL StoreSerialNum(void);
void WriteGPIOBit(UINT32 Base, UINT8 Bit, UINT16 Value);

#endif /* __DS2411_H__ */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -