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

📄 iar-

📁 IAR_example_EasyARM8962.zip
💻
字号:
/****************************************Copyright (c)****************************************************
**                               Guangzhou ZHIYUAN electronics Co.,LTD.
**                                     
**                                 http://www.embedtools.com
**
**--------------File Info---------------------------------------------------------------------------------
** File Name:               time32os_per_reg.c
** Last modified Date:      2007.12.24 
** Last Version:            v1.1
** Description:             Stellaris系列单片机的定时器的相关寄存器操作例程
**                          在本范例中,定时器0被设置为32位的可编程周期触发模式。
** 
**--------------------------------------------------------------------------------------------------------
** Created By:              Ni Likao
** Created date:            2007.09.20 
** Version:                 v1.0    
** Descriptions:            定时器被设置为每秒产生2次中断,
**                          每个中断处理器在每一次中断时都翻转一次相应的GPIO端口
**
**--------------------------------------------------------------------------------------------------------
** Modified by:             Kang qinhua
** Modified date:           2008.01.12
** Version:                 v1.1
** Description:
**
*********************************************************************************************************/
#define HWREG(x)		        (*((volatile unsigned long *)(x)))

#define SYSCTL_PERIPH_TIMER0    0x10010000  	                        /*  Timer 0 在系统控制器中的地址*/			    
#define SYSCTL_RCGC1            0x400fe104  	                        /*  运行-模式时钟门控控制1      */
#define SYSCTL_RCGC2            0x400fe108  	                        /*  运行-模式时钟门控控制12     */
#define SYSCTL_PERIPH_GPIOB	    0x20000002  	                        /*  GPIOB 在系统控制器中的地址  */

#define TIMER_CFG_32_BIT_OS     0x00000001  	                        /*  32-bit one-shot timer       */
#define TIMER0_BASE             0x40030000  	                        /*  Timer0的基地址              */
#define TIMER_O_CTL             0x0000000C  	                        /*  GPTM控制寄存器              */
#define TIMER_O_CFG             0x00000000  	                        /*  GPTM配置寄存器              */
#define TIMER_O_TAMR            0x00000004  	                        /*  GPTM TimeA模式寄存器        */
#define TIMER_O_IMR             0x00000018  	                        /*  GPTM中断屏蔽寄存器          */
#define TIMER_O_ICR             0x00000024  	                        /*  GPTM中断清零寄存器          */
#define TIMER_O_TAILR           0x00000028  	                        /*  TimerA 间隔装载复位值       */
                                
#define TIMER_CFG_32_BIT_PER    0x00000002  	                        /*  32位周期触发模式            */
#define TIMER_CTL_TAEN          0x00000001  	                        /*  TimerA 使能                 */
#define TIMER_A                 0x000000ff  	                        /*  Timer A设置的有效位         */
#define TIMER_TIMA_TIMEOUT     	0x00000001  	                        /*  TimerA 超时中断             */
#define TIMER_INT_DATA          15000000                                /*  TimerA定时初始值            */

#define NVIC_EN0                0xe000e100                              /*  中断使能寄存器              */
#define INT_GPIOA               16                                      /*  GPIO Port A中断号           */
#define INT_TIMER0A             35                                      /*  定时器0A中断号              */

#define GPIO_O_DIR              0x00000400                              /*  数据方向寄存器              */
#define GPIO_O_AFSEL            0x00000420                              /*  模式控制寄存器              */
#define GPIO_O_DATA             0x00000000                              /*  数据寄存器                  */
#define GPIO_PORTB_BASE         0x40005000                              /*  GPIOB口的基地址             */
#define PINS1                   0x00000040                              /*  定义LED1                    */
#define GPIO_O_DR2R             0x00000500                              /*  选择2ma驱动电流             */
#define GPIO_O_ODR              0x0000050C                              /*  选择Open drain方式	        */	

/*********************************************************************************************************
** Function name:           CPUcpsie	   
** Descriptions:            使能总中断               
** input parameters:        无
** output parameters:       无      
** Returned value:          无	 
*********************************************************************************************************/
 void  CPUcpsie (void)
{  
    __asm (
        "cpsie i \n"
    );
}

