历史上的今天
今天是:2025年01月02日(星期四)
2020年01月02日 | MSP432--TimerA (主要说明如何实现可调PWM)
2020-01-02 来源:eefocus
---恢复内容开始---
16位定时器 Timer_A 输出精密PWM
1.模式操作
Timer_A 支持 :多路捕获/比较 、PWM输出 、 定时
同时支持 :中断
Timer_A 特点: 异步16位具有四种模式的定时器/计数器
可选择、可配置的时钟资源
多达7个可配置的 捕获/比较 寄存器
具有配置PWM的功能
异步输入和输出自锁
中断向量寄存器快速解码定时器中断
2.基本操作模式
三种模式: 连续计数模式
增计数模式
增减计数模式
TimerA_initCompare() 初始化比较模式 /*需要必要的参数*/
TimerA_generatePWM() 生成PWM /*需要必要的参数*/
/*配置TimerA PWM参数*/
Timer_A_PWMConfig pwmConfig =
{
TIMER_A_CLOCKSOURCE_SMCLK,
TIMER_A_CLOCKSOURCE_DIVDER_1,
32000,
TIMER_A_CAPTURECOMPARE_REGISTER_0,
TIMER_A_OUTPUTMODE_TOGGLE,
3200
};
参数详情:
typedef struct _Timer_A_PWMConfig
{
uint_fast16_t clockSource; //时钟资源,选取哪个时钟做定时器的来源,同430中的TASSELx
uint_fast16_t clockSourceDivider;//分频率
uint_fast16_t timerPeriod;//周期
uint_fast16_t compareRegister;//选取比较寄存器
uint_fast16_t compareOutputMode;//比较模块的输出模式
uint_fast16_t dutyCycle;//高电平 占
} Timer_A_PWMConfig;
/*配置TimerA PWM参数*/
/*程序实例*/
/* 配置 MCLK to REFO at 128Khz for LF mode
* 配置 SMCLK 为 64Khz */
MAP_CS_setReferenceOscillatorFrequency(CS_REFO_128KHZ);
MAP_CS_initClockSignal(CS_MCLK, CS_REFOCLK_SELECT, CS_CLOCK_DIVIDER_1);
MAP_CS_initClockSignal(CS_SMCLK, CS_REFOCLK_SELECT, CS_CLOCK_DIVIDER_2);
MAP_PCM_setPowerState(PCM_AM_LF_VCORE0);
/* 将GPIO7.3设置为PWM输出引脚,P1.1位按键
* 中断 */
MAP_GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P7, GPIO_PIN3, GPIO_PRIMARY_MODULE_FUNCTION);
MAP_GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P1, GPIO_PIN1);
MAP_GPIO_clearInterruptFlag(GPIO_PORT_P1, GPIO_PIN1);
MAP_GPIO_enableInterrupt(GPIO_PORT_P1, GPIO_PIN1);
/* 配置定时器A为周期为500ms,初始占空比为10% (3200 ticks)*/
MAP_Timer_A_generatePWM(TIMER_A0_MODULE, &pwmConfig);
/*程序实例*/
3.相关库函数的说明
(1)void Timer_A_clearCapureCompareInterrupt( uint32_t timer,
uint_fast16_t captureCompareRegister) //L1047 允许定时中断
timer:TIMER_A0_MODULE
TIMER_A1_MODULE
TIMER_A2_MODULE
TIMER_A3_MODULE
CaptureCompareRegister:TIMER_A_CAPTURECOMPARE_REGISTER_n (n=0,1,2,3,4,5,6)
Returns None
(2)void Timer_A_clearInterruptFlag(uint32_t timer) //清除定时器TAIFG中断标志位
timer:略
Returns None
(3)void Timer_A_clearTimer(uint32_t timer)//重启/清除 定时器的分频,计数方向等
timer:略
Returns None
(4)void Timer_A_configureContinuousMode(uint32_t timer,
const Timer_A_ContinuousModeConfig *config)//配置定时器A为连续模式
timer:略
Returns None
config: 数据结构如下
/********************************************
typedef struct _Timer_A_ContinuousModeConfig
{
uint_fast16_t clockSource;//时钟资源,选取哪个时钟做定时器的来源,同430中的TASSELx
uint_fast16_t clockSourceDivider;//分频
uint_fast16_t timerInterruptEnable_TAIE;//定时器中断允许位 0禁1允
uint_fast16_t timerClear;//清除位
}Timer_A_ContinuousModeConfig;
********************************************/
(5)void Timer_A_configureUpDownConfig(uint32_t timer,
const Timer_A_UpModeConfig *config)//增减计数模式的配置
timer:略
Returns None
config:数据结构如下
/********************************************
typedef struct _Timer_A_UpDownModeConfig
{
uint_fast16_t clockSource;//同上
uint_fast16_t clockSourceDivider;
uint_fast16_t timerPeriod;
uint_fast16_t timerInterruptEnable_TAIE;
uint_fast16_t captureCompareInterruptEnable_CCR0_CCIE;
uint_fast16_t timerClear;
}Timer_A_UpDownModeConfig;
*********************************************/
(6)void Timer_A_configureUpMode(uint32_t timer,
const Timer_A_UpModeConfig *config)//增计数模式的配置
timer:略
Returns None
config:数据结构如下
/********************************************
typedef struct _Timer_A_UpModeConfig
{
uint_fast16_t clockSource;//同上
uint_fast16_t clockSourceDivider;
uint_fast16_t timerPeriod;
uint_fast16_t timerInterruptEnable_TAIE;
uint_fast16_t captureCompareInterruptEnable_CCR0_CCIE;
uint_fast16_t timerClear;
}Timer_A_UpModeConfig;
**********************************************/
(7)void Timer_A_disableCaptureCompareInterrupt(uint32_t timer,
uint_fast16_t captureCompareRegister)//
函数部分未完待续---
下面是对官方例程的一个修改,主要产生周期为5ms,P2.4输出的可调PWM。
例程中有注释错误,具体在应用中也需要注意到很多问题。
例如中断函数 port1_isr()
官方例程中没有声明外部文件使用,而中断正常工作,需要将中断函数的接口
引入到msp432_startup_ewarm.c文件中的 __root const uVectorEntry __vector_table[] @ ".intvec" ={};
中。因此在实际应用时会出现一些问题,可私信共同探讨。
#include "driverlib.h"
#include "delay.h"
#include #include int32_t test=0; Timer_A_PWMConfig pwmConfig = { TIMER_A_CLOCKSOURCE_SMCLK, TIMER_A_CLOCKSOURCE_DIVIDER_1, 320, TIMER_A_CAPTURECOMPARE_REGISTER_1, TIMER_A_OUTPUTMODE_RESET_SET, 288 }; //配置PWM输出参数 int main(void) { MAP_WDT_A_holdTimer(); MAP_CS_setReferenceOscillatorFrequency(CS_REFO_128KHZ); MAP_CS_initClockSignal(CS_MCLK, CS_REFOCLK_SELECT, CS_CLOCK_DIVIDER_1); MAP_CS_initClockSignal(CS_SMCLK, CS_REFOCLK_SELECT, CS_CLOCK_DIVIDER_2); MAP_PCM_setPowerState(PCM_AM_LF_VCORE0); MAP_GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P2, GPIO_PIN4, GPIO_PRIMARY_MODULE_FUNCTION);//配置P2.4为输出PWM MAP_GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P1, GPIO_PIN1);//P1.1为按键 MAP_GPIO_clearInterruptFlag(GPIO_PORT_P1, GPIO_PIN1); MAP_GPIO_enableInterrupt(GPIO_PORT_P1, GPIO_PIN1); MAP_Interrupt_enableInterrupt(INT_PORT1); MAP_Interrupt_enableSleepOnIsrExit(); MAP_Interrupt_enableMaster(); while (1) { MAP_PCM_gotoLPM0(); } } extern void port1_isr(void)//中断函数 { uint32_t status = MAP_GPIO_getEnabledInterruptStatus(GPIO_PORT_P1); MAP_GPIO_clearInterruptFlag(GPIO_PORT_P1, status); if(status & GPIO_PIN1) { MAP_Timer_A_generatePWM(TIMER_A0_MODULE, &pwmConfig); if(pwmConfig.dutyCycle == 288) pwmConfig.dutyCycle = 32; else pwmConfig.dutyCycle += 32; test=pwmConfig.dutyCycle; } }
上一篇:MSP430 ADC12采样分析
下一篇:MSP432处理器的命名规则
史海拾趣
|
急!有人在wince5.0下把2440超频到533MHz吗? 如题,我超了一下具体步骤: 1.设置了boot中的初始化,及内核中的初始化部分 ldr r0, = CLKDIVN ldr r1, = 0x5 & ...… 查看全部问答> |
|
请问在wince 5.0下如何使用CMWAP拨号后访问wap网站? 我使用wince 5.0的做作系统,使用TD模块,拨号时设置\"AT+CGDCONT=1,\\\"IP\\\",\\\"CMWAP\\\"\",拨号号码为*98*1#,浏览器组件选择的是“Pocket Internet Explorer”,拨号拨号成功后,我使用浏览器试图打开“wap.3g.net.cn”,可是 ...… 查看全部问答> |
|
我用EVC做了一个工程,想要实现功能:不管程序执行到什么状态,只要SD卡或其它卡被拔出就退出程序。问题是怎么实时检测到SD卡的状态呢???在WINCE下没有WM_DEVICECHANGE等检测设备的消息,象这个功能在WINCE下应该怎么实现比较好呢??!!… 查看全部问答> |
|
有点8086汇编基础及焊接元件的基础 有电烙铁万能表和一大堆电容,电阻,三极管,二极管什么的(这些东西单片机能用到不?) 整天盯着电脑对眼睛太不好了(估计1000多度了),想学学和汇编关系比较大的单片机,但不知道要花多少钱 大概都要买什么啊?… 查看全部问答> |
|
请问各位大牛,版主: 小弟最近在做基于wince.net平台的手持设备课题,用的开发环境是EVC4.0+PocketPC2003,用何种数据库开发好呢?对数据库能力本身的要求是,支持存储5000条数据,属性值有5个以上。最近几天搜资料,好像用ADOCE访问ACCESS可以, ...… 查看全部问答> |
|
针对煤矿井下采用热电偶测量环境温度的缺点, 文章提出了一种基于单片机 MS P 4 3 0控制数字温度传感器 DS 1 8 B 2 0实现矿井下温湿度监测和光纤通信 系统的设计 方案。该 系统通过单片机 MS P 4 3 0控制温度传感器 DS1 8 B2 0实现对煤矿 井下的温 ...… 查看全部问答> |
|
我现在正在做lm3s8962和MSP430F2013的I2C通信,流程是这样的:lm3s8962做主机,MSP430f2013做从机,8962定时发出接收数据请求,F2013发出两个数据。F2013参考的是msp430x20x3_usi_09.c的程序,并且DCO的频率设为8MHz;lm3s8962的程序是使用库函数, ...… 查看全部问答> |




