利用MSP430F5529定时器捕获功能,实现信号周期或频率的测量

发布者:shiwanyongbing最新更新时间:2022-11-04 来源: csdn关键字:MSP430F5529  定时器  捕获功能  信号周期 手机看文章 扫描二维码
随时随地手机看文章

// 这个程序利用TIMER A0生成1KHz的方波,从引脚P1.3输出,送到引脚P7.4, 


// 再利用TIMER B0测量周期。为测试方便,引脚P1.0输出32KHz的ACLK,


// 引脚P2.2输出12MHz的SMCLK.


//  ACLK = LFXT1 = 32kHz; SMCLK = MCLK = 12MHz

//

//                 MSP430F5529

//             -------------------------

//         /||                    XT1IN|-

//          | |                              | 32kHz

//          --|RST        XT1OUT|-

//            |                              |

//            |            P7.4/TB0.2|<-- CCI2A <-|

//            |            P1.3/TA0.2|--> CCR2 -->|

//            |                              |

//            |                              |    MCLK = 12MHz DCO

//            |                       P2.2|--> SMCLK = 12MHz DCO

//            |                       P1.0|--> ACLK = 32kHz LFXT1

//            --------------------------

//******************************************************************************

#include "driverlib.h"


uint16_t REdge1, REdge2, Period, InterCount = 0;


void main(void)

{

    // Stop WDT

    WDT_A_hold(WDT_A_BASE);


    // Configure XT1

    GPIO_setAsPeripheralModuleFunctionInputPin(

                          GPIO_PORT_P5,

                          GPIO_PIN4 + GPIO_PIN5

                          );


    UCS_turnOnLFXT1 (UCS_XT1_DRIVE_3,

                    UCS_XCAP_3

                    );


    // Increase Vcore setting to level1 to support fsystem=12MHz

    // NOTE: Change core voltage one level at a time..

    PMM_setVCore (PMM_CORE_LEVEL_1);


    // Initialize DCO to 12MHz

    UCS_initFLLSettle(12000,

                      374);


    // Setup Port Pins

    //P1.0 --> ACLK

    GPIO_setAsPeripheralModuleFunctionOutputPin(

                          GPIO_PORT_P1,

                          GPIO_PIN0

                          );

    //P2.2 --> SMCLK

    GPIO_setAsPeripheralModuleFunctionOutputPin(

                          GPIO_PORT_P2,

                          GPIO_PIN2

                          );


    // Configure ports TB0.2 input and TA0.2 output

    // TB0.2 input

    // TB0.2 option select

    // TA0.2 output

    // TA0.2 option select

    GPIO_setAsPeripheralModuleFunctionOutputPin(

                      GPIO_PORT_P1,

                      GPIO_PIN3

                      );


    GPIO_setAsPeripheralModuleFunctionInputPin(

                        GPIO_PORT_P7,

                        GPIO_PIN4

                        );


    // Configure TA0.2 compare output, 1kHz freq, 50% dutycycle

    Timer_A_initCompareModeParam initCompParam = {0};

    initCompParam.compareRegister = TIMER_A_CAPTURECOMPARE_REGISTER_2;

    initCompParam.compareInterruptEnable = TIMER_A_CAPTURECOMPARE_INTERRUPT_DISABLE;

    initCompParam.compareOutputMode = TIMER_A_OUTPUTMODE_TOGGLE;

    initCompParam.compareValue = 16;

    Timer_A_initCompareMode(TIMER_A0_BASE, &initCompParam);


    Timer_A_initUpModeParam initUpParam = {0};

    initUpParam.clockSource = TIMER_A_CLOCKSOURCE_ACLK;

    initUpParam.clockSourceDivider = TIMER_A_CLOCKSOURCE_DIVIDER_1;

    initUpParam.timerPeriod = 16;

    initUpParam.timerInterruptEnable_TAIE = TIMER_A_TAIE_INTERRUPT_DISABLE;

    initUpParam.captureCompareInterruptEnable_CCR0_CCIE =

        TIMER_A_CAPTURECOMPARE_INTERRUPT_DISABLE;

    initUpParam.timerClear = TIMER_A_DO_CLEAR;

    initUpParam.startTimer = false;

    Timer_A_initUpMode(TIMER_A0_BASE, &initUpParam);


    Timer_A_startCounter(TIMER_A0_BASE,

          TIMER_A_UP_MODE

          );


    Timer_B_initContinuousModeParam initContParam = {0};

    initContParam.clockSource = TIMER_B_CLOCKSOURCE_SMCLK;

    initContParam.clockSourceDivider = TIMER_B_CLOCKSOURCE_DIVIDER_1;

    initContParam.timerInterruptEnable_TBIE = TIMER_B_TBIE_INTERRUPT_DISABLE;

    initContParam.timerClear = TIMER_B_DO_CLEAR;

    Timer_B_initContinuousMode(TIMER_B0_BASE, &initContParam);


    Timer_B_startCounter(TIMER_B0_BASE,

              TIMER_B_CONTINUOUS_MODE

              );


    Timer_B_clearCaptureCompareInterrupt(TIMER_B0_BASE,

        TIMER_B_CAPTURECOMPARE_REGISTER_2);


    Timer_B_initCaptureModeParam initCapParam = {0};

    initCapParam.captureRegister = TIMER_B_CAPTURECOMPARE_REGISTER_2;

    initCapParam.captureMode = TIMER_B_CAPTUREMODE_RISING_EDGE;

    initCapParam.captureInputSelect = TIMER_B_CAPTURE_INPUTSELECT_CCIxA;

    initCapParam.synchronizeCaptureSource = TIMER_B_CAPTURE_SYNCHRONOUS;

    initCapParam.captureInterruptEnable = TIMER_B_CAPTURECOMPARE_INTERRUPT_ENABLE;

    initCapParam.captureOutputMode = TIMER_B_OUTPUTMODE_OUTBITVALUE;

    Timer_B_initCaptureMode(TIMER_B0_BASE, &initCapParam);


    while(1)

    {

      __bis_SR_register(LPM0_bits + GIE);   // Enter LPM0

      __no_operation();                     // For debugger

    }

}


// Timer0_B1 Interrupt Vector

#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)

#pragma vector=TIMER0_B1_VECTOR

__interrupt

#elif defined(__GNUC__)

__attribute__((interrupt(TIMER0_B1_VECTOR)))

#endif

void TIMER0_B1_ISR (void)

{

    switch(TB0IV)

    {

        case 0x04://捕捉比较中断2

            if(InterCount == 0)

            {

                REdge1 = Timer_B_getCaptureCompareCount(TIMER_B0_BASE,

                                                TIMER_B_CAPTURECOMPARE_REGISTER_2);

                InterCount ++;

            }

            else

            {

                REdge2 = Timer_B_getCaptureCompareCount(TIMER_B0_BASE,

                                       TIMER_B_CAPTURECOMPARE_REGISTER_2);

                InterCount = 0;

                Period = (REdge2 - REdge1);

            }

            break;


        default:

            break;

    }

    __bic_SR_register_on_exit(LPM0_bits);      // Exit LPM0

}


关键字:MSP430F5529  定时器  捕获功能  信号周期 引用地址:利用MSP430F5529定时器捕获功能,实现信号周期或频率的测量

上一篇:MSP430F5529LP按键点亮LED灯
下一篇:MSP430f5529LP通过串口数据控制LED亮灭

推荐阅读最新更新时间:2024-11-07 22:55

