F28335总共支持7个外部中断XINT1~XINT7、XINT13,还有一个不可屏蔽的外部中断XNMI中断源。每一个外部中断的触发可以设置为上升沿触发或下降沿触发。其中XINT1~XINT2只能对GPIO0~GPIO31配置,XINT3~XINT7只能对GPIO32~GPIO63配置,使用方法是一样的。
HC_SR501红外识别传感器和YH_LDR光敏传感器在外部中断的程序中使用的方式相同。
野火手册中的红外识别图片
野火手册中的光敏传感器图片
#include "hc_sr501.h"
void main()
{
InitSysCtrl();
InitPieCtrl();
IER=0x00;
IFR=0x00;
InitPieVectTable();
EXTI2_Init();
LED_Init();
while(1)
{
}
}
#include "hc_sr501.h"
Uint16 i=0;
void EXTI2_Init(void)
{
EALLOW;
SysCtrlRegs.PCLKCR3.bit.GPIOINENCLK = 1; // GPIO input clock
EDIS;
EALLOW;
//信号输入端口配置
GpioCtrlRegs.GPAMUX1.bit.GPIO13=0;//通用
GpioCtrlRegs.GPADIR.bit.GPIO13=0;//输入
GpioCtrlRegs.GPAPUD.bit.GPIO13=0;
GpioCtrlRegs.GPAQSEL1.bit.GPIO13 = 2; // 外部中断2(XINT2)输入限定6个采样窗口
GpioCtrlRegs.GPACTRL.bit.QUALPRD1 = 0xFF; // 每个采样窗口的周期为510*SYSCLKOUT
EDIS;
EALLOW;
GpioIntRegs.GPIOXINT2SEL.bit.GPIOSEL = 13; // XINT2是GPIO13
EDIS;
EALLOW; // 修改被保护的寄存器,修改前应添加EALLOW语句
PieVectTable.XINT2 = &EXTI2_IRQn;
EDIS; // EDIS的意思是不允许修改被保护的寄存器
PieCtrlRegs.PIEIER1.bit.INTx5 = 1; // 使能PIE组1的INT5
XIntruptRegs.XINT2CR.bit.POLARITY = 1; // 上升沿触发中断
XIntruptRegs.XINT2CR.bit.ENABLE = 1; // 使能XINT2
IER |= M_INT1; // 使能CPU中断1(INT1)
EINT; // 开全局中断
ERTM;
}
interrupt void EXTI2_IRQn(void)
{
i++;
GpioDataRegs.GPCTOGGLE.bit.GPIO68=1;//设置GPIO输出翻转信号
DELAY_US(500000);
PieCtrlRegs.PIEACK.bit.ACK1=1;
}
void LED_Init(void)
{
EALLOW;//关闭写保护
SysCtrlRegs.PCLKCR3.bit.GPIOINENCLK = 1; // 开启GPIO时钟
//LED1端口配置
GpioCtrlRegs.GPCMUX1.bit.GPIO68=0;//设置为通用GPIO功能
GpioCtrlRegs.GPCDIR.bit.GPIO68=1;//设置GPIO方向为输出
GpioCtrlRegs.GPCPUD.bit.GPIO68=0;//使能GPIO上拉电阻
GpioDataRegs.GPCSET.bit.GPIO68=1;//设置GPIO输出高电平
EDIS;//开启写保护
}
#ifndef HC_SR501_H_
#define HC_SR501_H_
#include "DSP2833x_Device.h"
#include "DSP2833x_Examples.h"
void EXTI2_Init(void);
interrupt void EXTI2_IRQn(void);
void LED_Init(void);
#endif /* HC_SR501_H_ */