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

📄 timer_pwm_reg.c

📁 EasyARM615在IAR上的实验源代码
💻 C
字号:
/****************************************Copyright (c)**************************************************
**                               Guangzhou ZHIYUAN electronics Co.,LTD.
**                                     
**                                 http://www.embedtools.com
**
**--------------File Info-------------------------------------------------------------------------------
** File Name:           time_16_PWM_reg.c
** Last modified Date:  2008.01.18 
** Last Version:        v1.0
** Description:         Stellaris系列单片机定时器操作
** 
**------------------------------------------------------------------------------------------------------
** Created By:          Kang qinhua
** Created date:        2008.01.18
** Version:             v1.0
** Descriptions:        使用定时器产生一路简单的PWM波形
**
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** 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_GPIOD	    	0x20000008                          // GPIO D 在系统控制器中的地址

#define TIMER0_BASE            	 	0x40030000                          // Timer0的基地址
#define TIMER_O_CFG             	0x00000000                          // GPTM配置寄存器
#define TIMER_O_TAMR            	0x00000004                          // TimerA 模式寄存器
#define TIMER_O_CTL             	0x0000000C                          // GPTM控制寄存器
#define TIMER_O_TAILR           	0x00000028                          // TimerA 间隔装载寄存器
#define TIMER_O_TAMATCHR       		0x00000030                          // TimerA 匹配寄存器

#define TIMER_CFG_16_BIT_PAIR   	0x04000000                          // 两个16位定时器
#define TIMER_CTL_TAEN          	0x00000001                          // TimerA 使能
#define TIMER_CFG_A_PWM         	0x0000000A                          // Timer A PWM 输出
#define TIMER_A                 	0x000000ff                          // Timer A

#define GPIO_O_DIR					0x00000400                          // 数据方向寄存器
#define GPIO_O_AFSEL				0x00000420                          // 模式控制寄存器
#define GPIO_O_DATA					0x00000000                          // 数据寄存器
#define GPIO_PORTD_BASE				0x40007000                          // GPIO D 口的基地址
#define LED1  	                	0x00000010                          // 定义PD4为PWMA输出口

/*使能全局中断*/
void  CPUcpsie(void)
{
    __asm(
        "cpsie  i \n"
    );
}

int main(void)
{
  HWREG(SYSCTL_RCGC1) |= SYSCTL_PERIPH_TIMER0 & 0x0fffffff;	            //使能定时器0外设	
  HWREG(SYSCTL_RCGC2) |= SYSCTL_PERIPH_GPIOD & 0x0fffffff;	            //使能GPIO D口外设
  CPUcpsie();												            // 使能全局中断 
  // 设置连接PD4为输出
  HWREG(GPIO_PORTD_BASE + GPIO_O_DIR) &= ~( LED1);		                //PD4为输出口
  HWREG(GPIO_PORTD_BASE + GPIO_O_AFSEL) |= LED1;		                //PD4为PWMA输出
  //Timer0中断配置	  
  HWREG(TIMER0_BASE + TIMER_O_CTL) &= ~(TIMER_CTL_TAEN);	            //禁止定时器
  HWREG(TIMER0_BASE + TIMER_O_CFG) |= TIMER_CFG_16_BIT_PAIR>>24;        //GPTM配置为:16位定时器配置
  							
  HWREG(TIMER0_BASE + TIMER_O_TAMR) |= TIMER_CFG_A_PWM & 255; 	        //设置为PWM模式
  //HWREG(TIMER0_BASE + TIMER_O_CTL) |= 1<<6;	                        //设置为PWM输出翻转(打开可选择为翻转)
  HWREG(TIMER0_BASE + TIMER_O_TAILR) = 3000;                            //设置定时器匹配初值为3000 
  HWREG(TIMER0_BASE + TIMER_O_TAMATCHR) = 1000;		                    //设置定时器匹配值为1000
  HWREG(TIMER0_BASE + TIMER_O_CTL) |= (TIMER_A & TIMER_CTL_TAEN);       // 使能定时器0
  while(1);
}

⌨️ 快捷键说明

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