stm32 定时器 捕获
输入捕获模式可以用来测量脉冲宽度或者测量频率。STM32的定时器,除了TIM6和TIM7,其他定时器都有输入捕获功能。STM32的输入捕获,简单的说就是通过检测 输入捕获模式可以用来测量脉冲宽度或者测量频率。STM32的定时器,除了TIM6和TIM7,其他定时器都有输入捕获功能。STM32的输入捕获,简单的说就是通过检测TIMx_CHx上的边沿信号,在边沿信号发生跳变(比如上升沿/下降沿)的时候,将当前定时器的值(TIMx_CNT)存放到对应的通道的捕获/比较寄存(TIMx_CCRx)里面,完成一次捕获。同时还可以配置捕获时是否触发中断/DMA 等. 例如:我们用到TIM5_CH1来捕获高电平脉宽,也就是要先设置输入捕获为上升沿检
[单片机]
MCS-51单片机定时器/计数器、串行口、多机通讯
MCS-51单片机含有2个定时器/计数器,具有4种工作方式。具有两种工作模式(计数器模式和定时器模式) MCS-51单片机含有1个全双工串行口,具有4种工作方式。 TMOD - 定时器/计数器方式控制寄存器 TCON - 定时器/计数器控制寄存器 SMOD - 串行口波特率系数选择位 SCON - 串行口控制寄存器 SBUF - 串行口数据缓冲器 TH0 - 定时器/计数器0(高字节) TL0 - 定时器/计数器0(低字节) TH1 - 定时器/计数器1(高字节) TL1 - 定时器/计数器1(低字节) 一、定时器/计数器 定时器/计数器T0由特殊功能寄存器TH0、TL0构成 定时器/计数器T1由特殊功能寄存器TH1、TL1构成
[单片机]
MCS-51单片机<font color='red'>定时器</font>/计数器、串行口、多机通讯
MSP430定时器A 输出1KHz的PWM方波
简介:输出模式0 输出模式:输出信号OUTx由每个捕获/比较模块的控制寄存器CCTLx中的OUTx位定义,并在写入该寄存器后立即更新。最终位OUTx直通。 定时器A输出方波 1、定时器的PWM输出8种模式 输出模式0输出模式:输出信号OUTx由每个捕获/比较模块的控制寄存器CCTLx中的OUTx位定义,并在写入该寄存器后立即更新。最终位OUTx直通。 输出模式1置位模式:输出信号在TAR等于CCRx时置位,并保持置位到定时器复位或选择另一种输出模式为止。 输出模式2PWM翻转/复位模式:输出在TAR的值等于CCRx时翻转,当TAR的值等于CCR0时复位。 输出模式3PWM置位/复位模式:输出在TAR的值等于
[单片机]
MSP430<font color='red'>定时器</font>A 输出1KHz的PWM方波
STM32F103利用定时器2与串口接收指令控制LED亮度
通过串口接收到的数据改变PA8输出的占空比来控制LED小灯的亮度 主函数 char *str_light = LIGHT: ; unsigned char PWM_BUF = 0; int main(void) { PWM_Init(); USART3_TIM2_Init(115200); delay_init(); while(1) { if(RX_SATA == 1) { if(strstr(RX_BUF,str_light) != 0) { delay_ms(1); PWM_BUF =(RX_BUF -0x30)*10+(RX_BUF -0x30); TIM_SetC
[单片机]
STM32F103利用<font color='red'>定时器</font>2与串口接收指令控制LED亮度
定时器的输出比较模式产生的PWM波的频率计算
定时器的输出比较模式产生的PWM波的频率计算的公式:72M/((2*(arr+1))*(psc+1) ) 比如设置: PWM_Init(1000-1,72-1); (PWM_Init(arr,psc);) 则每路PWM频率为500Hz 。 PWM_Init(arr,psc) { TIM_TimeBaseStructure.TIM_Period = arr; TIM_TimeBaseStructure.TIM_Prescaler =psc; }
[单片机]
MSP430F5529 DriverLib 库函数学习笔记(十四)看门狗定时器 (WDT)
平台:Code Composer Studio 10.3.1 MSP430F5529 LaunchPad™ Development Kit (MSP‑EXP430F5529LP) 硬知识 在工业控制现场,往往会由于供电电源、空间电磁干扰或其他的原因引起强烈的干扰噪声。这些干扰作用于数字器件,极易使其产生误动作,引起单片机程序跑飞,若不进行有效的处理,程序就不能回到正常的运行状态。为了保证系统的正常工作,一方面要尽量减少干扰源对系统的影响;另一方面,在系统受到影响之后要能尽快地恢复,看门狗就起到了这个作用。看门狗的用法:在正常工作期间,一次看门狗定时时间将产生一次系统复位。如果通过编程使看门狗定时时间稍大于程序中主循环执
[单片机]
<font color='red'>MSP430F5529</font> DriverLib 库函数学习笔记(十四)看门狗<font color='red'>定时器</font> (WDT)
关于高速单片机STM32H7定时器同步启动并输出多路PWM波形的探究
随着嵌入式系统技术的不断发展,PWM(Pulse Width Modulation)信号在各种应用场景中得到了广泛应用,例如电机控制、LED灯控、音频处理等方面。在多个PWM信号同时输出时,为了保证信号的同步性和稳定性,定时器同步启动技术成为了必要的手段。 STM32系列芯片以其高性能和多功能外设而广受业界认可。其中,STM32H7系列芯片配备了丰富的定时器模块,既具备通用性又具备高性能,支持多种工作模式,可以满足多种嵌入式应用对高精度、多信号输出的需求。 本文基于STM32H7芯片,研究了定时器同步启动技术在PWM信号多路输出中的应用。我们在通过研究相关技术的基础上,提出了一种基于定时器同步启动的PWM输出方案,并通过实
[单片机]
关于高速单片机STM32H7<font color='red'>定时器</font>同步启动并输出多路PWM波形的探究
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved