📄 main.c
字号:
// 定时器16位PWM用法示例
#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>
/* 将较长的标识符定义成较短的形式 */
#define SysCtlPeriEnable SysCtlPeripheralEnable
#define SysCtlPeriDisable SysCtlPeripheralDisable
#define GPIOPinTypeIn GPIOPinTypeGPIOInput
#define GPIOPinTypeOut GPIOPinTypeGPIOOutput
/* 定义按键 */
#define KEY_PORT SYSCTL_PERIPH_GPIOB
#define KEY_PIN GPIO_PORTB_BASE , GPIO_PIN_5
#define keyGet() GPIOPinRead(KEY_PIN)
/* 定义定时器 */
#define CCP2_PORT SYSCTL_PERIPH_GPIOD
#define CCP2_PIN GPIO_PORTD_BASE , GPIO_PIN_5
#define CCP3_PORT SYSCTL_PERIPH_GPIOC
#define CCP3_PIN GPIO_PORTC_BASE , GPIO_PIN_6
#define T1_A TIMER1_BASE , TIMER_A
#define T1_B TIMER1_BASE , TIMER_B
#define T1_BOTH TIMER1_BASE , TIMER_BOTH
#define T1_BOTH_CFG_16_PWM TIMER1_BASE , TIMER_CFG_16_BIT_PAIR | \
TIMER_CFG_A_PWM | \
TIMER_CFG_B_PWM
/* 防止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_PORT); /* 使能CCP2所在的GPIO端口 */
GPIOPinTypeTimer(CCP2_PIN); /* 配置CCP2管脚为PWM输出 */
SysCtlPeriEnable(CCP3_PORT); /* 使能CCP3所在的GPIO端口 */
GPIOPinTypeTimer(CCP3_PIN); /* 配置CCP3管脚为PWM输出 */
SysCtlPeriEnable(SYSCTL_PERIPH_TIMER1); /* 使能定时器模块 */
TimerConfigure(T1_BOTH_CFG_16_PWM); /* 配置定时器为双16位PWM */
TimerControlLevel(T1_BOTH , true); /* 控制PWM输出反相 */
TimerLoadSet(T1_BOTH , 6000); /* 设置定时器初值 */
TimerMatchSet(T1_A , 1500); /* 设置TimerA的PWM匹配值 */
TimerMatchSet(T1_B , 4000); /* 设置TimerB的PWM匹配值 */
TimerEnable(T1_BOTH); /* 使能定时器计数,PWM开始输出 */
}
int main(void)
{
jtagWait(); /* 防止JTAG失效,重要! */
timer1Init(); /* 定时器初始化 */
for (;;);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -