📄 ds2411.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 + -