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

📄 main.c

📁 周立功公司的EasyARM1138资料
💻 C
字号:
//  定时器16位输入边沿计数捕获示例

#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  "LED.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  T0_A                       TIMER0_BASE , TIMER_A
#define  T0_A_CFG_16_CAP_COUNT      TIMER0_BASE , TIMER_CFG_16_BIT_PAIR | TIMER_CFG_A_CAP_COUNT
#define  T0_A_EVENT_NEG_EDGE        TIMER0_BASE , TIMER_A , TIMER_EVENT_NEG_EDGE
#define  T0_A_INT_CAP_MATCH         TIMER0_BASE , TIMER_CAPA_MATCH

/*  防止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  timer0Init(void)
{
    SysCtlPeriEnable(CCP0_PERIPH);                      /*  使能CCP0所在的GPIO端口      */
    GPIOPinTypeTimer(CCP0_PORT,CCP0_PIN);               /*  配置CCP0管脚为边沿事件输入  */

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

    TimerControlEvent(T0_A_EVENT_NEG_EDGE);             /*  控制TimerA捕获CCP负边沿     */
    TimerLoadSet(T0_A , 50000UL);                       /*  设置计数器初值              */
    TimerMatchSet(T0_A ,49999UL);                       /*  设置事件计数匹配值          */

    TimerIntEnable(T0_A_INT_CAP_MATCH);                 /*  使能TimerA捕获匹配中断      */
    IntEnable(INT_TIMER0A);                             /*  使能TimerA中断              */
    IntMasterEnable();                                  /*  使能处理器中断              */

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

/*  Timer0A的中断服务函数  */
void  Timer0A_ISR(void)
{
    TimerIntClear(T0_A_INT_CAP_MATCH);                  /*  清除TimerA事件捕获中断      */
    TimerLoadSet(T0_A , 50000UL);                       /*  设置计数器初值              */
    TimerEnable(T0_A);                                  /*  TimerA已停止,重新使能      */
    LED_Toggle(LED1);                                        /*  反转LED显示                 */
}

int  main(void)
{
    jtagWait();                                         /*  防止JTAG失效,重要!        */
    LED_Init(LED1);
     
 
    LED_On(LED1);                                            /*  熄灭LED                     */

    timer0Init();                                       /*  定时器初始化                */

    for (;;);
}

⌨️ 快捷键说明

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