十一.ARM裸机学习之定时器、看门狗和RTC时钟

一、PWM 定时器
1. S5PV210内部共有5个32bit的PWM定时器。PWM定时器可以生成内部中断。PWM定时器0、1、2、3具有PWM功能,可以驱动外部I/O信号。PWM定时器4是一个无外部引脚的内部定时器。PWM 定时器使用 PCLK_PSYS 作为时钟源。
2. 每个定时器有一个由定时器时钟驱动的32位递减计数器。递减计数器的初始值是由TCNTBn自动装载而获得的。如果递减计数器减到 0 时,定时器发出中断请求通知CPU定时器操作已经完成,当定时器递减计数器到达 0,相应的 TCNTBn的值也会自动的装载到递减计数器中以继续下一次循环操作。 在定时器正在运行模式下通过对TCON的定时器使能位清零,则TCNTBn的值不会自动装载到计数器中。TCMPBn 寄存器的值用于脉宽调制功能(PWM)。当递减计数器的值和定时器控制逻辑单元中的比较寄存器的值匹配时,定时器控制单元会改变输出电平。因此,比较寄存器的值决定了PWM的占空比。当定时器使能,定时器计数存寄存器(TCNTBn)得到一个被装载到递减计数器中的初始值。定时器比较缓存寄存器(TCMPBn)有一个被装载到比较寄存器中用来和递减计数器的值作比较的初始值。 TCNTBn和TCMPBn双缓存特点使得当频率和负荷发生改变时,定时器生成一个稳定的输出
主要控制寄存器:
   TCFG0: 预分频器参数设置,范围为0-255,定时器0和1,用 Prescaler0,定时器2,3,4用Prescaler 1,预分频系数为1-256
     TCFG1 :分频器参数设置,MUX开关,1/1,1/2,1/4,1/8,1/16
     TCON: 定时器的设置
     TCNTBn: 定时计数寄存器
     TCMPBn: 占空比计数寄存器
     TCNTOn: 观察寄存器
1.1 PWM 之蜂鸣器实验
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MSP430使用RTC_B的闹钟功能需要按照以下步骤进行设置: 1. 开启RTC_B模块和中断功能,并设置RTC_B时钟频率和时钟周期。 2. 设置闹钟时间和日期。 3. 设置闹钟中断标志位,并开启RTC_B中断。 4. 在RTC_B的中断服务函数中判断是否为闹钟中断,并进行相应的处理。 以下是具体的代码实现: ``` c #include <msp430.h> void RTC_config(void) { RTCCTL01 |= RTCRDYIE + RTCAIE + RTCTEVIE; // 开启RTC_B中断,包括时钟周期中断、时钟递增中断和时钟模式中断 RTCCTL01 &= ~(RTCHOLD); // 开启RTC_B时钟 RTCPS0CTL = RT0PSDIV_7; RTCCTL01 |= RTCMODE; // 设置RTC_B为时钟模式 RTCCTL23 |= RTCCALF_0; // 禁用RTC_B偏移自校准机制 RTCPS1CTL = RT1SSEL_2; // 设置RTC_B时钟频率为VLO // 设置闹钟时间,这里设置为1点30分 RTCYEAR = 2022; RTCMON = 12; RTCDAY = 1; RTCHOUR = 1; RTCMIN = 30; RTCSEC = 0; RTCCTL01 &= ~(RTCHOLD); // 再次开启RTC_B时钟 } #pragma vector=RTC_VECTOR __interrupt void RTC_ISR(void) { switch(RTCIV) { case RTCIV_NONE: break; // 无中断 case RTCIV_RTCRDYIFG: break; // 时钟周期中断 case RTCIV_RTCTEVIFG: break; // 时钟递增中断 case RTCIV_RTCAIFG: // 时钟模式中断 // 判断是否为闹钟中断 if(RTCAE & RTCAIE) { P1OUT ^= BIT0; // 闹钟响后将P1.0引脚取反 } break; case RTCIV_RT0PSIFG: break; // 辅助时钟中断 case RTCIV_RT1PSIFG: break; // 主时钟中断 default: break; } } int main(void) { WDTCTL = WDTPW | WDTHOLD; // 停用看门狗 P1DIR |= BIT0; // 设置P1.0引脚为输出模式 RTC_config(); // 配置RTC_B // 开启闹钟 RTCAE = 0x00; // 常规的闹钟功能 RTCADAYC = 0x00; // 关闭闹钟日期检查 RTCADOW = 0x11; // 设置闹钟时间的秒数 RTCAHOUR = 0x01; // 设置闹钟时间的小时数 RTCAMIN = 0x30; // 设置闹钟时间的分钟数 __bis_SR_register(LPM3_bits + GIE); // 进入低功耗模式,并开启全局中断 return 0; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值