1)、使能通用输入输出端口外设(GPIO)。
2)、配置相应GPIO口为普通输入输出口(I/O复用中选择复用功能)。
3)、配置相应GPIO口为输入。
4)、使能GPIO BANK中断。
5)、设置管脚中断触发类型。
6)、映射中断并注册中断服务函数。
GPIOIntTypeSet(SOC_GPIO_0_REGS, 7, GPIO_INT_TYPE_FALLEDGE); // 配置 USER0 KEY GPIO0[6] 为下降沿触发
GPIO_INT_TYPE_BOTHEDGE); // 配置USER1 KEY GPIO6[1] 为上升沿及下降沿触发
// 使能 GPIO BANK 中断
GPIOBankIntEnable(SOC_GPIO_0_REGS, 0); // USER0 KEY GPIO0
GPIOBankIntEnable(SOC_GPIO_0_REGS, 6); // USER1 KEY GPIO6
// 注册中断服务函数
IntRegister(C674X_MASK_INT4, USER0KEYIsr);
IntRegister(C674X_MASK_INT5, USER1KEYIsr);
// 映射中断到 DSP 可屏蔽中断
IntEventMap(C674X_MASK_INT4, SYS_INT_GPIO_B0INT);
IntEventMap(C674X_MASK_INT5, SYS_INT_GPIO_B6INT); // SYS_INT_GPIO_B6INT中断事件(如下:)
// 使能 DSP 可屏蔽中断
IntEnable(C674X_MASK_INT4);
IntEnable(C674X_MASK_INT5);
7)、使能DSP中断。
IntDSPINTCInit(); // 初始化 DSP 中断控制器
IntGlobalEnable(); // 使能 DSP 全局中断
中断服务函数:
GPIOBankIntDisable(SOC_GPIO_0_REGS, 0); // 禁用 GPIO BANK 0 中断
IntEventClear(SYS_INT_GPIO_B0INT); // 清除 GPIO BANK 0 中断状态
……………… ; //执行短小的中断函数。
GPIOBankIntEnable(SOC_GPIO_0_REGS, 0); // 使能 GPIO BANK 0 中断
中断类型:
1)、复位中断(RESET)优先级最高
2)、不可屏蔽中断/异常:所有软件中断和两个外部中断RS、NMI。
3)、12个可屏蔽硬件中断(INT4-INT15) 12个事件中断源。
4)、可屏蔽硬件异常(EXCAP)。
事件:0-127个独立事件和组合事件(Event Combiner)
0~127个独立中断事件定义在interrupt.h头文件中: TimerInterrupts、Syscfg Interrupts、PRU Interrupts、EHRPWM Interrupts、EDMA Interrupts、EMU Interrupts、IDMA Interrupts、MMCSD Interrupts、USB Interrupts、SATA Interrupts、EMAC Interrupts、HPI Interrupts、I2C Interrupts、SPI Interrupts、UART Interrupts、GPIO Interrupts、ECAP Interrupts、EMIF Interrupts、DDR Interrupts、MCASP Interrupts、RTC Interrupts、PSC Interrupts、LCD Interrupts、MCBSP Interrupts、UPP Interrupts、VPIF Interrupts、INTC Interrupts、EMC Interrupts、PMC Interrupts、UMC Interrupts、PDC Interrupts、SYS Interrupts、DMC Interrupts、
组合事件Event Combiners:
中断事件选择
中断错误事件
中断向量表(功能:在相应中断发生后,跳转到相应的地址,执行相应的指令。)
1、 ISFP(interrupt service fetchpacket)中断服务取指包
2、 最多8条32位指令/14条紧凑指令(Compact Instance)
3、 中断向量表可以储存在DSP存储器的任何存储空间,只要满足入口地址对齐到1K字节即可。
|