TI中文支持网
TI专业的中文技术问题搜集分享网站

LM4F120H5QR中断

    ROM_SysCtlClockSet(SYSCTL_SYSDIV_2_5 | SYSCTL_USE_PLL | SYSCTL_XTAL_16MHZ |
                       SYSCTL_OSC_MAIN);

    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);

    GPIOPinTypeGPIOOutput(GPIO_PORTE_BASE,GPIO_PIN_0|GPIO_PIN_1);
    GPIOPinTypeGPIOInput(GPIO_PORTE_BASE,GPIO_PIN_2);

    ROM_GPIOIntTypeSet(GPIO_PORTE_BASE,GPIO_PIN_3,GPIO_RISING_EDGE);
    ROM_GPIOPinIntEnable(GPIO_PORTE_BASE,GPIO_PIN_3);
    IntEnable(INT_GPIOE);
    ROM_IntMasterEnable();     

为什么执行到 IntEnable(INT_GPIOE);的时候,就进入FaultISR中断了??

Wellin Zhang:

zheng zhao1

你检查一下,是不是进入的fault中断,并不是进入的你GPIO的ISR

感觉你的配置有问题

你中断使能的是PIN3脚 输入配置的却是PIN2脚

GPIOPinTypeGPIOInput(GPIO_PORTE_BASE,GPIO_PIN_2);改成

GPIOPinTypeGPIOInput(GPIO_PORTE_BASE,GPIO_PIN_3);

Zheng Zhao1:

回复 Wellin Zhang:

貌似不行啊…

而且LM4F里面配置输入和配置中断并没有关系

Wellin Zhang:

回复 Zheng Zhao1:

进入的中断是GPIO的ISR么

Zheng Zhao1:

回复 Wellin Zhang:

进入的是FaultISR()…

// This is the code that gets called when the processor receives a fault// interrupt.  This simply enters an infinite loop, preserving the system state// for examination by a debugger.////*****************************************************************************static voidFaultISR(void){    //    // Enter an infinite loop.    //    while(1)    {    }}

Wellin Zhang:

尝试用这种顺序初始化一下中断呢

 ROM_IntMasterEnable();   

IntEnable(INT_GPIOE);

ROM_GPIOPinIntEnable(GPIO_PORTE_BASE,GPIO_PIN_3);   

Zheng Zhao1:

回复 Wellin Zhang:

不行诶…..还是执行到IntEnable(INT_GPIOE);这句话以后,直接跳进了FAULTISR了…

Wellin Zhang:

我这边测试是可以的 并没有进入faultISR中断

下面是我的测试代码

int main(void){

    SysCtlClockSet(SYSCTL_SYSDIV_2_5 | SYSCTL_USE_PLL | SYSCTL_XTAL_16MHZ |                       SYSCTL_OSC_MAIN);

    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);

    GPIOPinTypeGPIOOutput(GPIO_PORTE_BASE,GPIO_PIN_0|GPIO_PIN_1);    GPIOPinTypeGPIOInput(GPIO_PORTE_BASE,GPIO_PIN_2);

    GPIOIntTypeSet(GPIO_PORTE_BASE,GPIO_PIN_3,GPIO_RISING_EDGE);    GPIOPinIntEnable(GPIO_PORTE_BASE,GPIO_PIN_3);    IntEnable(INT_GPIOE);    IntMasterEnable();

 

 while(1) { }}

你可以单步跟踪一下,看是从哪句跳进faultISR

Zheng Zhao1:

回复 Wellin Zhang:

我把代码全贴出来吧…..这次不进入FAULT了,,,但是还没出发就进入中断了…

Startup文件

    CC_Rx_Interrupt,                      // GPIO Port F

// External declarations for the interrupt handlers used by the application.////*****************************************************************************extern void CC_Rx_Interrupt(void);

void CC_Rx_Interrupt(void){  GPIOPinIntClear(GPIO_PORTF_BASE,GPIO_PIN_3);  while(1);}

main文件

