DSP-定时器原理

DSP-定时器原理

CPU_TIMER

Timer0 最常用于普通裸机定时任务;Timer1、Timer2 不经过 PIE。使用 SYS/BIOS 时,Timer1、Timer2 可能被系统占用

一般只设置定CPUTimer寄存器的TCR寄存器

三个定时器的主要区别

1、Timer0中断配置 区别于1、2

Timer0 的完整路径:

Timer0产生TINT0

↓

TIE = 1

↓

PIEIER1.INTx7 = 1

↓

PIE Group1

↓

IER中的M_INT1 = 1

↓

全局中断EINT

↓

CPU执行Timer0 ISR

Timer0经过PIE外设中断层,则 ISR 退出前要应答 PIE:

Timer0产生中断

↓

PIE Group1被占用并暂时锁定

↓

CPU执行cpu_timer0_isr()

↓

写PIEACK_GROUP1

↓

解除Group1锁定

↓

允许Group1下一次中断

中断设置/中段函数

c 复制代码
EALLOW;
//打开
PieVectTable.TINT0 = &cpu_timer0_isr;
EDIS;
//使能 PIE 第1组的第7个中断通道
PieCtrlRegs.PIEIER1.bit.INTx7 = 1;
//IER:CPU 中断使能寄存器
//M_INT1:中断系统的1号中断
IER |= M_INT1;
EINT;

//Timer0 ISR 退出前要应答 PIE:
interrupt void cpu_timer0_isr(void)
{
    // 定时任务
		/*通知 PIE 控制器:"第1组中断已经处理完成,可以接收该组的下一次中断*/
    PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
}

定时器0初始化

c 复制代码
/* 基础初始化CPU定时器。 */
InitCpuTimers();
/* Timer1每隔0.5秒产生一次中断请求,内部已设置TIE = 1。 */
ConfigCpuTimer(&CpuTimer0, 150.0f, 500000.0f);
/*  StartCpuTimer0()是一个宏,展开CpuTimer0Regs.TCR.bit.TSS = 0; 启动计数 。*/
StartCpuTimer0();

2、Timer1中断配置

c 复制代码
EALLOW;
PieVectTable.XINT13 = &cpu_timer1_isr;
EDIS;

IER |= M_INT13;
EINT;

定时器1初始化

c 复制代码
/* 基础初始化CPU定时器。 */
InitCpuTimers();
/* Timer1每隔0.5秒产生一次中断请求,内部已设置TIE = 1。 */
ConfigCpuTimer(&CpuTimer1, 150.0f, 500000.0f);
/*  StartCpuTimer0()是一个宏,展开CpuTimer0Regs.TCR.bit.TSS = 0; 启动计数 。*/
StartCpuTimer1();

3、Timer2中断配置

c 复制代码
EALLOW;
PieVectTable.TINT2 = &cpu_timer2_isr;
EDIS;

IER |= M_INT14;
EINT;
相关推荐
普通人65 小时前
WebGL与WebGPU入门指南
开发语言·webgl·1024程序员节
猫猫不是喵喵.1 天前
从0到1创建一个微服务项目
java·数据库·微服务·1024程序员节
fish_zzzz4 天前
笔记-论数据结构2
1024程序员节
普通人65 天前
PHP文件读写完全指南
开发语言·php·1024程序员节
Martina_03215 天前
AI生成3D场景从白模换成精模后镜头全偏了?用6步检查单位、枢轴与层级替换
图像处理·人工智能·3d·ai·自然语言处理·材质·1024程序员节
星云_byto6 天前
CSS布局
人工智能·机器学习·目标跟踪·1024程序员节
张小姐的猫9 天前
【MySQL】访问 & 数据流动原理
android·数据库·mysql·adb·1024程序员节
工业HMI实战笔记10 天前
印刷电路板HMI:SMT贴装的元件定位界面
制造·设计规范·设计语言·1024程序员节
Martina_032110 天前
AI生成3D模型一合并网格,材质就串色?用6步检查材质槽、UV与图集重映射
图像处理·人工智能·3d·材质·uv·游戏策划·1024程序员节
橙光成长10 天前
android-ad-cleaner:android免 Root 批量关闭系统开屏与营销推送
android·1024程序员节