1.2. gptimer

gptimer支持计数、延时、定时、PWM、捕获。捕获模式支持滤波,双边沿触发

1.2.1. gptimer_init

timer功能初始化。

原型:

int gptimer_init(const struct gptimer_config *gptimer);

参数:

gptimer

timer配置

返回值

tiemr句柄(id号)

1.2.2. gptimer_pwm_init

pwm功能初始化。

原型:

int gptimer_pwm_init(const struct gptimer_pwm_config *gptimer);

参数:

gptimer

pwm配置

返回值

pwm句柄(id号)

1.2.3. gptimer_capture_init

capture功能初始化。

原型:

int gptimer_capture_init(const struct gptimer_capture_config *gptimer);

参数:

gptimer

capture配置

返回值

capture句柄(id号)

1.2.4. gptimer_deinit

timer/pwm/capture功能初始化取消。

原型:

int gptimer_deinit(int tid);

参数:

tid

init时返回的句柄(id号)

返回值

保留

1.2.5. gptimer_start

timer/pwm/capture功能启动。

原型:

int gptimer_start(int tid);

参数:

tid

init时返回的句柄(id号)

返回值

保留

1.2.6. gptimer_pause

timer/pwm/capture功能暂停。

原型:

int gptimer_pause(int tid);

参数:

tid

init时返回的句柄(id号)

返回值

保留

1.2.7. gptimer_rwesume

timer/pwm/capture功能恢复。

原型:

int gptimer_rwesume(int tid);

参数:

tid

init时返回的句柄(id号)

返回值

保留

1.2.8. gptimer_set_resolution

设置timer功能定时时间,单位us。

原型:

u32 gptimer_set_resolution(int tid, u32 resolution_us);

参数:

tid

init时返回的句柄(id号)

us

定时时间,单位:us

返回值

0

1.2.9. gptimer_get_resolution

获取timer功能定时时间,单位us。

原型:

u32 gptimer_get_resolution(int tid);

参数:

tid

init时返回的句柄(id号)

返回值

定时时间,单位:us

1.2.10. gptimer_set_pwm_freq

设置pwm功能输出频率,单位Hz。

原型:

u32 gptimer_set_pwm_freq(int tid, u32 pwm_freq);

参数:

tid

init时返回的句柄(id号)

pwm_freq

输出频率,单位:Hz

返回值

0

1.2.11. gptimer_get_pwm_freq

获取pwm功能输出频率,单位Hz。

原型:

u32 gptimer_get_pwm_freq(int tid);

参数:

tid

init时返回的句柄(id号)

返回值

输出频率,单位:Hz

1.2.12. gptimer_set_pwm_duty

设置pwm功能输出占空比。

原型:

u32 gptimer_set_pwm_duty(int tid, u32 duty);

参数:

tid

init时返回的句柄(id号)

duty

占空比,例:5123,占空比51.23%

返回值

0

1.2.13. gptimer_get_pwm_duty

获取pwm功能输出占空比。

原型:

u32 gptimer_get_pwm_duty(int tid);

参数:

tid

init时返回的句柄(id号)

duty

占空比,例:5123,占空比51.23%

1.2.14. gptimer_pwm_flip

翻转pwm输出。

原型:

u32 gptimer_pwm_flip(int tid);

参数:

tid

init时返回的句柄(id号)

返回值

0

1.2.15. gptimer_set_edge_type

设置capture功能捕获边沿,边沿类型:上升沿、下降沿、双边沿。

原型:

u32 gptimer_set_edge_type(int tid, enum GPTIMER_CAPTURE_EDGE edge_type);

参数:

tid

init时返回的句柄(id号)

edge_type

边沿类型

返回值

0

1.2.16. gptimer_get_edge_type

获取capture功能捕获边沿。

原型:

enum GPTIMER_CAPTURE_EDGE  gptimer_get_edge_type(int tid);

参数:

tid

init时返回的句柄(id号)

返回值

边沿类型:上升沿、下降沿、双边沿

1.2.17. gptimer_set_capture_filter

设置capture功能滤波参数。小于滤波参数的波被过滤。

原型:

u32 gptimer_set_capture_filter(int tid, u32 filter_us);

参数:

tid

init时返回的句柄(id号)

filter_us

滤波参数,单位:us。

1.2.18. gptimer_get_capture_filter

获取capture功能滤波参数。

原型:

u32 gptimer_get_capture_filter(int tid);

参数:

tid

init时返回的句柄(id号)

返回值

滤波参数,单位:us。

1.2.19. gptimer_get_capture_count

获取capture功能count计数器的原始值。

原型:

u32 gptimer_get_capture_count(int tid);

参数:

tid

init时返回的句柄(id号)

返回值

count计数器原始值

1.2.20. gptimer_get_count

获取count计数器的原始值。

原型:

u32 gptimer_get_count(int tid);

参数:

tid

init时返回的句柄(id号)

返回值

count计数器原始值

1.2.21. gptimer_get_prd

获取prd寄存器的原始值。

原型:

u32 gptimer_get_prd(int tid);

参数:

tid

init时返回的句柄(id号)

返回值

prd寄存器原始值

1.2.22. gptimer_set_irq_callback

设置回调函数。

原型:

u32 gptimer_set_irq_callback(int tid, void (*irq_cb)(int tid));

参数:

tid

init时返回的句柄(id号)

irq_cb

回调函数,void usr_irq_cb(int tid)

返回值

0

1.2.23. gptimer_set_work_mode

设置工作模式,模式:timer,pwm,capture。

原型:

u32 gptimer_set_work_mode(int tid, enum gptimer_type type);

参数:

tid

init时返回的句柄(id号)

type

工作模式

返回值

0

1.2.24. gptimer_get_work_mode

获取工作模式,模式:timer,pwm,capture。

原型:

enum GPTIMER_MODE gptimer_get_work_mode(int tid);

参数:

tid

init时返回的句柄(id号)

工作模式

工作模式:timer,pwm,capture

1.2.25. timer模式demo

//定时器
void timer_callback_func(int tid)
{

}

const struct gptimer_config timer_config = {
  .resolution_us = 10*1000, //定时10ms
  .irq_cb = timer_callback_func, //回调函数
  .tid = -1,  //填-1,内部自动分配timer
  .irq_priority = 1; //中断优先级,默认给1
};

int timer_tid = gptimer_init(&timer_config);
gptimer_start(timer_tid);

1.2.26. pwm模式demo

const struct gptimer_pwm_config pwm_config = {
  .port = PORTA, //指定输出IO,PA组
  .pin = 0, //指定输出IO,BIT(0)脚  输出口PA0
  .freq = 1000,//输出频率1Khz
  .pwm_duty_X10000 = 5123, //占空比51.23%
  .tid = -1,  //填-1,内部自动分配timer
};

int pwm_tid = gptimer_pwm_init(&pwm_config);
gptimer_start(pwm_tid);

1.2.27. capture模式demo

void capture_callback_func(int tid)
{
    enum gptimer_type mode = gptimer_get_work_mode(tid);

    if (mode == GPTIMER_CAPTRUE){
          u32 prd = gptimer_get_capture_count(tid);  //单位是us
          if (prd > 10000){
              gptimer_pause(tid);
              gptimer_set_resolution(tid,1000); //  设置定时时间1ms
              gptimer_set_work_mode(tid, GPTIMER_Timer);  // 切换为定时模式
              gptimer_resume(tid);
          }
    }else if(mode == GPTIMER_Timer){
        gptimer_pause(tid);
        gptimer_set_edge_type(tid, GPTIMER_EDGE_RISE);
        gptimer_set_work_mode(tid, GPTIMER_CAPTRUE);   // 切换为上升沿捕获模式
        gptimer_resume(tid);
    }
}

const struct gptimer_capture_config capture_config = {
  .port = PORTA, //指定输出IO,PA组
  .pin = 0, //指定输出IO,BIT(0)脚  输出口PA0
  .edge_type = GPTIMER_EDGE_RISE, //上升沿捕获
  .filter = 1000, //需要滤掉的频率,大于该频率的波形被过滤;写0则关闭滤波功能
  .irq_cb = capture_callback_func, //回调函数
  .tid = -1,  //填-1,内部自动分配timer
  .irq_priority = 1; //中断优先级,默认给1
};

int capture_tid = gptimer_capture_init(&capture_config);
gptimer_start(capture_tid);