TMS320F28335---外部按键中断

本文介绍了如何利用TMS320F28335 DSP实现外部按键中断功能,特别是在矩阵键盘上的应用。通过设置按键中断,实现了LED灯的亮灭控制,并通过按键延时策略增强系统抗干扰性能。
摘要由CSDN通过智能技术生成

外部中断——按键,使LED亮灭。使用矩阵键盘,并用按键延时提高抗干扰能力。

#include "DSP2833x_Project.h"

/**************函数声明**************/
void Gpio_setup(void);
interrupt void xint1_isr(void);
/**************函数声明**************/

// 本例中用到的全局变量;
volatile Uint32 Xint1Count; //发生外部中断1的次数;

/***************主函数**************/
int main(void)
{
    InitSysCtrl();  //初始化系统控制
    Gpio_setup();   //子函数,gpio口设置
    DINT;       //关闭中断
    InitPieCtrl();  //初始化中断控制
    IER = 0x0000;
    IFR = 0x0000;
    InitPieVectTable();//初始化中断矢量表

    EALLOW;             // 修改被保护的寄存器,修改前应添加EALLOW语句
    PieVectTable.XINT1 = &xint1_isr;    //将xint1_isr这一中断子函数指向PieVectTable.XINT1的地址
    EDIS;               // EDIS的意思是不允许修改被保护的寄存器

    Xint1Count = 0;         // 计数外部中断1(XINT1)

    PieCtrlRegs.PIECTRL.bit.ENPIE = 1;      // 使能外设中断扩展PIE模块
    PieCtrlRegs.PIEIER1.bit.INTx4 = 1;      // 使能PIE组1的INT4
    IER |= M_INT1;
    EINT;
    ERTM;

    EALLOW;
       GpioDataRegs.GPBSET.bit.GPIO60 = 1;         // 输出高电平
       GpioCtrlRegs.GPBMUX2.bit.GPIO60 = 0;        // 选择为通用I/O口
       GpioCtrlRegs.GPBDIR.bit.GPIO60 = 1;         // 方向定义为输出
    EDIS;

    EALLOW;
       GpioCtrlRegs.GPAMUX1.bit.GPIO12 = 0;         // 选择为通用I/O口
       GpioCtrlRegs.GPADIR.bit.GPIO12 = 0;          // 方向定义为输入
       GpioCtrlRegs.GPAQSEL1.bit.GPIO12 = 0;        // 外部中断1(XINT1)与系统时钟SYSCLKOUT同步
    EDIS;

    EALLOW;
       GpioIntRegs.GPIOXINT1SEL.bit.GPIOSEL = 0x0C;   // XINT1是GPIO12
    EDIS;

    XIntruptRegs.XINT1CR.bit.POLARITY = 0;      // 下降沿触发中断

    XIntruptRegs.XINT1CR.bit.ENABLE = 1;        // 使能XINT1

    for(;;);

}

void Gpio_setup(void)
{
       EALLOW;
            //以下IO口设置为输出,作为列扫描/
              //初始化行3的GPIO50
              GpioCtrlRegs.GPBPUD.bit.GPIO50 = 0;           // Enable pullup on GPIO50
              GpioDataRegs.GPBCLEAR.bit.GPIO50 = 1;         // Load output latch
              GpioCtrlRegs.GPBMUX2.bit.GPIO50 = 0;          // GPIO50 = GPIO
              GpioCtrlRegs.GPBDIR.bit.GPIO50 = 1;           // GPIO50 = output
       EDIS;
}

interrupt void xint1_isr(void)
{
    DELAY_US(5000);    //键盘消抖动
    while(GpioDataRegs.GPADAT.bit.GPIO12==0);
    GpioDataRegs.GPBTOGGLE.bit.GPIO60 = 1;   // GPIO60-GPIO61输出电平取反
    Xint1Count++;

    // 应答寄存器的位1清0,以响应同组内其他中断;
    PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
}
  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值