This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/CC3200:CC3200捕获模式

Guru**** 2779495 points

Other Parts Discussed in Thread: CC3200

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/742794/ccs-cc3200-cc3200-capture-mode

器件型号:CC3200

工具/软件:Code Composer Studio

我想创建一个1秒的计时器中断以及1个计数器中断、当找到匹配值时、该中断溢出。

我希望在单个函数中同时使用两个中断。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。


    //标准包括
    #include

    // Driverlib 包括
    #include "hw_types.h"
    #include "interrupt.h"
    #include "hw_ints.h"
    #include "HW_APPS_RCM.h"
    #include "hw_common_reg.h"
    #include "prcm.h"
    #include "gpio.h"
    #include "rom.h"
    #include "rom_map.h"
    #include "hw_memmap.h"
    #include "timer.h"
    #include "utils.h"
    #include "pin.h"

    //通用接口包括
    #include "timer_if.h"
    #include "GPIO_if.h"
    #include "UART_IF.h"
    #include "pinmux.h"


    //
    //宏定义
    //
    #define application_version "1.1.1"
    #define APP_NAME "MFM 方波脉冲测量"
    #define forever 1.

    //
    //向量表的全局变量
    //
    #if defined (CCS)(如果已定义)
    extern void (* const g_pfnVectors [])(void);
    #endif
    #IF 定义(ewarm)
    extern uVectorEntry __vector_table;
    #endif

    //
    //
    //定时器中断处理程序使用的全局变量。
    //
    //
    静态易失性 unsigned long g_ulSysTickValue;
    静态易失性无符号长整型 g_ulBase;
    静态易失性无符号长整型 g_ulRefBase;
    静态易失性无符号长整型 g_ulRefTimerInts = 0;
    静态易失性无符号长整型 g_ulIntClearVector;
    unsigned long counter_overFlows;
    静态无符号超长整型 total_counts;
    静态无符号长整型;
    unsigned long g_ulTimerInts;

    //
    //
    //! 第一个定时器中断的中断处理程序。
    //!
    //! \param 无
    //!
    //! \不返回任何内容
    //
    //
    无效
    TimerBaseIntHandler (空)

    //
    //清除计时器中断。
    //
    Timer_IF_InterruptClear (g_ulBase);
    sec++;
    total_counts = counter_overFlows * 10000 + MAP_TimerValueGet (TIMERERA2_base、timer_A);
    报告("以%d 秒为单位的总脉冲计数:%d \n\r\n、秒、total_counts);
    GPIO_IF_LedToggle (MCU_RED_LED_GPIO);//MCU_GREEN_LED_GPIO

    //
    //
    //! 定时器中断处理程序
    //
    //
    静态空 TimerIntHandler()

    //
    //清除中断
    //
    MAP_TimerIntClear (TIMERERA2_base、TIMER_CAP_MATCH);
    counter_overFlows ++;
    TimerValueSet (TIMERERA2_base、TIMER_A、0x00);
    报告("在 ISR 中:%d 值:0x%x \n\r\n、counter_overlows、MAP_TimerValueGet (TIMERERA2_base、timer_A));

    //
    //
    //! UART 上的应用启动显示
    //!
    //! \param 无
    //!
    //! \不返回任何内容
    //!
    //
    无效
    DisplayBanner (char * AppName)


    报告("\n\n\r\n");
    报告("\t \n\n");
    报告("\t\t\t CC3200 %s 应用程序\n", AppName");
    报告("\t \n\n");
    报告("\n\n\r\n");


    //
    //
    //! 电路板初始化和配置
    //!
    //! \param 无
    //!
    //! \无返回
    //
    //
    静态空
    BoardInit(空)

    /*如果 TI-RTOS 矢量表由操作系统本身初始化*/
    #ifndef use_TIRTOS
    //
    //设置矢量表基址
    //
    #if defined (CCS)(如果已定义)
    MAP_IntVTableBaseSet ((无符号长整型)&g_pfnVectors[0]);
    #endif
    #IF 定义(ewarm)
    MAP_IntVTableBaseSet ((unsigned long)&__vector_table);
    #endif
    #endif
    //
    //启用处理器
    //
    MAP_IntMasterEnable();
    MAP_IntEnable (FAULT_SysTick);

    PRCMCC3200MCUInit();


    //
    //
    //! main 函数演示了如何使用计时器来生成
    //! 周期性中断。
    //!
    //! \param 无
    //!
    //! \不返回任何内容
    //
    //
    内部
    main (空)

    //
    //初始化电路板配置
    BoardInit();
    //
    // Pinmux
    //
    PinMuxConfig();
    //
    //配置 UART
    //
    InitTerm();
    //
    //显示应用程序横幅
    //
    DisplayBanner (app_name);
    //
    //将 LED 配置为红色和绿色
    //
    GPIO_IF_LedConfigure (LED1);

    GPIO_IF_LedOff (MCU_RED_LED_GPIO);

    //
    //第一个计时器的基地址
    //
    G_ulBase = TIMERA0_BASE;
    //
    //配置计时器
    //
    TIMER_IF_Init (PRCM_TIMERERA0、G_ulBase、TIMER_CFG_PERIODICRAE、TIMER_A、0);
    //
    //设置计时器超时的中断。
    //
    Timer_IF_IntSetup (g_ulBase、timer_A、TimerBaseIntHandler);
    //
    //打开计时器以毫秒为单位馈送值
    //
    Timer_IF_Start (g_ulBase、timer_A、1000);// 1秒延迟
    //
    //在计时器运行时永久循环。
    //
    //
    //启用下拉
    //
    MAP_PinConfigSet (PIN_15、PIN_TYPE_STD_PD、PIN_Strength _6mA);


    //
    //寄存器计时器中断处理程序
    //
    MAP_TimerIntRegister (TIMERERA2_base、TIMER_A、TimerIntHandler);

    //
    //将定时器配置为边沿计数模式
    //
    MAP_TimerConfigure (TIMERERA2_base,(TIMER_CFG_SPLIT_PAIR | TIMER_CFG_A_CAP_COUNT_UP));//TIMER_CFG_A_CAP_COUNT_UP:对于向上计数,TIMER_CFG_A_CAP_COUNT:向下计数

    //
    //设置检测边沿
    //
    MAP_TimerControlEvent (TIMERERA2_base、TIMER_A、TIMER_EVENT_POS_EDGE);//

    //
    //设置重新加载值/****** /
    //
    MAP_TimerMatchSet (TIMERERA2_base、TIMER_A、10000);
    MAP_TimerLoadSet (TIMERERA2_base、TIMER_A、11000);


    //
    //启用捕捉事件中断
    //
    MAP_TimerIntEnable (TIMERERA2_base、TIMER_CAP_MATCH);//针对边沿:TIMER_CAPA_MATCH //针对时间:TIMER_CAPA_EVENT

    //
    //启用计时器
    //
    MAP_TimerEnable (TIMERERA2_base、TIMER_A);
    while (永久)




  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Kiran、

    您的问题是否已解决? 您将您的帖子标记为已解决-是否错误地标记了该帖子? 如果标记错误、请拒绝、以便重新打开并查看该主题。