Advertisement

MSPM0G3507的学习记录(个人记录3)

阅读量:

《定时器学习》

目的:参加电赛,学习记录,创作者的视角来学习。

使用芯片:LP-MSPM0G3507

例程2:timx_timer_mode_periodic_sleep

定时器的基本工作原理:本质上是计数。

有加法计数,减法计数。通过标志上升脉冲或下降脉冲进行计数。

定时器有: TimerG(general通用计时器), TimerA(advance高级计时器), TimerX(通用计时器)

在syscfg工具里对TIMER配置

Name:名称设置:

Quick Profiles**:Timer Profiles:系统提供的预设。**

若有****特殊要求选择custom。

**基础设置:**Basic Configuration

Clock Configuration****配置时钟

Timer Clock Source**(计数所用脉冲信号的来源设置)一般都选用****BUSCLK.**

Timer Clock Divider分频设置

Timer Clock Prescaler进一步分频。
经过以上设置,最终所用来计数的时钟频率。

高级配置:Advanced Configuration(暂时没用到)

**使能定时器中断配置:**Interrupts Configuration

****在开发的过程中能够快速配置时钟,编写中断。

复制代码
 #include "ti_msp_dl_config.h"

    
  
    
  
    
 int main(void)
    
 {
    
     SYSCFG_DL_init();
    
  
    
     NVIC_EnableIRQ(TIMER_0_INST_INT_IRQN);//使能定时器中断 NVIC_EnableIRQ不是所学芯片的特殊外设。
    
     DL_SYSCTL_enableSleepOnExit();//退出时启用睡眠模式
    
  
    
     DL_TimerG_startCounter(TIMER_0_INST);// DL_TimerG_startCounter启动开始计数
    
     //括号内是启动具体的那一个定时器
    
  
    
     while (1) {
    
     __WFI();//实际上是Wait forinterrupt(等待中断)。从run状态进入sleep状态。
    
     }
    
 }
    
  
    
 void TIMER_0_INST_IRQHandler(void)//中断服务函数
    
 {
    
     switch (DL_TimerG_getPendingInterrupt(TIMER_0_INST)) {
    
     case DL_TIMER_IIDX_ZERO://定时器
    
         DL_GPIO_togglePins(GPIO_LEDS_PORT,
    
             GPIO_LEDS_USER_LED_1_PIN | GPIO_LEDS_USER_TEST_PIN);//翻转电平
    
         break;
    
     default:
    
         break;
    
     }
    
 }
    
    
    
    

在所给的例程代码过程中几个注意点:

NVIC_EnableIRQ()使能中断函数

DL_TimerG_startCounter()开始计数。

为达到低功耗目的:使用到语句

DL_SYSCTL_enableSleepOnExit();当中断返回主函数是,cpu 进入sleep状态

退出时启用睡眠。

当 CPU 从处理程序模式移动到线程模式时,在退出时启用睡眠。通过启用,允许中断驱动的应用程序避免返回到空的主应用程序。

在编写中断函数时如果使用到多个中断,遵循以下格式判断运行那一个:

自己写一个1秒翻转的代码

复制代码
 #include "ti_msp_dl_config.h"

    
  
    
 int main(void)
    
 {
    
     SYSCFG_DL_init();
    
      NVIC_EnableIRQ(TIMER_0_INST_INT_IRQN);
    
      DL_TimerA_startCounter(TIMER_0_INST);
    
  
    
     while (1) {
    
     }
    
 }
    
  
    
 void TIMER_0_INST_IRQHandler(void)
    
 {
    
     DL_GPIO_togglePins(GPIO_LED_PORT, GPIO_LED_PIN_LED_PIN );    
    
 }
    
    
    
    

全部评论 (0)

还没有任何评论哟~