S5P4418裸机开发(十四):TIMER

概述

在这里插入图片描述

  • S5P4418,5个定时器
  • Timers 0, 1, 2, and 3有连接GPIO,可以输出PWM
  • 时钟源PCLK,2nboot默认配置为200MHz
  • Timers 0 and 1共享一个预分频器,Timers 2, 3, and 4共享另外一个

相关寄存器

寄存器功能
TCFG0死区,预分频
TCFG1DMA,分频
TCON自动重装载,手动更新,输出翻转,启动/停止定时器
TCNTB存放重装载值
TCMPB0比较值
TCNTO0RO,观察计数器值,不是TCNT
TINT_CSTAT中断使能,清除标志位

配置流程

在这里插入图片描述
在这里插入图片描述

  1. 关闭复位功能,手册上貌似也没给太详细的说明,不清零定时器起不来
  2. 配置分频,TCFG0, TCFG1
  3. 手动更新位置1,置1后定时器自动将TCNTBTCMPB的值送TCNTTCMP,不置1定时器起不来
  4. 配置VIC
  5. 中断使能,TINT_CSTAT
  6. 按需求开启自动重装载,启动定时器,同时清0手动更新位,TINT_CSTAT
  7. 中断服务程序退出前要清除中断标志位,以及VIC的VICADDRESS

例子

void timer0_init(){
    IP_RESET_REGISTER1 |= (1 << 4);     // 关闭复位

    TCFG0 |= (250 - 1);     // PCLK = 200MHz 200000000 / 16 / 250 = 50000;
    TCFG1 |= 0x4;
    TCNTB0 = 50000;          // 1s
    TCON |= (1 << 1);

    vic_init(23, (u32)timer0_ISR);  // 注册VIC

    TINT_CSTAT |= (1 << 0); // 中断使能
    TCON &= ~(1 << 1);
    TCON |= ((1 << 3) | (1 << 0));  // 自动重装载,启动定时器
}

void timer0_ISR(){
    printf("timer_ISR %x\r\n", 0);
    TINT_CSTAT |= (1 << 5);      // 清除中断标志
    VICADDRESS_CH0 = 0x0;
}

工程代码:

9_pwm_timer

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值