/*********************************************************************************************************
** Function name:           Timer0A_ISR
** Descriptions:            定时器0中断处理程序。工作在32位周期触发模式下。
**                          说明  用KEIL软件时,在Startup.S中添加该中断函数名
** input parameters:        无
** output parameters:       无
** Returned value:          无
*********************************************************************************************************/
void Timer0A_ISR (void)
{
    HWREG(TIMER0_BASE + TIMER_O_ICR) = TIMER_TIMA_TIMEOUT;              /*  清除定时器0中断             */
                                                                                                        
    HWREG(GPIO_PORTB_BASE + (GPIO_O_DATA + (PINS1 << 2))) = 
		 (HWREG(GPIO_PORTB_BASE + (GPIO_O_DATA + (PINS1 << 2))) ^ PINS1);
                                                                        /*  翻转GPIO D7 端口            */
    HWREG(TIMER0_BASE + TIMER_O_CTL) |= TIMER_A & (TIMER_CTL_TAEN);     /*  使能定时器0                 */ 													    
}

/*********************************************************************************************************
** Function name:           main
** Descriptions:            该范例程序演示了如何使用定时器产生周期性中断。定时器设置为每秒产生两次中断;
**                          每个中断处理器在每一次中断时都翻转一次相应的GPIO(D7端口);同时,LED指示灯
**                          会指示每次中断以及中断的速率。在本范例中,定时器0被设置为32位的可编程周期触
**                          发模式。
** input parameters:        无
** output parameters:       无
** Returned value:          无
*********************************************************************************************************/
int  main (void)
{                 
    unsigned char i;
    HWREG(SYSCTL_RCGC1) |= SYSCTL_PERIPH_TIMER0 & 0x0fffffff;           /*  使能定时器0外设             */  
    HWREG(SYSCTL_RCGC2) |= SYSCTL_PERIPH_GPIOB & 0x0fffffff;	        /*  使能GPIO外设                */
    for (i = 10; i > 0; i++) {
        ;
    }
    HWREG(GPIO_PORTB_BASE + GPIO_O_DIR) |= PINS1;                       /*  设置连接LED1的PD7为输出     */
    HWREG(GPIO_PORTB_BASE + GPIO_O_AFSEL) &= ~PINS1;	    	        /*  PB6为GPIO功能               */
    HWREG(GPIO_PORTB_BASE + GPIO_O_DR2R) |= PINS1;                      /*  PB6的驱动电流为2mA          */ 
    HWREG(GPIO_PORTB_BASE + GPIO_O_ODR) |= PINS1;                       /*  设置PB6为PULL_PUSH模式      */                                                
    HWREG(GPIO_PORTB_BASE + (GPIO_O_DATA + (PINS1 << 2))) = ~PINS1;   	/*  点亮LED1                    */
    
    HWREG(TIMER0_BASE + TIMER_O_CTL) &= ~(TIMER_CTL_TAEN );             /*  向GPTM中配置0               */
    HWREG(TIMER0_BASE + TIMER_O_CFG) = TIMER_CFG_32_BIT_OS >> 24;       /*  GPTM配置为:32位定时器配置   */															
    HWREG(TIMER0_BASE + TIMER_O_TAMR) = TIMER_CFG_32_BIT_PER & 255;     /*  设置为周期触发模式          */															 
    HWREG(TIMER0_BASE + TIMER_O_TAILR) = TIMER_INT_DATA / 4;	        /*  设置定时器的初值            */
    HWREG(TIMER0_BASE + TIMER_O_IMR) |= TIMER_TIMA_TIMEOUT;             /*  设置定时器为溢出中断        */  															
    HWREG(TIMER0_BASE + TIMER_O_CTL) |= TIMER_A & (TIMER_CTL_TAEN);     /*  使能定时器0                 */										
    HWREG(NVIC_EN0) = 1<<(INT_TIMER0A-INT_GPIOA);                       /*  使能Timer0a中断(中断号为19) */
    CPUcpsie();                                                         /*  使能全局中断                */ 
    while (1) {
        ;
    }
}

/*********************************************************************************************************
  END FILE
*********************************************************************************************************/

⌨️ 快捷键说明

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