|
|
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
// File name : pci_drv.h
|
|
|
// Version : V0.1
|
|
|
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
#ifndef __PCI_DRV_H__
|
|
|
#define __PCI_DRV_H__
|
|
|
|
|
|
#include "type.h"
|
|
|
#include "pci_reg.h"
|
|
|
#include "memmap.h"
|
|
|
|
|
|
#define PCI ((PCI_TypeDef *)(PCI_BASE_ADDR))
|
|
|
|
|
|
//nvram address
|
|
|
#define SRAM_START_ADDR_M4 (PCI_BASE_ADDR + 0x100)
|
|
|
#define SRAM_END_ADDR_M4 (PCI_BASE_ADDR + 0x180)
|
|
|
|
|
|
typedef enum
|
|
|
{
|
|
|
SDIO_PIN0 = 0,
|
|
|
SDIO_PIN1,
|
|
|
SDIO_PIN2,
|
|
|
SDIO_PIN3,
|
|
|
SDIO_PIN4,
|
|
|
SDIO_PIN5,
|
|
|
SDIO_PIN6,
|
|
|
SDIO_PIN7,
|
|
|
|
|
|
}SDIO_PINx;
|
|
|
|
|
|
#define IS_PCI_PINx(PIN) (((PIN) == SDIO_PIN0) || \
|
|
|
((PIN) == SDIO_PIN1) || \
|
|
|
((PIN) == SDIO_PIN2) || \
|
|
|
((PIN) == SDIO_PIN3) || \
|
|
|
((PIN) == SDIO_PIN4) || \
|
|
|
((PIN) == SDIO_PIN5) || \
|
|
|
((PIN) == SDIO_PIN6) || \
|
|
|
((PIN) == SDIO_PIN7))
|
|
|
|
|
|
//VD
|
|
|
#define PCI_VD_H_LEVEL_1 0x03 //3.62
|
|
|
#define PCI_VD_H_LEVEL_2 0x02 //3.70
|
|
|
#define PCI_VD_H_LEVEL_3 0x01 //3.79
|
|
|
#define PCI_VD_H_LEVEL_4 0x00 //3.88
|
|
|
|
|
|
#define PCI_VD_L_LEVEL_1 0x00 //1.42
|
|
|
#define PCI_VD_L_LEVEL_2 0x01 //1.48
|
|
|
#define PCI_VD_L_LEVEL_3 0x02 //1.53
|
|
|
#define PCI_VD_L_LEVEL_4 0x03 //1.59
|
|
|
#define PCI_VD_L_LEVEL_5 0x04 //1.66
|
|
|
#define PCI_VD_L_LEVEL_6 0x05 //1.73
|
|
|
#define PCI_VD_L_LEVEL_7 0x06 //1.81
|
|
|
#define PCI_VD_L_LEVEL_8 0x07 //1.90
|
|
|
|
|
|
//TD
|
|
|
#define PCI_TD_H_LEVEL_1 0x00 //coldest
|
|
|
#define PCI_TD_H_LEVEL_2 0x01 //colder
|
|
|
#define PCI_TD_H_LEVEL_3 0x02 //-39
|
|
|
#define PCI_TD_H_LEVEL_4 0x03 //-35
|
|
|
#define PCI_TD_H_LEVEL_5 0x04 //-31
|
|
|
#define PCI_TD_H_LEVEL_6 0x05 //-27
|
|
|
#define PCI_TD_H_LEVEL_7 0x06 //-23
|
|
|
#define PCI_TD_H_LEVEL_8 0x07 //-19
|
|
|
#define PCI_TD_H_LEVEL_9 0x08 //-15
|
|
|
#define PCI_TD_H_LEVEL_10 0x09 //-11
|
|
|
#define PCI_TD_H_LEVEL_11 0x0a //-7
|
|
|
#define PCI_TD_H_LEVEL_12 0x0b //-3
|
|
|
#define PCI_TD_H_LEVEL_13 0x0c //1
|
|
|
#define PCI_TD_H_LEVEL_14 0x0d //5
|
|
|
#define PCI_TD_H_LEVEL_15 0x0e //9
|
|
|
#define PCI_TD_H_LEVEL_16 0x0f //13
|
|
|
#define PCI_TD_H_LEVEL_17 0x10 //17
|
|
|
#define PCI_TD_H_LEVEL_18 0x11 //21
|
|
|
#define PCI_TD_H_LEVEL_19 0x12 //25
|
|
|
#define PCI_TD_H_LEVEL_20 0x13 //29
|
|
|
#define PCI_TD_H_LEVEL_21 0x14 //33
|
|
|
#define PCI_TD_H_LEVEL_22 0x15 //37
|
|
|
#define PCI_TD_H_LEVEL_23 0x16 //41
|
|
|
#define PCI_TD_H_LEVEL_24 0x17 //45
|
|
|
#define PCI_TD_H_LEVEL_25 0x18 //49
|
|
|
#define PCI_TD_H_LEVEL_26 0x19 //53
|
|
|
#define PCI_TD_H_LEVEL_27 0x1a //57
|
|
|
#define PCI_TD_H_LEVEL_28 0x1b //61
|
|
|
#define PCI_TD_H_LEVEL_29 0x1c //65
|
|
|
#define PCI_TD_H_LEVEL_30 0x1d //69
|
|
|
#define PCI_TD_H_LEVEL_31 0x1e //73
|
|
|
#define PCI_TD_H_LEVEL_32 0x1f //77
|
|
|
#define PCI_TD_H_LEVEL_33 0x20 //81
|
|
|
#define PCI_TD_H_LEVEL_34 0x21 //85
|
|
|
#define PCI_TD_H_LEVEL_35 0x22 //89
|
|
|
#define PCI_TD_H_LEVEL_36 0x23 //93
|
|
|
#define PCI_TD_H_LEVEL_37 0x24 //97
|
|
|
#define PCI_TD_H_LEVEL_38 0x25 //101
|
|
|
#define PCI_TD_H_LEVEL_39 0x26 //105
|
|
|
#define PCI_TD_H_LEVEL_40 0x27 //109
|
|
|
#define PCI_TD_H_LEVEL_41 0x28 //113
|
|
|
#define PCI_TD_H_LEVEL_42 0x29 //117
|
|
|
#define PCI_TD_H_LEVEL_43 0x2a //121
|
|
|
#define PCI_TD_H_LEVEL_44 0x2b //125
|
|
|
|
|
|
#define PCI_TD_L_LEVEL_1 0x0a //-39
|
|
|
#define PCI_TD_L_LEVEL_2 0x0b //-35
|
|
|
#define PCI_TD_L_LEVEL_3 0x0c //-31
|
|
|
#define PCI_TD_L_LEVEL_4 0x0d //-27
|
|
|
#define PCI_TD_L_LEVEL_5 0x0e //-23
|
|
|
#define PCI_TD_L_LEVEL_6 0x0f //-19
|
|
|
#define PCI_TD_L_LEVEL_7 0x10 //-15
|
|
|
#define PCI_TD_L_LEVEL_8 0x11 //-11
|
|
|
#define PCI_TD_L_LEVEL_9 0x12 //-7
|
|
|
#define PCI_TD_L_LEVEL_10 0x13 //-3
|
|
|
#define PCI_TD_L_LEVEL_11 0x14 //1
|
|
|
#define PCI_TD_L_LEVEL_12 0x15 //5
|
|
|
#define PCI_TD_L_LEVEL_13 0x16 //9
|
|
|
#define PCI_TD_L_LEVEL_14 0x17 //13
|
|
|
#define PCI_TD_L_LEVEL_15 0x18 //17
|
|
|
#define PCI_TD_L_LEVEL_16 0x19 //21
|
|
|
#define PCI_TD_L_LEVEL_17 0x1a //25
|
|
|
#define PCI_TD_L_LEVEL_18 0x1b //29
|
|
|
#define PCI_TD_L_LEVEL_19 0x1c //33
|
|
|
#define PCI_TD_L_LEVEL_20 0x1d //37
|
|
|
#define PCI_TD_L_LEVEL_21 0x1e //41
|
|
|
#define PCI_TD_L_LEVEL_22 0x1f //45
|
|
|
|
|
|
#define PCI_TD_TRIM_1 0x00 //-32
|
|
|
#define PCI_TD_TRIM_2 0x01 //-30
|
|
|
#define PCI_TD_TRIM_3 0x02 //-28
|
|
|
#define PCI_TD_TRIM_4 0x03 //-26
|
|
|
#define PCI_TD_TRIM_5 0x04 //-24
|
|
|
#define PCI_TD_TRIM_6 0x05 //-22
|
|
|
#define PCI_TD_TRIM_7 0x06 //-20
|
|
|
#define PCI_TD_TRIM_8 0x07 //-18
|
|
|
#define PCI_TD_TRIM_9 0x08 //-16
|
|
|
#define PCI_TD_TRIM_10 0x09 //-14
|
|
|
#define PCI_TD_TRIM_11 0x0a //-12
|
|
|
#define PCI_TD_TRIM_12 0x0b //-10
|
|
|
#define PCI_TD_TRIM_13 0x0c //-8
|
|
|
#define PCI_TD_TRIM_14 0x0d //-6
|
|
|
#define PCI_TD_TRIM_15 0x0e //-4
|
|
|
#define PCI_TD_TRIM_16 0x0f //-2
|
|
|
#define PCI_TD_TRIM_17 0x10 //0
|
|
|
#define PCI_TD_TRIM_18 0x11 //2
|
|
|
#define PCI_TD_TRIM_19 0x12 //4
|
|
|
#define PCI_TD_TRIM_20 0x13 //6
|
|
|
#define PCI_TD_TRIM_21 0x14 //7
|
|
|
#define PCI_TD_TRIM_22 0x15 //10
|
|
|
#define PCI_TD_TRIM_23 0x16 //12
|
|
|
#define PCI_TD_TRIM_24 0x17 //14
|
|
|
#define PCI_TD_TRIM_25 0x18 //16
|
|
|
#define PCI_TD_TRIM_26 0x19 //18
|
|
|
#define PCI_TD_TRIM_27 0x1a //20
|
|
|
#define PCI_TD_TRIM_28 0x1b //22
|
|
|
#define PCI_TD_TRIM_29 0x1c //24
|
|
|
#define PCI_TD_TRIM_30 0x1d //26
|
|
|
#define PCI_TD_TRIM_31 0x1e //28
|
|
|
#define PCI_TD_TRIM_32 0x1f //30
|
|
|
|
|
|
//sdio
|
|
|
#define PCI_SDIO_STATIC_CMP_DATA 0xFF
|
|
|
#define PCI_SDIO_STATIC_CHANNEL_0 0x01
|
|
|
#define PCI_SDIO_STATIC_CHANNEL_1 0x02
|
|
|
#define PCI_SDIO_STATIC_CHANNEL_2 0x04
|
|
|
#define PCI_SDIO_STATIC_CHANNEL_3 0x08
|
|
|
#define PCI_SDIO_STATIC_CHANNEL_4 0x10
|
|
|
#define PCI_SDIO_STATIC_CHANNEL_5 0x20
|
|
|
#define PCI_SDIO_STATIC_CHANNEL_6 0x40
|
|
|
#define PCI_SDIO_STATIC_CHANNEL_7 0x80
|
|
|
|
|
|
#define PCI_SDIO_DYNAMIC_CHANNEL_0 0x01
|
|
|
#define PCI_SDIO_DYNAMIC_CHANNEL_1 0x02
|
|
|
#define PCI_SDIO_DYNAMIC_CHANNEL_2 0x04
|
|
|
#define PCI_SDIO_DYNAMIC_CHANNEL_3 0x08
|
|
|
|
|
|
//detect
|
|
|
#define PCI_VD_L_FLAG 0x00000001
|
|
|
#define PCI_VD_H_FLAG 0x00000002
|
|
|
#define PCI_TD_L_FLAG 0x00000010
|
|
|
#define PCI_TD_H_FLAG 0x00000020
|
|
|
|
|
|
#define PCI_NVRAM_FLAG 0x00010000
|
|
|
|
|
|
#define PCI_SDIO_FLAG 0x800000
|
|
|
|
|
|
#define PCI_SDIO_CHANNEL_0 0x0100
|
|
|
#define PCI_SDIO_CHANNEL_1 0x0200
|
|
|
#define PCI_SDIO_CHANNEL_2 0x0400
|
|
|
#define PCI_SDIO_CHANNEL_3 0x0800
|
|
|
#define PCI_SDIO_CHANNEL_4 0x1000
|
|
|
#define PCI_SDIO_CHANNEL_5 0x2000
|
|
|
#define PCI_SDIO_CHANNEL_6 0x4000
|
|
|
#define PCI_SDIO_CHANNEL_7 0x8000
|
|
|
|
|
|
//SDIO pull up or pull down
|
|
|
#define SDIO_PULL_DOWN 0x00
|
|
|
#define SDIO_PULL_UP 0x01
|
|
|
|
|
|
//SDIO pull up or down current trim
|
|
|
#define SDIO_CURRENT_LEVEL_0 0x00 //默认,关闭
|
|
|
#define SDIO_CURRENT_LEVEL_1 0x01
|
|
|
#define SDIO_CURRENT_LEVEL_2 0x02 //20M
|
|
|
#define SDIO_CURRENT_LEVEL_3 0x03
|
|
|
#define SDIO_CURRENT_LEVEL_4 0x04 //10M
|
|
|
#define SDIO_CURRENT_LEVEL_5 0x05
|
|
|
#define SDIO_CURRENT_LEVEL_6 0x06
|
|
|
#define SDIO_CURRENT_LEVEL_7 0x07
|
|
|
|
|
|
|
|
|
/*******************************************************************************
|
|
|
* Function Name : PCI_Init
|
|
|
* Description : PCI模块初始化
|
|
|
* 注意:
|
|
|
* 每次上电前要执行该程序,否则无法读写nvram中的数据
|
|
|
* Input : None
|
|
|
* Output : None
|
|
|
* Return : None
|
|
|
******************************************************************************/
|
|
|
extern void PCI_Init(UINT8 clk_sel);
|
|
|
|
|
|
/*******************************************************************************
|
|
|
* Function Name : Nvram_Init
|
|
|
* Description : nvram模块初始化
|
|
|
* 注意:
|
|
|
* 写NVRAM前,需要使能;读取的时候不需要。
|
|
|
* Input : None
|
|
|
* Output : None
|
|
|
* Return : None
|
|
|
******************************************************************************/
|
|
|
extern void Nvram_Init(void);
|
|
|
|
|
|
extern void Nvram_Write(void);
|
|
|
|
|
|
extern void Nvram_Read(void);
|
|
|
|
|
|
/*******************************************************************************
|
|
|
* Function Name : Nvram_Status
|
|
|
* Description : 判断NVram是否被清除
|
|
|
* Input : None
|
|
|
*
|
|
|
* Output : 0 - 没有被清除
|
|
|
* 1 - 被清除
|
|
|
* Return : None
|
|
|
******************************************************************************/
|
|
|
extern int Nvram_Status(void);
|
|
|
|
|
|
/*******************************************************************************
|
|
|
* Function Name : PCI_SDIO_Init
|
|
|
* Description : SDIO初始化,将fail num清零
|
|
|
* Input : None
|
|
|
* Output : None
|
|
|
* Return : None
|
|
|
******************************************************************************/
|
|
|
extern void PCI_SDIO_Init(void);
|
|
|
|
|
|
/*******************************************************************************
|
|
|
* Function Name : PCI_SDIO_Static_Set
|
|
|
* Description : 设置SDIO静态工作方式,不开启的SDIO管脚可以接地,cmp_data值写0即可
|
|
|
* Input : channel - 开启的SDIO通道号
|
|
|
* cmp_data - 比较电压值:0 - 该路SDIO为低电压维持,高电压触发;1 - 该路SDIO为高电压维持,低电压触发
|
|
|
* Output : None
|
|
|
* Return : None
|
|
|
******************************************************************************/
|
|
|
extern void PCI_SDIO_Static_Set(unsigned char channel, unsigned char cmp_data);
|
|
|
|
|
|
/*******************************************************************************
|
|
|
* Function Name : PCI_SDIO_Dynamic_Set
|
|
|
* Description : 设置SDIO动态工作方式
|
|
|
* Input : channel - 开启的SDIO通道号
|
|
|
* Output : None
|
|
|
* Return : None
|
|
|
******************************************************************************/
|
|
|
extern void PCI_SDIO_Dynamic_Set(unsigned char channel);
|
|
|
|
|
|
/*******************************************************************************
|
|
|
* Function Name : PCI_VD_Set
|
|
|
* Description : 设置VD
|
|
|
* Input : VDH_Value:高压检测阈值
|
|
|
* VDL_Value:低压检测阈值
|
|
|
* Output : None
|
|
|
* Return : None
|
|
|
******************************************************************************/
|
|
|
extern void PCI_VD_Set(unsigned char VDH_Value, unsigned char VDL_Value);
|
|
|
|
|
|
/*******************************************************************************
|
|
|
* Function Name : PCI_TD_Set
|
|
|
* Description : 设置TD
|
|
|
* Input : TDH_Value:高温检测阈值
|
|
|
* TDL_Value:低温检测阈值
|
|
|
* Output : None
|
|
|
* Return : None
|
|
|
******************************************************************************/
|
|
|
extern void PCI_TD_Set(unsigned char TDH_Value, unsigned char TDL_Value, unsigned char TD_Trim);
|
|
|
|
|
|
/*******************************************************************************
|
|
|
* Function Name : PCI_Clear_Status
|
|
|
* Description : 清除PCI安全触发标志位
|
|
|
* Input : None
|
|
|
* Output : None
|
|
|
* Return : None
|
|
|
******************************************************************************/
|
|
|
extern void PCI_Clear_Status(void);
|
|
|
|
|
|
/*******************************************************************************
|
|
|
* Function Name : PCI_Detect
|
|
|
* Description : 判断PCI安全触发源
|
|
|
* Input : None
|
|
|
* Output : None
|
|
|
* Return : 0 - 没有触发
|
|
|
* 1 - 有触发
|
|
|
******************************************************************************/
|
|
|
extern int PCI_Detect(void);
|
|
|
|
|
|
|
|
|
/*******************************************************************************
|
|
|
* Function Name : PCI_SDIO_PullControl
|
|
|
* Description : PCI安全触发中断处理函数
|
|
|
* PCI中断功能,在芯片重新上电后,要重新配置。即断电后配置不会保留。
|
|
|
* Input : channel - 开启的SDIO通道号,例如PCI_SDIO_STATIC_CHANNEL_0
|
|
|
* mode - Pull up or Pull down
|
|
|
* Output : None
|
|
|
* Return : None
|
|
|
******************************************************************************/
|
|
|
extern void PCI_SDIO_PullControl(unsigned char channel, unsigned char mode);
|
|
|
|
|
|
/*******************************************************************************
|
|
|
* Function Name : PCI_SDIO_Current_Trim
|
|
|
* Description : PCI SDIO上下拉功能电流Trim值
|
|
|
* Input : channel - 开启的SDIO通道号,例如PCI_SDIO_STATIC_CHANNEL_0
|
|
|
* mode - Pull up or Pull down
|
|
|
* Output : None
|
|
|
* Return : None
|
|
|
******************************************************************************/
|
|
|
extern void PCI_SDIO_Current_Trim(unsigned char value);
|
|
|
|
|
|
/*******************************************************************************
|
|
|
* Function Name : SDIO_ConfigGpio
|
|
|
* Description : SDIO配置成GPIO用途
|
|
|
* Input : - SDIO_PINx: EPORT Pin;where x can be 0~7 to select the SDIO peripheral.
|
|
|
* - GpioDir:设置GPIO方向 GPIO_OUTPUT:输出 GPIO_INPUT:输入
|
|
|
*
|
|
|
* Output : None
|
|
|
* Return : 0 - 成功;other - 失败
|
|
|
******************************************************************************/
|
|
|
extern int SDIO_ConfigGpio(SDIO_PINx GpioNo, UINT8 GpioDir);
|
|
|
|
|
|
/*******************************************************************************
|
|
|
* Function Name : SDIO_WriteGpioData
|
|
|
* Description : 设置SDIO_PINx对应引脚的电平
|
|
|
* Input : - SDIO_PINx: SDIO Pin;where x can be 0~7 to select the SDIO peripheral.
|
|
|
* - bitVal:设置的电平,Bit_SET:设置为高电平 Bit_RESET:设置为低电平
|
|
|
*
|
|
|
* Output : None
|
|
|
* Return : 0: 设置成功 other:设置失败
|
|
|
******************************************************************************/
|
|
|
extern int SDIO_WriteGpioData(SDIO_PINx GpioNo, UINT8 bitVal);
|
|
|
|
|
|
/*******************************************************************************
|
|
|
* Function Name : SDIO_ReadGpioData
|
|
|
* Description : 获取SDIO_PINx对应引脚的电平
|
|
|
* Input : - SDIO_PINx: SDIO Pin;where x can be 0~7 to select the SDIO peripheral.
|
|
|
*
|
|
|
* Output : None
|
|
|
* Return : Bit_SET:高电平 Bit_RESET:低电平 -1:失败
|
|
|
******************************************************************************/
|
|
|
extern int SDIO_ReadGpioData(SDIO_PINx GpioNo);
|
|
|
|
|
|
/*******************************************************************************
|
|
|
* Function Name : PCI_Interrupt_Init
|
|
|
* Description : 开启PCI的安全中断
|
|
|
* Input : None
|
|
|
* Output : None
|
|
|
* Return : None
|
|
|
******************************************************************************/
|
|
|
extern void PCI_Interrupt_Init(void);
|
|
|
|
|
|
/*******************************************************************************
|
|
|
* Function Name : PCI_NVSRAM_WtiteByte
|
|
|
* Description : 按字节向nvram写数据
|
|
|
* Input : - addr: 写入数据的地址.
|
|
|
* - dat:写入的数据
|
|
|
*
|
|
|
* Output : None
|
|
|
* Return : other - 成功;0 - 失败
|
|
|
******************************************************************************/
|
|
|
extern BOOL PCI_NVSRAM_WtiteByte(UINT32 addr, UINT8 dat);
|
|
|
|
|
|
/*******************************************************************************
|
|
|
* Function Name : PCI_NVSRAM_ReadByte
|
|
|
* Description : 按字节读取nvram数据
|
|
|
* Input : - addr: 数据的地址.
|
|
|
* - dat:数据
|
|
|
*
|
|
|
* Output : None
|
|
|
* Return : other - 成功;0 - 失败
|
|
|
******************************************************************************/
|
|
|
extern BOOL PCI_NVSRAM_ReadByte(UINT32 addr, UINT8 *dat);
|
|
|
|
|
|
/*******************************************************************************
|
|
|
* Function Name : PCI_Open
|
|
|
* Description : PCI模块Open
|
|
|
* PCI_Init的简化版,执行PCI_Open后不能够操作TD、VD、SDIO等寄存器,但是能够读写NVSRAM,读出和清除安全触发标志位
|
|
|
* 该函数使用的前提是,调用过PCI_Init
|
|
|
* Input : None
|
|
|
* Output : None
|
|
|
* Return : None
|
|
|
******************************************************************************/
|
|
|
extern void PCI_Open(void);
|
|
|
|
|
|
/*******************************************************************************
|
|
|
* Function Name : PCI_Close
|
|
|
* Description : PCI模块Close
|
|
|
* 关闭PCI模块的读写功能,会消除PCI_Init和PCI_Open函数增加的3uA功耗;
|
|
|
* 同时,无法正常读取NVSRAM数据,读取PCI的触发标志位。
|
|
|
* Input : None
|
|
|
* Output : None
|
|
|
* Return : None
|
|
|
******************************************************************************/
|
|
|
extern void PCI_Close(void);
|
|
|
|
|
|
#endif /* __PCI_DRV_H__ */
|