本人小白,现在调试一块板子,6678为核心处理器。在gpio部分有些问题,我设想的是外部给gpio一个高电平来作为触发信号触发中断,但是在程序里的时候发现即使外部没给触发信号也能进中断,这是为什么呢?是我哪里出问题了呢?谢谢各位大神了,程序如下:
#include "GPIO.h"
//#include "GPIO_Interrupt.h"
#include <stdio.h>
#include <string.h>
#include <stdint.h>
#include "GPIO.h"
#include <c6x.h> //
#include <cslr_chip.h>
#include <ti/csl/csl_cpintc.h>
#include "KeyStone_common.h"
unsigned int a;
//定义GPIO7引脚的中断初始化函数
void GPIO_7_int_init(void){
gpioSetDirection(7 ,GPIO_IN);
gpioEnableGlobalInterrupt();
gpioSetRisingEdgeInterrupt(7);
printf("使能GPIO7\n");
}
void GPIO_Interrupt_Init(void)
{
/***中断源选择***/
gpCGEM_regs->INTMUX1 = CSL_GEM_GPINT14 <<CSL_CGEM_INTMUX1_INTSEL7_SHIFT;
gpCGEM_regs->INTMUX2 = 0;
//map INTC event 58 to INT7//
gpCGEM_regs->INTMUX3 = 0;
/***Clear all DSP core events,一共是4个寄存器控制这么多,清除中断事件标志位***/
gpCGEM_regs->EVTCLR[0]= 0xFFFFFFFF;
gpCGEM_regs->EVTCLR[1]= 0xFFFFFFFF;
gpCGEM_regs->EVTCLR[2]= 0xFFFFFFFF;
gpCGEM_regs->EVTCLR[3]= 0xFFFFFFFF;
ICR= IFR; //清除中断标志
ISTP= 0x800000; //中断向量表指针从LL2存储器开始
IER = IER|(1<<CSL_CHIP_IER_NMI_SHIFT);
}
interrupt void GPIO_Interrupt_ISR(void)
{
printf("GPIO_Interrupt_ISR is invoked!\n");
a++;
}
void main(void)
{ unsigned char value;
a=0;
gpioInit();
GPIO_7_int_init();
gpioSetDirection(14 ,GPIO_IN);
gpioSetRisingEdgeInterrupt(14);
GPIO_Interrupt_Init();
gpioSetDirection(14,GPIO_OUT);
gpioSetOutput(14);
while(1)
{
if(a)
{
a=0;
value = gpioReadInput(14);
printf("14脚输入的值是%d\n",value);
}
}
}
Shine:
是每次都能进中断吗?还是进了一次以后不再进了?监测一下GPIO7管脚上的电平,看是否有什么干扰信号引起的误误触发?