/***********************************************************************
 * Copyright (c)  2019, Unicmicro Co.,Ltd .
 * All rights reserved.
 * Filename    : lptimer.h
 * Description : lpTimer driver header file
 * Author(s)   : wanyi
 * version     : V1.0
 * Modify date : 2020-09-04
 ***********************************************************************/
#ifndef __LPTIMER_H__
#define __LPTIMER_H__

#include "um800x.h"

/*中断*/
#define LPTIMER_IRQ_DISABLE          0       /*中断失能*/
#define LPTIMER_IRQ_ENABLE           1       /*中断使能*/

/*中断使能*/
#define LPTIE_COMP                   0       /*比较匹配中断使能 */
#define LPTIE_OV                     1       /*计数器溢出中断使能*/
#define LPTIE_TRIG                   2       /*外部触发到来中断使能*/

  
/*时钟源选择*/           
#define LPTIMER_LSCLK                0       /*RCL低速时钟*/
#define LPTIMER_RCLP                 1       /*clk_1hz时钟*/
#define LPTIMER_SYSCLK               2       /*系统时钟*/
#define LPTIMER_LPTIN                3       /*外部输入时钟*/
            
/*计数时钟分频*/          
#define DIV1                         0
#define DIV2                         1
#define DIV4                         2
#define DIV8                         3
#define DIV16                        4
#define DIV32                        5
#define DIV64                        6
#define DIV128                       7

/*PWM极性*/
#define HIGH                   		 1       
#define LOW                     	 0      

/*trigger触发边沿*/
#define RISE_EDGE                	 0      
#define FALL_EDGE                    1  
#define DOUBLE_EDGE                  2

/*工作模式*/
#define TIMER_TMODE                  0       /*普通定时器模式*/
#define TRIGGERCOUNT_TMODE           1       /*Trigger脉冲触发计数模式*/
#define EXTCOUNT_TMODE               2       /*外部异步脉冲计数模式*/
#define TIMEOUT_TMODE                3       /*Timeout模式*/

/*计数模式*/
#define CONTINUOUS_MODE              0       /*连续计数模式*/
#define SINGLE_MODE                  1       /*单次计数模式*/


void lptimer_timer_init(uint8_t clk_src,uint8_t clk_div,uint16_t target);
void lptimer_pwm_init(uint8_t clk_src,uint8_t clk_div,uint16_t target,uint16_t cmp,uint8_t level);
void lptimer_trigger_init(uint8_t clk_src,uint8_t clk_div,uint16_t target,uint8_t trig_edge);
void lptimer_extcount_init(uint8_t clk_div,uint16_t target);
void lptimer_timeout_init(uint8_t clk_src,uint8_t clk_div,uint16_t target);
void lptimer_irq_init(uint8_t irqstate,uint8_t ie,void (*pfunc)());
void lptimer_on(void);
void lptimer_off(void);
uint16_t get_lptimer_cnt(void);
#endif
