[讨论] 求教。TM4C123G的计数器该怎么写呢?

上大人孔乙己   2014-6-1 01:39 楼主
要测量信号的频率,所以我想采用计数器+定时器的方法,把WTIMER0分成独立的两个32bit定时器,A作为定时,B作为计数。但是计数器完全木有反应啊!好桑心啊好桑心。大家快来帮帮忙啦

回复评论 (6)

这里是初始化程序啊。
帮忙看看吧。
/*
  函数:widetimer0_set
  功能:设置widetimer0定时器A为定时器,B为计数器
  参数:
  period : 定时器递减计数周期
*/
void widetimer0_set(int32_t period,void (*pfnHandler)(void))
{
  
  
  /*使能外设*/
  SysCtlPeripheralEnable(SYSCTL_PERIPH_WTIMER0);
  SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);

  
  /*widetimer0 的timer0A为定时,B为计数*/
  TimerConfigure(WTIMER0_BASE, (TIMER_CFG_SPLIT_PAIR | TIMER_CFG_A_PERIODIC |TIMER_CFG_B_CAP_COUNT_UP));

  
  /*设置定时器同步*/
  TimerSynchronize(WTIMER0_BASE,WTIMER_0A_SYNC|WTIMER_0B_SYNC);//
  
  /*装填定时周期*/
  TimerLoadSet(WTIMER0_BASE,TIMER_A,period);
  /*装填计数初始值*/
// TimerLoadSet(WTIMER0_BASE,TIMER_B,2);
  
  
  /*注册中断*/
  TimerIntRegister(WTIMER0_BASE,TIMER_A,pfnHandler);
  
  /*打开NIVC中断屏蔽*/
  IntEnable(INT_WTIMER0A);
  
  /*使能定时器中断*/
  TimerIntEnable(WTIMER0_BASE, TIMER_TIMA_TIMEOUT);
  
  /*打开CPU中断响应*/
  IntMasterEnable();
  
  /*设置捕获引脚*/
  GPIOPinTypeTimer(GPIO_PORTC_BASE,5);
  GPIODirModeSet(GPIO_PORTC_BASE,5,GPIO_DIR_MODE_IN);
  

  /*设置计数器B的计数方式为上升沿触发*/
  
  TimerControlEvent(WTIMER0_BASE, TIMER_B, TIMER_EVENT_POS_EDGE);

  
  /*启动定时器A.B*/
  TimerEnable(WTIMER0_BASE, TIMER_BOTH);
  


}
点赞  2014-6-1 01:40
在 startup_ccs.c中应该写上中断函数名吧。
点赞  2014-6-4 19:51
你先试试看使用两个不同的定时器来实现不同的功能,如果可以的话,再换成一个定时器看看
点赞  2014-6-5 18:57
楼主解决了吗?
点赞  2015-4-22 20:04
点赞  2017-3-9 20:25
我也有这个问题
点赞  2018-1-15 21:12
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复