📄 iar-
字号:
/****************************************Copyright (c)****************************************************
** Guangzhou ZHIYUAN electronics Co.,LTD.
**
** http://www.embedtools.com
**
**--------------File Info---------------------------------------------------------------------------------
** File Name: time_16_PWM_reg.c
** Last modified Date: 2007.12.24
** Last Version: v1.1
** Description: Stellaris系列单片机定时器操作
**
**--------------------------------------------------------------------------------------------------------
** Created By: Ni Likao
** Created date: 2007.09.18
** Version: v1.0 v1.0
** Descriptions: 使用定时器产生一路简单的PWM波形
**
**--------------------------------------------------------------------------------------------------------
** 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_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_DR2R 0x00000500 /* 选择2ma驱动电流 */
#define GPIO_O_ODR 0x0000050C /* 选择Open drain方式 */
#define GPIO_O_DIR 0x00000400 /* 数据方向寄存器 */
#define GPIO_O_AFSEL 0x00000420 /* 模式控制寄存器 */
#define GPIO_O_DATA 0x00000000 /* 数据寄存器 */
#define GPIO_PORTD_BASE 0x40007000 /* GPIOD口的基地址 */
#define LED1 0x00000010 /* 定义PD4PWMA输出口 */
/*********************************************************************************************************
** Function name: main
** Descriptions: 该范例程序演示了如何使用定时器的PWM功能。定时器装载值设为3000,匹配值设为2000,
** 采用LED灯作为PWM输出,如果用户改变定时器的装载值或匹配值都会改变PWM的占空比而
** 导致LED灯亮度变化。
** input parameters: 无
** output parameters: 无
** Returned value: 无
** Created By: Ni Likao 倪力考
** Created date: 2007.09.18
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
int main (void)
{
unsigned char i;
HWREG(SYSCTL_RCGC1) |= SYSCTL_PERIPH_TIMER0 & 0x0fffffff; /* 使能定时器0外设 */
HWREG(SYSCTL_RCGC2) |= SYSCTL_PERIPH_GPIOD & 0x0fffffff; /* 使能GPIOD口外设 */
for (i = 10; i > 0; i--) {
;
}
/*
* 设置连接PD4为输出
*/
HWREG(GPIO_PORTD_BASE + GPIO_O_DIR) &= ~( LED1); /* PD4为输出口 */
HWREG(GPIO_PORTD_BASE + GPIO_O_AFSEL) |= LED1; /* PD4为PWMA输出 */
HWREG(GPIO_PORTD_BASE + GPIO_O_DR2R) |= LED1; /* PD4的驱动电流为2mA */
HWREG(GPIO_PORTD_BASE + GPIO_O_ODR) |= LED1; /* 设置PB0为PULL_PUSH模式 */
/*
* 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_TAILR) = 3000; /* 设置定时器匹配初值为3000 */
HWREG(TIMER0_BASE + TIMER_O_TAMATCHR) = 1500; /* 设置定时器匹配值为1500 */
HWREG(TIMER0_BASE + TIMER_O_CTL) |= (TIMER_A & TIMER_CTL_TAEN); /* 使能定时器0 */
while (1) {
;
}
}
/*********************************************************************************************************
END FILE
*********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -