⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 周立功公司的EasyARM1138资料
💻 C
字号:
// 定时器16位边沿定时捕获示例
#include  "UART_GetPut.H"
#include  <hw_types.h>
#include  <hw_memmap.h>
#include  <hw_ints.h>
#include  <hw_sysctl.h>
#include  <hw_gpio.h>
#include  <hw_timer.h>
#include  <interrupt.h>
#include  <sysctl.h>
#include  <gpio.h>
#include  <timer.h>
#include  "LM3S1138_PinMap.H"
#include  "stdio.h"
 
/*  将较长的标识符定义成较短的形式  */
#define  SysCtlPeriEnable           SysCtlPeripheralEnable
#define  SysCtlPeriDisable          SysCtlPeripheralDisable
#define  GPIOPinTypeIn              GPIOPinTypeGPIOInput
#define  GPIOPinTypeOut             GPIOPinTypeGPIOOutput

/*  定义按键  */
#define  KEY_PORT                   SYSCTL_PERIPH_GPIOG
#define  KEY_PIN                    GPIO_PORTG_BASE , GPIO_PIN_5
#define  keyGet()                   GPIOPinRead(KEY_PIN)

/*  定义定时器  */
#define  T1_A                       TIMER1_BASE , TIMER_A
#define  T1_A_CFG_16_CAP_TIME       TIMER1_BASE , TIMER_CFG_16_BIT_PAIR | TIMER_CFG_A_CAP_TIME
#define  T1_A_EVENT_POS_EDGE        TIMER1_BASE , TIMER_A , TIMER_EVENT_POS_EDGE
#define  T1_A_INT_CAP_EVENT         TIMER1_BASE , TIMER_CAPA_EVENT


/*  防止JTAG失效  */
void  jtagWait(void)
{
    SysCtlPeriEnable(KEY_PORT);                         /*  使能KEY所在的GPIO端口       */
    GPIOPinTypeIn(KEY_PIN);                             /*  设置KEY所在管脚为输入       */
    if ( keyGet()  ==  0x00 ) {                         /*  如果复位时按下KEY,则进入   */
        for (;;);                                       /*  死循环,以等待JTAG连接      */
    }
    SysCtlPeriDisable(KEY_PORT);                        /*  禁止KEY所在的GPIO端口       */
}



void  timer1Init(void)
{
    SysCtlPeriEnable(CCP2_PERIPH);                      /*  使能CCP2所在的GPIO端口      */
    GPIOPinTypeTimer(CCP2_PORT,CCP2_PIN);               /*  配置CCP2管脚为边沿事件输入  */

    SysCtlPeriEnable(SYSCTL_PERIPH_TIMER1);             /*  使能定时器模块              */
    TimerConfigure(T1_A_CFG_16_CAP_TIME);               /*  配置TimerA为16位事件计数器  */

    TimerControlStall(T1_A , true);                     /*  允许在调试时暂停定时器计数  */
    TimerControlEvent(T1_A_EVENT_POS_EDGE);             /*  控制TimerA捕获CCP正边沿     */
    TimerLoadSet(T1_A , 0xFFFF);                        /*  设置计数器初值              */

    TimerIntEnable(T1_A_INT_CAP_EVENT);                 /*  使能TimerA事件捕获中断      */
    IntEnable(INT_TIMER1A);                             /*  使能TimerA中断              */
    IntMasterEnable();                                  /*  使能处理器中断              */

    TimerEnable(T1_A);                                  /*  使能TimerA计数              */
}


volatile  unsigned short  ulTemp  =  0;

/*  TimerA的中断服务函数  */
void  Timer1A_ISR(void)
{
    char buf[20];
    TimerIntClear(T1_A_INT_CAP_EVENT);                  /*  清除TimerA事件捕获中断      */
    ulTemp  =  TimerValueGet(T1_A);                     /*  读取捕获值                  */ 
    sprintf(buf , "%ld \r\n" ,ulTemp);       /*  输出结果,单位:微秒        */
    UART_Puts(buf);
    ulTemp  =  0;                                       /*  调试时请在此设置观察断点    */
}

void  main(void)
{
    jtagWait();                                         /*  防止JTAG失效,重要!        */
    timer1Init();                                       /*  定时器初始化                */
    UART_GetPutInit();
    for (;;);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -