TIMER_CAPTURE

smallcracker 2021-01-29 00:00:00
Categories: Tags:

TIMER_CAPTURE

功能介绍

计时器模块可以捕捉io脚的电平边沿,硬件上要求电平保持时间大于两个时钟周期,在这个模式下,技术范围扩展到24/48位

计数值可以为加计数、减计数,加计数的范围是零到预设值,减计数是Preload到预设值。

加计数和减计数的另一个差异是计数终止时的差异,加计数模式下,计数器会自动清零重新计数,减计数模式下,计数器会恢复preload值,但是会停止计数,需要重新使能。

功能一,边沿计数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41

void GPIO_init(){
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3);
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3,GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3 );

}

void Timer2AIntHandler(){
unsigned long ulstatus = TimerIntStatus(TIMER2_BASE, TIMER_CAPA_MATCH | TIMER_CAPB_MATCH);
TimerIntClear(TIMER2_BASE, ulstatus);
t++;
if(t%2){
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3,GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3 );
}
else{
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3, 0);
}
return ;
}
void GPIO_ccp(){
//使能GPIO时钟
//SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
//使能Timer模块
SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER2);
//配置GPIO引脚为Timer捕捉模式
GPIOPinConfigure(GPIO_PF4_T2CCP0);
GPIOPinTypeTimer(GPIO_PORTF_BASE, GPIO_PIN_4);
//配置管脚为弱上拉模式
GPIOPadConfigSet(GPIO_PORTF_BASE, GPIO_PIN_4, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPU);
//配置Timer的A模块为边沿触发 加计数模式
TimerConfigure(TIMER2_BASE, TIMER_CFG_SPLIT_PAIR | TIMER_CFG_A_CAP_COUNT_UP);
//设置下降沿触发
TimerControlEvent(TIMER2_BASE, TIMER_A, TIMER_EVENT_POS_EDGE);
TimerMatchSet(TIMER2_BASE, TIMER_A, 3);
TimerIntRegister(TIMER2_BASE, TIMER_A, Timer2AIntHandler);
IntMasterEnable();
TimerIntEnable(TIMER2_BASE, TIMER_CAPA_MATCH);
IntEnable(INT_TIMER2A);
TimerEnable(TIMER2_BASE,TIMER_A);
}

功能二,边沿计时

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
void Timer2AIntHandler(){
unsigned long s=TimerIntStatus(TIMER2_BASE,TIMER_CAPA_EVENT);
TimerIntClear(TIMER2_BASE,s);
UARTprintf("Captured Value: 0x%04X\n", TimerValueGet(TIMER2_BASE, TIMER_A));
return ;
}
void TIMER_init(){
//使能定时器和GPIO
SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER2);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
//配置GPIO引脚为timer捕捉模式
GPIOPinConfigure(GPIO_PF4_T2CCP0);
GPIOPinTypeTimer(GPIO_PORTF_BASE, GPIO_PIN_4);
//配置管脚为弱上拉模式
GPIOPadConfigSet(GPIO_PORTF_BASE, GPIO_PIN_4, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPU);
//配置Timer模块为沿触发加计时模式
TimerConfigure(TIMER2_BASE, TIMER_CFG_SPLIT_PAIR | TIMER_CFG_A_CAP_TIME_UP);
//使用下降沿触发
TimerControlEvent(TIMER2_BASE, TIMER_A, TIMER_EVENT_NEG_EDGE);
//设置计数范围
TimerLoadSet(TIMER2_BASE, TIMER_A, 0x8FFF);
//注册定时器中断
TimerIntRegister(TIMER2_BASE, TIMER_A, Timer2AIntHandler);
//使能中断,定时器,定时器中断
IntMasterEnable();
TimerIntEnable(TIMER2_BASE, TIMER_CAPA_EVENT);
IntEnable(INT_TIMER2A);
TimerEnable(TIMER2_BASE,TIMER_A);
return ;
}