DSP_TMS320F28335_PIE学习笔记

前言

本文重点探讨DSP PIE模块的学习笔记,由于学这部内容的时候,是用28335学的,所以标题是用的28335,但其实28377D和28335的PIE使用基本上是一样的,也是可以借鉴的。

正文

原理

讲点原理,PIE,peripheral interrupt expansion,外设中断扩展模块

TMS320F28335内部有16个中断线,其中包括2个不可屏蔽中断(RESET和NMI)与14个可屏蔽中断,可屏蔽中断通过相应的中断使能寄存器可以使能或者禁止产生的中断

外部中断源→DSP芯片IO引脚上的电平变化触发中断

内部中断源→DSP内部CPU和各个外设模块产生的中断比如ADC、PWM、SCI、SPI等等模块产生的中断

DSP比作人,外部中断就是相当于手被割伤的疼痛,内部中断就是相当于肚子痛

在2833x处理器中,定时器1和定时器2预留给实时操作系统使用,其中断分配给INT13和INT14,两个不可屏蔽的中断RESET和NMI各自占用独立的专用专断,同时NMI中断也可以选择同定时器1复用INT13,其余12个可屏蔽中断直接连接在外设中断扩展模块 (也就是PIE模块),供外部中断和处理器内部外设单元使用。

问题:28335内部有那么多的外设(PWM、SCI、ADC等等),这些外设又有自己的中断,并且中断还很多个,那么剩余12个中断怎么能够够用呢?

为了解决这个问题,就引入了PIE模块,可以管理多路中断,最后分配到12个核中断上面

看懂这个图,基本上就能把PIE的原理明白的差不多了。

(IFR是interrupt flag register,IER是interrupt enable register,28335参考手册的pg139) 

我们可以把这个图的上下分成两级(LEVEL), 上面的CPU LEVEL总公司,下面是PIE LEVEL分公司。

 首先来看这个INTx.1 ~ INTx.8, 这个x它可以是1~12。 比如我是INT2.2或者INT2.3。 我的中断信号最终就会送到INT2这里来。

 下面举例 中断INT2.2如何才能传递到CPU,看懂这个例子,PIE的原理你的学会了。

INT2.2产生之后,PIEIFR2.2(PIE interrupt flag register PIE中断标志寄存器)这里的开关会直接闭合

然后,中断信号会传递到PIEIER2.2(PIEIER是PIE interrupt enable register,PIE中断使能寄存器),如果想让INT2.2信号继续传递,那这里需要配置 PieCtrlRegs.PIEIER2.bit.INTx2   = 1;那这个时候,第二个开关闭合。

接下来信号会传递到左下角的与门这里,与门上支路是直接导通的,如果想让INT2.2信号继续传递,下面PIEACK2需要为0才行,因为前面还有一个取反。PIEACK2默认应该是0(换句话说就是第一次中断能够直接从与门这里过去),但是每次执行了中断之后,对应的PIEACK就会被置1,如果想要INT2.2每次都能把信号传递到CPU,那么在中断处理函数,就需要把PIEACK2清零。即

interrupt void INT2.2_ISR(void){

    // do something

    PieCtrlRegs.PIEACK.all = PIEACK_GROUP2;

}

如果保持PIEACK2为零,信号就会通过与门

 此时INT2.2信号已经从PIE LEVEL传递到了CPU LEVEL了, 信号会传到IFR2(interrupt flag register 中断标志寄存器)这里。这个开关也会直接闭合。

然后中断信号会进一步传递到IER2这里(interrupt enable register,中断使能寄存器),如果想让INT2.2信号继续传递,那这里需要配置 IER |= M_INT2;这时候, CPU LEVEL的第二个开关闭合。 

当INT2.2的信号通过了IER2的开关之后,最后就来到了 Global Enable开关这里了。我们最后只需要把中断的全局使能开关打开:

EINT;  // 使能全局中断  

所有的开关都闭合了。最终就能使得INT2.2的信号传递到CPU里面。

 

当然,另外值得一提的是PIE模块整体有个使能,也得打开,PIE模块如果都不工作,INT2.2肯定到不了CPU这里。

PieCtrlRegs.PIECTRL.bit.ENPIE = 1;

