DSP相关笔记_4:LaunchXL-F28379D的简单教程系列(三)X-Bar与GPIO中断-下

DSP相关笔记_4:LaunchXL-F28379D的简单教程系列(三)X-Bar与GPIO中断-下


注:
1)这是本人关于Ti的C2000系列的学习笔记,所用工具有官方的开发软件CCS10版本,帮助文库以及函数库软件controlSUITE。硬件部分LaunchXL-F28379D和逻辑分析仪一台。
2) DSP相关笔记_1:LaunchXL-F28379D的简单教程系列(一)GPIO输出
3) DSP相关笔记_2:LaunchXL-F28379D的简单教程系列(二)GPIO输入
4) DSP相关笔记_3:LaunchXL-F28379D的简单教程系列(三)X-Bar与GPIO中断-上

前言:这章会阐述PIE的简单功能实现,需要大家在配好X-BAR和XINT的前提下。

Peripheral Interrupt Expansion (PIE) 它属于系统控制一块,简单解释就是管理各种中断的设备。通过上一张配好的XINT中断与PIE连接,在通过PIE来进行管理,这里只是简单说明PIE的实现步骤。
老规矩上图:

设备中断结构图:
在这里插入图片描述单个中断的图:
在这里插入图片描述从上图可以知道要完成中断需要对INT1-INT14,14组中断组进行选择,并且每一组又有16个通道,选择你所需中断对应的组和通道完成对PIE的配置。
如下图:
在这里插入图片描述如图我们可以知道,如果要完成对XINT1的配置则需要选择,第一组XIN1.y与第四通道INTx.4进行组合即可。当然只完成对PIE配置,还并没有完成对整个中断过程的配置,还需要对IER和INTM寄存器进行中断开启的配置,而IFR需要在初始化的时候复位操作。

其次在完成以上操作的时候,接下来就是完成中断服务函数ISR中的编写(这里直接可以参考代码部分),其中需要注意是清除中断组的PIEACK位,否则中断会出现异常。
官方的原话:
在这里插入图片描述实现内容是:
通过GPIO0(input)接受GPIO2(output),如果产生下降沿触发中断XINT1,XINT1_ISR中控制GPIO1(output)输出方波数量为i。
代码部分:(后面的内容可能就部分寄存器和函数版了,能用官方给的函数,就用可以节约时间点,没有到时候根据手册实现流程自己写也可以。)


#include "F28x_Project.h"
void DelaySoftwore(void);//延时函数
void Gpio_Init(void);//GPIO初始化函数
void GpioInter_Init(void);//GPIO中断初始化函数
interrupt void xint1_isr(void);//中断函数
//extern interrupt void XINT1_ISR(void);引入F2837XD_DefaultSR.c中官方写好的中断函数,自行在里面更改具体功能。


void main(void)
{
    InitSysCtrl();
    Gpio_Init();
    DINT;//关闭中断
    InitPieCtrl();//PIE初始化
    IER = 0x0000;//IER复位
    IFR = 0x0000;//IFR复位
    InitPieVectTable();//中断向量表初始化,要使用
    GpioInter_Init();

;

    for(;;)
    {
        GPIO_WritePin(2,1);
        DelaySoftwore();
        GPIO_WritePin(2,0);
        DelaySoftwore();
    }
}

void Gpio_Init(void)
{
    InitGpio();
    GPIO_SetupPinMux(0,GPIO_MUX_CPU1,0x0);
    GPIO_SetupPinOptions(0, GPIO_INPUT, GPIO_PULLUP);

    GPIO_SetupPinMux(1,GPIO_MUX_CPU1,0x0);
    GPIO_SetupPinOptions(1, GPIO_OUTPUT, GPIO_PUSHPULL);

    GPIO_SetupPinMux(2,GPIO_MUX_CPU1,0x0);
    GPIO_SetupPinOptions(2, GPIO_OUTPUT, GPIO_PUSHPULL);

    GPIO_SetupXINT1Gpio(0);
    
    EALLOW;//控制寄存器写保护
    XintRegs.XINT1CR.bit.POLARITY = 0;//0:下降沿触发,1:上升沿触发
    XintRegs.XINT1CR.bit.ENABLE = 1;//1:启动XINT中断
    EDIS;//控制寄存器关闭写保护
}
void GpioInter_Init(void)
{
    EALLOW;
    PieVectTable.XINT1_INT = &xint1_isr;//更改中断函数,如果这句不下相当于下面这句
    //PieVectTable.XINT1_INT = &XINT1_ISR; 需要增加一个包含了所有中断函数的文件找XINT1_ISR进行修改就行:F2837XD_DefaultSR.c这个文件。
    EDIS;

    PieCtrlRegs.PIEIER1.bit.INTx4 = 1;
    IER |= M_INT1;
    EINT;
}

void DelaySoftwore(void)
{
    Uint16 i = 200;
    while(i>0)
        i--;
}

interrupt void xint1_isr(void)
{
    int i;
    for(i=20;i>0;i--)
    {
        GPIO_WritePin(1,0);
        DelaySoftwore();
        GPIO_WritePin(1,1);
        DelaySoftwore();
        GPIO_WritePin(1,0);
        DelaySoftwore();
    }

    PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;//这个一定要有,并且根据是第几所属第几组更改,F2837XD_DefaultSR.c也有提示。不清楚可以参考这里的组次。
}

结果:就是分析仪上会循环产生20个方波,忘记拍图了。。。。。。尴尬,不过问题不大,都比较简单。

总结:GPIO的中断需要配合X-BAR通过XINT来触发中断,再利用进行PIE对中断的管理,它们的优先级都可以从参考手册查到。后面我们就先把常用的数据传输协议说了,再玩高级的,预计IIC->SPI这样的过程。应该存在很多问题,我这个也只是提供简单的思路吧,有问题留言我会及时更改我的笔记的。

参考资料:(这次参考资料是三本)
[1] TMS320F2837XD Dual-Core Microcontollers Technical Reference Manual
[2] TMS320x281x DSP System Control and Interrupts Reference Guide
[3] TMS320C28x CPU and Instruction Set Reference Guide

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值