Other Parts Discussed in Thread: CC3200
工具/软件:Code Composer Studio
我想创建一个1秒的计时器中断以及1个计数器中断、当找到匹配值时、该中断溢出。
我希望在单个函数中同时使用两个中断。
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.
//标准包括
#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 (永久)
{
}
}