/*!
 *     COPYRIGHT NOTICE
 *     Copyright (c) 2013,山外科技
 *     All rights reserved.
 *     技术讨论：山外论坛 http://www.vcan123.com
 *
 *     除注明出处外，以下所有内容版权均属山外科技所有，未经允许，不得用于商业用途，
 *     修改内容时必须保留山外科技的版权声明。
 *
 * @file       MK60_lptmr.h
 * @brief      lptmr驱动函数，包括延时，脉冲计数，定时功能待实现
 * @author     山外科技
 * @version    v5.0
 * @date       2013-06-26
 */

#ifndef __MK60_LPTMR_H__
#define __MK60_LPTMR_H__

/**
 *  @brief LPTMR脉冲计数输入管脚选项
 */
typedef enum
{
    //只有1、2管脚，并没有0、3管脚
    LPT0_ALT1 = 1,      // PTA19
    LPT0_ALT2 = 2       // PTC5
} LPT0_ALTn;

/**
 *  @brief LPTMR脉冲计数触发方式
 */
typedef enum LPT_CFG
{
    LPT_Rising  = 0,    //上升沿触发
    LPT_Falling = 1     //下降沿触发
} LPT_CFG;

#define LPTMR_Flag_Clear()  (LPTMR0_CSR |= LPTMR_CSR_TCF_MASK)         //清除LPT比较标志位

/*          用于延时         */
extern void     lptmr_delay_ms(uint16 ms);      //延时(ms)
extern void     lptmr_delay_us(uint16 us);      //延时(us)

/*       用于定时           */
extern void     lptmr_timing_ms(uint16 ms);     //定时(ms)
extern void     lptmr_timing_us(uint16 ms);     //定时(us)

/*        用于计时           */
extern void     lptmr_time_start_ms(void);      //开始计时(ms)
extern uint32   lptmr_time_get_ms(void);        //获取计时时间

extern void     lptmr_time_start_us(void);      //开始计时(ns)
extern uint32   lptmr_time_get_us(void);        //获取计时时间

extern void     lptmr_time_close();             //关闭计时器


/*       用于脉冲计数        */
extern void     lptmr_pulse_init  (LPT0_ALTn, uint16 count, LPT_CFG);   //脉冲计数器初始化设置
extern uint16   lptmr_pulse_get   (void);                               //获取计数值
extern void     lptmr_pulse_clean (void);                               //清空计数值


/*      中断服务函数模版    */
extern void lptmr_test_handler(void);                                       //中断服务函数，仅供参考（需用户自行实现）


#endif /* __MK60_LPTMR_H__ */