那么我们怎么知道我这个外设的中断对应的是INT几点几呢? 28335请看参考手册的pg149。

28377D请看参考手册的pg102。

 代码

下面我与28377D的INT1.1为例,写一个PIE中断配置的参考代码,关于ADCa的其他配置部分,请到我讲ADC的博客去看哈。

void main(void)
{
	InitSysCtrl();
    DINT;    // 先关闭全局中断使能,等配置完了所有的外设,再打开全局中断使能
    InitPieCtrl();
    InitGpio();
    IER     = 0x0000;
    IFR     = 0x0000;
    InitPieVectTable();
    // 👆前面这些默认初始化函数也很关键哈

    // ADC
    EALLOW;     // 设置中断入口函数
        PieVectTable.ADCA1_INT = &ADCaHandler;
    EDIS;

    PieCtrlRegs.PIEIER1.bit.INTx1   = 1;    //  Enable PIE Level interrupt

    IER |= M_INT1;                          //  Enable CPU Level interrupt

    PieCtrlRegs.PIECTRL.bit.ENPIE = 1; 	    // PIE模块使能
    EINT;  									// 全局中断使能
    while(1){;}
}

interrupt void ADCaHandler(void){
    // do something
    PieCtrlRegs.PIEACK.all  = PIEACK_GROUP1;
}

 

 愿我们共同进步! 感谢您的阅读,欢迎留言讨论、收藏、点赞、分享。

### DSP28335 EPWM模块学习资源 DSP28335 是一款基于 C2000 系列的高性能数字信号处理器 (DSP),广泛应用于电机控制、电源转换和其他实时控制系统中。其内置的增强型脉宽调制器(EPWM)是一个功能强大的外设,能够实现精确的时间和电压控制。 以下是关于如何入门并深入研究 DSP28335 的 EPWM 功能的一些推荐资料和方法: #### 1. 官方文档 TI 提供了详尽的技术手册和应用指南,这些文档对于理解硬件架构及其配置至关重要。 - **TMS320C28x CPU and Instruction Set Reference Guide**: 这份文档涵盖了 TMS320C28x 处理器系列的核心指令集以及寄存器结构[^2]。 - **TMS320F28335 Technical Reference Manual (TRM)**: TRM 中包含了有关 EPWM 模块的具体描述,包括定时器的工作原理、比较单元的功能以及其他相关特性[^3]。 #### 2. 应用手册与设计实例 为了更好地掌握实际操作技巧,可以从 TI 发布的应用笔记入手: - **SPRAAE7 - Using the ePWM Module on C2000 Microcontrollers**: 此应用报告提供了详细的指导说明,帮助开发者设置和优化 EPWM 输出以满足特定需求[^4]。 #### 3. 开发工具支持 利用官方开发环境 Code Composer Studio 可简化编程流程,并提供调试便利性。 - 下载安装 CCS 后可访问众多示例项目,其中包括针对 F28335 平台编写的 EPWM 驱动程序源码[^5]。 #### 示例代码片段展示基础初始化过程 下面给出一段简单的 C 语言代码用来演示基本的 EPWM 初始化逻辑: ```c // 设置周期计数值 EALLOW; PieCtrlRegs.PIECTRL.bit.ENPIE = 1; // Enable PIE block SysCtlRegs.PLLCR.bit.DIVSEL = 1; // Set SYSCLKOUT to LSPCLK ratio of /2 Epwm1Regs.TBPRD = 19999; // Period register value for a frequency of ~5kHz @SYSCLKOUT=150MHz EDIS; // 配置相位偏移量 EALLOW; Epwm1Regs.CMPA.half.CMPA = 10000; // Compare A value determines duty cycle (%) Epwm1Regs.AQCTLA.all = 0x0C; // Action-Qualifier settings: Force PWM high when counter equals CMPA EDIS; ``` 上述脚本展示了如何定义时间基准及时钟分频因子,同时还指定了占空比参数并通过动作限定机制决定输出状态变化时刻[^6]。 #### 推荐在线课程平台 除了纸质材料之外,在线教育网站也开设了不少专门讲解嵌入式系统的视频讲座或者互动练习环节,比如 Coursera 和 Udemy 上都有涉及现代微控制器使用的付费/免费课件可供选择。 ---
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江湖上都叫我秋博

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值