CPU Timer2的使用
一.复制上次的工程模板(注意修改.project文件中的name)
不修改的话CCS导入时重名可能无法导入
二.配置 Sysconfig
配置完以后再次检查board.h文件 看是否设置成功;
如上图所示的话就表示成功。
三.在App下inc文件中创建sys.h 在src下创建sys.c
将以下代码复制到sys.c中
/*
* sys.c
*
* Created on: 2025年4月1日
* Author: 老亚索
*/
#include "sys.h"
void configCPUTimer(uint32_t cpuTimer, float freq, float period)//选cpu-timer号,系统时钟,周期
{
uint32_t temp;
//
// Initialize timer period:
//
temp = (uint32_t)((freq / 1000000) * period); //freq输入的是真实时钟的值,单位是Hz 例如1MHz freq就输入1000000,
CPUTimer_setPeriod(cpuTimer, temp - 1); //除完1000000就=1了,period单位就从秒变为微秒了us
//
// Set pre-scale counter to divide by 1 (SYSCLKOUT):
//
CPUTimer_setPreScaler(cpuTimer, 0);//设置分频
//
// Initializes timer control register. The timer is stopped, reloaded,
// free run disabled, and interrupt enabled.
// Additionally, the free and soft bits are set
//
CPUTimer_stopTimer(cpuTimer);
CPUTimer_reloadTimerCounter(cpuTimer);
CPUTimer_setEmulationMode(cpuTimer,
CPUTIMER_EMULATIONMODE_STOPAFTERNEXTDECREMENT);
CPUTimer_enableInterrupt(cpuTimer);
CPUTimer_startTimer(cpuTimer);
}
记得在sys.h头文件中声明改函数
/*
* sys.h
*
* Created on: 2025年4月1日
* Author: 老亚索
*/
#ifndef APP_INC_SYS_H_
#define APP_INC_SYS_H_
#include "device.h"
#include "driverlib.h"
void configCPUTimer(uint32_t cpuTimer, float freq, float period); //声明main.c中所调用的函数
#endif /* APP_INC_SYS_H_ */
四.创建interruptISR.c(中断服务函数)
/*
* interruptISR.c
*
* Created on: 2025年4月1日
* Author: 老亚索
*/
#include "device.h"
#include "driverlib.h"
#include "board.h"
int i = 0 ;
__interrupt void INT_myCPUTIMER2_ISR(void) //中断服务函数 注意函数名要与board.h中声明的一样
{
GPIO_writePin(LED4, i);
GPIO_writePin(LED5, 1-i);
i = 1 - i;
}
特别注意中断服务函数名要与board.h中声明的一样。
五.烧录测试
看是否能通过main.c文件中函数configCPUTimer(myCPUTIMER2_BASE, DEVICE_SYSCLK_FREQ, 2000000);的第三个参数来控制时间
main.c文件如下
/*
* main.c
*
* Created on: 2025年4月1日
* Author: 13090
*/
#include "device.h"
#include "driverlib.h"
#include "board.h"
#include "sys.h"
int main(void)
{
Device_init(); //初始化设备时钟和外设
Device_initGPIO(); //禁用pin锁并启用内部上拉。
Interrupt_initModule(); //初始化PIE并清除PIE寄存器。禁用CPU中断。
Interrupt_initVectorTable(); //中断向量表初始化
Board_init(); //PinMux和外设初始化
//C2000Ware_libraries_init();//C2000Ware库初始化
//第一个参数CPU-Timer号,第二个参数是时钟主频150MHz(可以在选中按F3去.h里看),第三个参数是周期(多少us一个周期)
configCPUTimer(myCPUTIMER2_BASE, DEVICE_SYSCLK_FREQ, 1000000);
//
// Enable Global Interrupt (INTM) and real time interrupt (DBGM)
//
EINT;
ERTM;
while(1)
{
}
}
2000000us=2秒 观察led4与led5闪烁间隔
1000000us=1秒 观察led4与led5闪烁间隔