TMS320F28335(DSP28335),中断

本文介绍了TITMS320F28335DSP中的PeripheralInterruptExpansion(PIE)模块,详细讲解了中断源、中断响应流程、配置步骤,以及如何启用PIE中断、CPU中断和SCIA接收中断。中断处理程序中需要注意清除中断响应标志。
摘要由CSDN通过智能技术生成

上级目录TMS320F28335.CCS12使用教程
想直接看应用的可以直接跳到配置步骤

中断介绍

因为dsp的cpu级别中断线比较少,所以发明了peripheral interrupt expansion (PIE)模块,在DSP28335中,PIE模块将12根cpu级别中断线扩展成了12组中断,每组包含8个中断源。中断源中存储的是中断地址。
cpu级别的中断线有:INT1-INT14, RTOSINT, DLOGINT
多路复用的中断源如下图(图中只有复用的中断线,没在图中的是直接到cpu的中断线)
中断是中断源先到PIE,再到cpu
PIEIFRx.y(x:1-12,y:1-8)
在这里插入图片描述

经典的中断响应流程:

在这里插入图片描述
发生中断后,cpu会从PIE模块中获取中断服务程序的地址(PIE模块根据PIEIFR和PIEIER寄存器的值确定是哪个中断,然后提供给cpu对应中断服务程序的地址),PIEIFRx.y会自动清零,中断对应组的PIEACKx会置位,PIEACKx需要手动清零
遵循的一些主要规则:
在这里插入图片描述
针对规则3
在这里插入图片描述
在这里插入图片描述
中断产生流程:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
DSP28335中固化了优先级,如INT1.1和INT1.8同时发生,则先响应INT1.1,再响应INT1.8,如果INT1.1和INT8.1同时发生,则先响应INT1.1,再响应INT8.1。
关于外设对应的中断线的位置都是硬件已经固定的,所以使用时要参考中断向量表(中断向量表不能随意更改)。

配置:(注意看注释)

step1,:开PIE和cpu中断,第一步都相同

关于PIE和cpu中断开启过程如下:(以SCIA接收中断为例)

//
// EnableInterrupts - This function enables the PIE module and CPU interrupts
//
void EnableInterrupts()
{
    //
    // Enable the PIE
    //
    PieCtrlRegs.PIECTRL.bit.ENPIE = 1;

    //
    // Enables PIE to drive a pulse into the CPU 
    //
    PieCtrlRegs.PIEACK.all = 0xFFFF;//写1清除对应中断组响应标记,只有12个中断线,其余位写1没影响

    //
    // Enable Interrupts at the CPU level 
    //
    EINT;
    // 使用SCIA接收中断举例,SCIA接收中断为INT9.1,即第九组中断的第一个中断
    //(对应中断需要查看技术手册,根据PIE中断向量表确定中断是第几组第几个)
    PieCtrlRegs.PIEIER9.all = 0xFF;//第九组PIE中断使能,只有INT9.1-INT9.8
    IER|=M_INT9;//使能cpu级别中断对应的中断线
}

在这里插入图片描述

开启了PIE中断和cpu中断后,需要使能相应的所需要的外设或者外部中断

step2:开对应外设中断,需要查询对应外设寄存器,看哪些寄存器配置后可以产生中断

void scia_init()
{
    SciaRegs.SCICCR.all =0x0007;   // 1 stop bit,  No loopback
                                   // No parity,8 char bits,
                                   // async mode, idle-line protocol
    SciaRegs.SCICTL1.all =0x0003;  // enable TX, RX, internal SCICLK,
                                   // Disable RX ERR, SLEEP, TXWAKE
    //SciaRegs.SCICTL2.all =0;      //关闭接收发送中断
    SciaRegs.SCICTL2.all =2;        //开启SCIA接收中断

    SciaRegs.SCIHBAUD    =0x0001;  // 9600 baud @LSPCLK = 37.5MHz.
    SciaRegs.SCILBAUD    =0x00E7;

    SciaRegs.SCICTL1.all =0x0023;  // Relinquish SCI from Reset
}

step3:中断服务子程序,注意清除对应中断组的响应标志(PIE中断都有这一步),这个是需要手动清除的。如果对应外设中有需要手动清除的位,注意别忘了清除(不同外设情况不同,SCIA接收中断没有需要清除的位)

中断处理程序:

//
// SCIRXINTA_ISR - INT9.1
//
interrupt void 
SCIRXINTA_ISR(void)     // SCI-A
{
    //
    // Insert ISR Code here
    //
    TestSciRXINT_loopback();//中断服务子程序
    //
    // To receive more interrupts from this PIE group, acknowledge this 
    // interrupt
    //可以直接把对应组赋值给PIEACK.all,例如PieCtrlRegs.PIEACK.all = PIEACK_GROUP9;
    //PIEACK_GROUP9是在DSP2833x_DefaultIsr.c文件中宏定义的
    //PieCtrlRegs.PIEACK.all = PIEACK_GROUP9;//这种方式可以
     PieCtrlRegs.PIEACK.bit.ACK9 = 1;//写入1清除响应标志,也可以直接在对应位写入1,注意,是写1清除响应标志

    //
    // Next two lines for debug only to halt the processor here
    // Remove after inserting ISR Code
    //
//    asm ("      ESTOP0");
//    for(;;);
}

中断现象参考SCI接收中断
结束。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值