SAM4E单片机之旅——7、LED闪烁之TC中断

来源:本站
导读:目前正在解读《SAM4E单片机之旅——7、LED闪烁之TC中断》的相关信息,《SAM4E单片机之旅——7、LED闪烁之TC中断》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《SAM4E单片机之旅——7、LED闪烁之TC中断》的详细说明。
简介:现在尝试使用一个更为通用的定时器进行定时:定时计数器(Timer Counter, TC)。

RTT主要用做一个全局的定时器,而且不太通用。现在尝试使用一个更为通用的定时器进行定时:定时计数器(TimerCounter,TC)。

TC提供了广泛的功能,主要可以分为对输入的测量,以及波形的输出。同样,它可以产生一系列的中断。这一次将使TC以一个固定的周期产生中断,以达到定时的目的。

一、TC配置

1.在PMC中使能TC时钟。

2.时钟选择。

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

3.波形及中断选择。

当TC工作在波形输出模式下时,可以为输出选择若干种波形。在这里,不需要关心具体的波形,而是要关注每个波形模式下,计数器的工作方式,以及产生中断的时机。

选择的波形如下:

SAM4E单片机之旅——7、LED闪烁之TC中断

在当计数器的值和RC寄存器里的值相等时,会产生一个触发,使计数器重置,并重新开始计数。

在输出模式下,可以选择在计数器的值在与RA、RB、和(或)RC相等时,产生中断。这里选择与RC值相同时中断。

4.使能通道。

首先需要使能(enable)通道时钟,并且需要启动(start)这个时钟。可以通过访问TC_CCR寄存器使能时钟,同时可以产生一个软触发,以启动时钟。

5.NVIC中使能中断。

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

#definegUseTcTC0->TC_CHANNEL[0]

voidConfigTC(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);

NVIC_EnableIRQ(TC0_IRQn);

}

1

二、TC中断服务函数

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

voidTC0_Handler(void)

{

uint32_tstatus=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;

}

}

}

提醒:《SAM4E单片机之旅——7、LED闪烁之TC中断》最后刷新时间 2024-03-14 00:53:42,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《SAM4E单片机之旅——7、LED闪烁之TC中断》该内容的真实性请自行鉴别。