本帖最后由 damiaa 于 2023-10-29 14:23 编辑
【MSPM0L1306 LaunchPad】 8 定时器定时功能实验
【MSPM0L1306 LaunchPad】 1 开箱+环境搭建+点灯
【MSPM0L1306 LaunchPad】 2 GUI Composer GUI 玩板子
【MSPM0L1306 LaunchPad】 3 Ti云开发环境
【MSPM0L1306 LaunchPad】 4 用MDK环境点灯
【MSPM0L1306 LaunchPad】 5用ccs theia 环境点灯
【MSPM0L1306 LaunchPad】 6 温度传感器实验
MSPM0L1306 LaunchPad】 7 UART基本实验(1)之后
1,文件==》Create New Project开始
选择板子为MSPM0L1306 LaunchPad,误操作系统,编译器选ccs -Ti Arm clang 选择一个DriverLib库 empty_msp0l1306 Empty start-up project using DriverLib. 并保存
2,SysConfig配置led GPIO,并保存。
3,系统会在ti_msp_dl_config.h ti_msp_dl_config.c中生成GPIO的初始化代码。
4,主程序中只需调用SYS_CFG_DL_init()和控制gpio的函数
5,SysConfig配置tim如下并保存。
6,系统会在ti_msp_dl_config.h ti_msp_dl_config.c中生成Tim初始化中断的的初始化代码。
7,在主程序中调用即可。程序代码如下
生成的代码ti_msp_dl_config.h
#ifndef ti_msp_dl_config_h
#define ti_msp_dl_config_h
#define CONFIG_MSPM0L130X
#if defined(__ti_version__) || defined(__TI_COMPILER_VERSION__)
#define SYSCONFIG_WEAK __attribute__((weak))
#elif defined(__IAR_SYSTEMS_ICC__)
#define SYSCONFIG_WEAK __weak
#elif defined(__GNUC__)
#define SYSCONFIG_WEAK __attribute__((weak))
#endif
#include <ti/devices/msp/msp.h>
#include <ti/driverlib/driverlib.h>
#include <ti/driverlib/m0p/dl_core.h>
#ifdef __cplusplus
extern "C" {
#endif
/*
* ======== SYSCFG_DL_init ========
* Perform all required MSP DL initialization
*
* This function should be called once at a point before any use of
* MSP DL.
*/
/* clang-format off */
#define POWER_STARTUP_DELAY (16)
#define CPUCLK_FREQ 32000000
/* Defines for TIMER_0 */
#define TIMER_0_INST (TIMG0)
#define TIMER_0_INST_IRQHandler TIMG0_IRQHandler
#define TIMER_0_INST_INT_IRQN (TIMG0_INT_IRQn)
#define TIMER_0_INST_LOAD_VALUE (1023U)
/* Port definition for Pin Group GPIO_GRP_0 */
#define GPIO_GRP_0_PORT (GPIOA)
/* Defines for PIN_0: GPIOA.0 with pinCMx 1 on package pin 1 */
#define GPIO_GRP_0_PIN_0_PIN (DL_GPIO_PIN_0)
#define GPIO_GRP_0_PIN_0_IOMUX (IOMUX_PINCM1)
/* clang-format on */
void SYSCFG_DL_init(void);
void SYSCFG_DL_initPower(void);
void SYSCFG_DL_GPIO_init(void);
void SYSCFG_DL_SYSCTL_init(void);
void SYSCFG_DL_TIMER_0_init(void);
#ifdef __cplusplus
}
#endif
#endif /* ti_msp_dl_config_h */
生成的代码ti_msp_dl_config.c
#include "ti_msp_dl_config.h"
/*
* ======== SYSCFG_DL_init ========
* Perform any initialization needed before using any board APIs
*/
SYSCONFIG_WEAK void SYSCFG_DL_init(void)
{
SYSCFG_DL_initPower();
SYSCFG_DL_GPIO_init();
/* Module-Specific Initializations*/
SYSCFG_DL_SYSCTL_init();
SYSCFG_DL_TIMER_0_init();
}
SYSCONFIG_WEAK void SYSCFG_DL_initPower(void)
{
DL_GPIO_reset(GPIOA);
DL_TimerG_reset(TIMER_0_INST);
DL_GPIO_enablePower(GPIOA);
DL_TimerG_enablePower(TIMER_0_INST);
delay_cycles(POWER_STARTUP_DELAY);
}
SYSCONFIG_WEAK void SYSCFG_DL_GPIO_init(void)
{
DL_GPIO_initDigitalOutput(GPIO_GRP_0_PIN_0_IOMUX);
DL_GPIO_clearPins(GPIO_GRP_0_PORT, GPIO_GRP_0_PIN_0_PIN);
DL_GPIO_enableOutput(GPIO_GRP_0_PORT, GPIO_GRP_0_PIN_0_PIN);
}
SYSCONFIG_WEAK void SYSCFG_DL_SYSCTL_init(void)
{
DL_SYSCTL_setSYSOSCFreq(DL_SYSCTL_SYSOSC_FREQ_BASE);
DL_SYSCTL_setMCLKDivider(DL_SYSCTL_MCLK_DIVIDER_DISABLE);
//Low Power Mode is configured to be SLEEP0
DL_SYSCTL_setBORThreshold(DL_SYSCTL_BOR_THRESHOLD_LEVEL_0);
}
/*
* Timer clock configuration to be sourced by LFCLK / (4096 Hz)
* timerClkFreq = (timerClkSrc / (timerClkDivRatio * (timerClkPrescale + 1)))
* 1024 Hz = 4096 Hz / (8 * (3 + 1))
*/
static const DL_TimerG_ClockConfig gTIMER_0ClockConfig = {
.clockSel = DL_TIMER_CLOCK_LFCLK,
.divideRatio = DL_TIMER_CLOCK_DIVIDE_8,
.prescale = 3U,
};
/*
* Timer load value (where the counter starts from) is calculated as (timerPeriod * timerClockFreq) - 1
* TIMER_0_INST_LOAD_VALUE = (1 * 1024 Hz) - 1
*/
static const DL_TimerG_TimerConfig gTIMER_0TimerConfig = {
.period = TIMER_0_INST_LOAD_VALUE,
.timerMode = DL_TIMER_TIMER_MODE_PERIODIC,
.startTimer = DL_TIMER_START,
};
SYSCONFIG_WEAK void SYSCFG_DL_TIMER_0_init(void) {
DL_TimerG_setClockConfig(TIMER_0_INST,
(DL_TimerG_ClockConfig *) &gTIMER_0ClockConfig);
DL_TimerG_initTimerMode(TIMER_0_INST,
(DL_TimerG_TimerConfig *) &gTIMER_0TimerConfig);
DL_TimerG_enableInterrupt(TIMER_0_INST , DL_TIMERG_INTERRUPT_ZERO_EVENT);
DL_TimerG_enableClock(TIMER_0_INST);
}
主程序代码empty.c
#include "ti_msp_dl_config.h"
int main(void)
{
SYSCFG_DL_init();
NVIC_EnableIRQ(TIMER_0_INST_INT_IRQN);
DL_TimerG_startCounter(TIMER_0_INST);
while (1) {
delay_cycles(10000000);
}
}
#define TIMER_100_MILLISECONDS_TICKS (99)
static uint32_t count = TIMER_100_MILLISECONDS_TICKS;
uint8_t inc_dec_flag=1;
void TIMER_0_INST_IRQHandler(void)
{
if(count >2000) inc_dec_flag=0;
if(count <100) inc_dec_flag=1;
if(inc_dec_flag ==0){
count -=TIMER_100_MILLISECONDS_TICKS;
}
else {
count +=TIMER_100_MILLISECONDS_TICKS;
}
switch (DL_TimerG_getPendingInterrupt(TIMER_0_INST)) {
case DL_TIMER_IIDX_ZERO:
DL_TimerG_stopCounter(TIMER_0_INST);
DL_Timer_setLoadValue(TIMER_0_INST, count);
DL_TimerG_startCounter(TIMER_0_INST);
DL_GPIO_togglePins(GPIO_GRP_0_PORT, GPIO_GRP_0_PIN_0_PIN);
break;
default:
break;
}
}
8,编译,运行。观察红色灯 的由快到慢再由慢到快的变化。
80
实验就这样。
谢谢