您的位置 首页 测评

SAM4E单片机之旅——7、LED闪耀之TC中止

RTT主要用做一个全局的定时器,而且不太通用。现在尝试使用一个更为通用的定时器进行定时:定时计数器(TimerCounter,TC)。TC提供了广泛的功能,主要可以分为对输入的测量,以及波形的

  RTT首要用做一个大局的守时器,而且不太通用。现在测验运用一个更为通用的守时器进行守时:守时计数器(Timer Counter, TC)。

  TC供给了广泛的功用,首要能够分为对输入的丈量,以及波形的输出。相同,它能够发生一系列的中止。这一次将使TC以一个固定的周期发生中止,以到达守时的意图。

  一、 TC装备

  1. 在PMC中使能TC时钟。

  2. 时钟挑选。

  TC的每个通道内部都有一个32位的计数器。能够为这个计数器挑选一个时钟,使其以固定频率步进。为使LED的闪耀频率较低,需求挑选较小的时钟周期。

  3. 波形及中止挑选。

  当TC作业在波形输出形式下时,能够为输出挑选若干种波形。在这儿,不需求关怀详细的波形,而是要重视每个波形形式下,计数器的作业方式,以及发生中止的机遇。

  挑选的波形如下:

    

clip_image002

 

  在当计数器的值和RC存放器里的值持平时,会发生一个触发,使计数器重置,并重新开始计数。

  在输出形式下,能够挑选在计数器的值在与RA、RB、和(或)RC持平时,发生中止。这儿挑选与RC值相一起中止。

  4. 使能通道。

  首要需求使能(enable)通道时钟,而且需求发动(start)这个时钟。能够经过拜访TC_CCR存放器使能时钟,一起能够发生一个软触发,以发动时钟。

  5. NVIC中使能中止。

  该部分相关代码如下,运用的通道是TC0的通道0,计时器频率为MCK/128,RC值为31250,即每一秒发生一次中止。

  #define gUseTc TC0->TC_CHANNEL[0]

  void ConfigTC(void)

  {

  PMC->PMC_PCER0 = (1 << ID_TC0);

  gUseTc.TC_CMR =

  TC_CMR_WAVE /* 波形形式 */

  | TC_CMR_TCCLKS_TIMER_CLOCK4 /* 时钟4: MCK/128 */

  | TC_CMR_WAVSEL_UP_RC; /* 波形,仅上升,且RC比较时主动触发 */

  ;

  /* 设置 RC */

  gUseTc.TC_RC = TC_RC_RC(31250);

  /* RC 比较时发生中止 */

  gUseTc.TC_IER = TC_IER_CPCS;

  /* 使能TC时钟 */

  gUseTc.TC_CCR = TC_CCR_CLKEN | TC_CCR_SWTRG;

  /* NVIC */

  NVIC_DisableIRQ(TC0_IRQn);

  NVIC_ClearPendingIRQ(TC0_IRQn);

  NVIC_SetPriority(TC0_IRQn, 1);

  NV%&&&&&%_EnableIRQ(TC0_IRQn);

  }

  1

  二、 TC中止服务函数

  仅需改动LED引脚的电平即可。

  void TC0_Handler(void)

  {

  uint32_t status = gUseTc.TC_SR;

  /* 判别中止是否为RC比较触发的 */

  if (status & TC_SR_CPCS)

  {

  if ((LED_PIOC->PIO_ODSR & LED_PIO))

  {

  LED_PIOC->PIO_CODR = LED_PIO;

  }

  else

  {

  LED_PIOC->PIO_SODR = LED_PIO;

  }

  }

  }

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ceping/208994.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部