int main(){    ROM_SysCtlClockSet(SYSCTL_SYSDIV_2_5 | SYSCTL_USE_PLL | SYSCTL_XTAL_16MHZ |                       SYSCTL_OSC_MAIN);    ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI0);    ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI3);    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);    GPIOPinConfigure(GPIO_PA2_SSI0CLK);    GPIOPinConfigure(GPIO_PA3_SSI0FSS);    GPIOPinConfigure(GPIO_PA4_SSI0RX);    GPIOPinConfigure(GPIO_PA5_SSI0TX);    GPIOPinConfigure(GPIO_PD0_SSI3CLK);    GPIOPinConfigure(GPIO_PD1_SSI3FSS);    GPIOPinConfigure(GPIO_PD2_SSI3RX);    GPIOPinConfigure(GPIO_PD3_SSI3TX);        GPIOPinTypeSSI(GPIO_PORTA_BASE, GPIO_PIN_5 | GPIO_PIN_4 | GPIO_PIN_3 |                   GPIO_PIN_2);    GPIOPinTypeSSI(GPIO_PORTD_BASE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 |GPIO_PIN_3);    GPIOPinTypeGPIOOutput(GPIO_PORTE_BASE,GPIO_PIN_0|GPIO_PIN_1);    GPIOPinTypeGPIOInput(GPIO_PORTE_BASE,GDO0|GDO01);    GPIOPinTypeGPIOInput(GPIO_PORTF_BASE,GPIO_PIN_4);    SSIConfigSetExpClk(SSI0_BASE, SysCtlClockGet(), SSI_FRF_MOTO_MODE_0,                       SSI_MODE_MASTER, 5000000, 8);    SSIConfigSetExpClk(SSI3_BASE, SysCtlClockGet(), SSI_FRF_MOTO_MODE_0,SSI_MODE_MASTER, 5000000, 8);    SSIEnable(SSI0_BASE);    SSIEnable(SSI3_BASE);    GPIOIntTypeSet(GPIO_PORTF_BASE,GPIO_PIN_4,GPIO_FALLING_EDGE);    GPIOPinIntEnable(GPIO_PORTF_BASE,GPIO_PIN_4);      IntEnable(INT_GPIOF);    IntMasterEnable();  

用的是LAUNCHPAD上的PF4口,就是一个左下角那个按钮做中断…

执行到    IntEnable(INT_GPIOF);的时候,就直接跳进中断处理函数了…

Zheng Zhao1:

回复 Wellin Zhang:

调了一下午了,,,气死了,,,,,,,,,精简到这种程度也不行

#include "inc/hw_memmap.h" #include "inc/hw_types.h" #include "inc/hw_ints.h" #include "inc/hw_sysctl.h" #include "driverlib/sysctl.h" #include "driverlib/debug.h" #include "driverlib/gpio.c" #include "driverlib/pin_map.h" #include "driverlib/rom.h" #include "driverlib/interrupt.h" void gpiof(void)                                         //中断处理 {   GPIOPinIntClear(GPIO_PORTF_BASE,GPIO_PIN_0|GPIO_PIN_4);     GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_1|GPIO_PIN_2,0xff);   //亮   SysCtlDelay(16881720);   GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_1|GPIO_PIN_2,0);   //灭    } int main() {   ROM_SysCtlClockSet(SYSCTL_SYSDIV_2_5 | SYSCTL_USE_PLL | SYSCTL_XTAL_16MHZ |                        SYSCTL_OSC_MAIN);   SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);   GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE,GPIO_PIN_1|GPIO_PIN_2);   GPIOPinTypeGPIOInput(GPIO_PORTF_BASE,GPIO_PIN_0|GPIO_PIN_4);   //貌似以前测试的时候,设不设置成输入不影响中断的检测   IntEnable(INT_GPIOF);   GPIOPinIntEnable(GPIO_PORTF_BASE,GPIO_PIN_0|GPIO_PIN_4);     //两个按钮,上电是高,按下是低.   GPIOIntTypeSet(GPIO_PORTF_BASE,GPIO_PIN_0|GPIO_PIN_4,GPIO_FALLING_EDGE);   IntMasterEnable();      while(1); } startup里面也声明好了: extern void gpiof(void);     gpiof,                      // GPIO Port F

怎么按按钮就是不进中断啊!!!!一直在while(1)里

赞(0)
未经允许不得转载:TI中文支持网 » LM4F120H5QR中断
分享到: 更多 (0)