/*
 * PIT_drv.h
 *
 *  Created on: 2017年11月29日
 *      Author: nltao
 */

#ifndef PIT_DRV_H_
#define PIT_DRV_H_

#include "type.h"
#include "memmap.h"
   
#define PIT1         ((PIT_TypeDef *)PIT1_BASE_ADDR)    
#define PIT2         ((PIT_TypeDef *)PIT2_BASE_ADDR)

#define PIT_EN			(1 << 0)
#define PIT_RLD		(1 << 1)
#define PIT_PIF		(1 << 2)
#define PIT_PIE		(1 << 3)
#define PIT_OVW		(1 << 4)
#define PIT_DOZE		(1 << 6)


#define PCSR_EN		0x01
#define PCSR_RLD		0x02
#define PCSR_PIF		0x04
#define PCSR_PIE		0x08
#define PCSR_OVW		0x10
#define PCSR_PDBG		0x20
#define PCSR_PDOZE	0x40
#define PCSR_PRE		0x0F

typedef struct
{
	__IO unsigned short PCSR    ;			//     0x00
	__IO unsigned short RESERVED;				//0x02~0x03
	__IO unsigned int PMR;  //		0x4
	__IO unsigned int PCNTR;//		0x8

}PIT_TypeDef;


typedef enum
{
	PIT_CLK_DIV_1,//1分频
	PIT_CLK_DIV_2,//2分频
	PIT_CLK_DIV_4,//4分频
	PIT_CLK_DIV_8,//8分频
	PIT_CLK_DIV_16,//16分频
	PIT_CLK_DIV_32,//32分频
	PIT_CLK_DIV_64,//64分频
	PIT_CLK_DIV_128,//128分频
	PIT_CLK_DIV_256,//256分频
	PIT_CLK_DIV_512,//512分频
	PIT_CLK_DIV_1024,//1024分频
	PIT_CLK_DIV_2048,//2048分频
	PIT_CLK_DIV_4096,//4096分频
	PIT_CLK_DIV_8192,//8192分频
	PIT_CLK_DIV_16384,//16384分频
	PIT_CLK_DIV_32768,//32768分频
}PIT_CLKDIV;


/*******************************************************************************
* Function Name  : PIT_Init
* Description    : PIT initialization
* Input          : - Prescaler PIT divider
*                  - ReloadCounterVal:PIT initialize value
*
* Output         : None
* Return         : None
******************************************************************************/
extern void PIT_Init(PIT_TypeDef *PITx,PIT_CLKDIV Prescaler, UINT32 PMRReloadCounterVal,bool intEnable);


/*******************************************************************************
* Function Name  : PIT_CmdPIT_ITConfig
* Description    : PIT中断使能控制
* Input          : - NewState：new state of the specified PIT interrupts.
*                              This parameter can be: ENABLE or DISABLE.
*
* Output         : None
* Return         : None
******************************************************************************/
void PIT_Enable(PIT_TypeDef *PITx,bool state);

/*******************************************************************************
* Function Name  : PIT_CmdPIT_ITConfig
* Description    : PIT中断使能控制
* Input          : - NewState：new state of the specified PIT interrupts.
*                              This parameter can be: ENABLE or DISABLE.
*
* Output         : None
* Return         : None
******************************************************************************/
void PIT_IntEnable(PIT_TypeDef *PITx,bool state);


/*******************************************************************************
* Function Name  : PIT_ReadCNTR
* Description    : 读取PIT计数值
* Input          : None
*
* Output         : 计数值
* Return         : 计数值
******************************************************************************/
UINT32 PIT_Read_PITCounter(PIT_TypeDef *PITx);

void PIT_WriteCounter(PIT_TypeDef *PITx, u32 value);

#endif /* PIT_DRV_H_ */
