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

在ccs下编译lm4f120h5qr时不能正确进入中断服务函数。

在ccs下编译lm4f120h5qr时不能正确进入中断服务函数,想要用PF0中断,初始化如下

void
KEY_Init(void)
{
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
    GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_0);               GPIOIntTypeSet(GPIO_PORTF_BASE, GPIO_PIN_0, GPIO_RISING_EDGE);        GPIOPinIntEnable(GPIO_PORTF_BASE, GPIO_PIN_0);                      IntEnable(INT_GPIOF);                                              IntMasterEnable();
}

编写的中断服务函数如下:

void
IntGPIOf(void)
{
    unsigned long status;
    status = GPIOPinIntStatus(GPIO_PORTF_BASE, true);
    GPIOPinIntClear(GPIO_PORTF_BASE, status);
    if(status & GPIO_PIN_0)
    {

     if(RED_luminance<=6000)
      {
         RED_luminance=RED_luminance+500;
         RGB_Set(R,RED_luminance);
      }
     else
     {
         RED_luminance=0;
         RGB_Set(R,RED_luminance);
     }

    }
}

是中断服务函数的名称有问题吗?应该怎么命名?非常感谢专家能够帮助解答!

repo:

回复 step by step:

非常感谢,已经把output改成了input,关于nmi问题还得感谢。

maoxin xu:

回复 step by step:

在startup_CCS.C中我的修改如下:

////*****************************************************************************void ResetISR(void);static void NmiSR(void);static void FaultISR(void);static void IntDefaultHandler(void);

void GPIO_PORT_F_ISR(void);//

。。。。。。。

IntDefaultHandler, // FLASH Control GPIO_PORT_F_ISR, // GPIO Port F

IntDefaultHandler, // GPIO Port G

但是还是进不了中断函数

void GPIO_PORT_F_ISR(void)

整个代码如下:

#include "inc/hw_ints.h"#include "inc/hw_memmap.h"#include "inc/hw_types.h"

#include "driverlib/sysctl.h"#include "driverlib/interrupt.h"#include "driverlib/gpio.h"

void enable_led_port(){ SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF); GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE,GPIO_PIN_1);}

void enable_key_port(){

SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF); GPIOPadConfigSet(GPIO_PORTF_BASE,GPIO_PIN_4,GPIO_STRENGTH_2MA,GPIO_PIN_TYPE_STD_WPU); //GPIOPinTypeGPIOInput(GPIO_PORTF_BASE,GPIO_PIN_4); GPIODirModeSet(GPIO_PORTF_BASE,GPIO_PIN_4,GPIO_DIR_MODE_IN);}

/*void register_key_isr(){ // IntRegister(INT_GPIOF,GPIO_PORT_F_ISR); //GPIOPortIntRegister(GPIO_PORTF_BASE,GPIO_PORT_F_ISR);}*/

void enable_key_interrupt(){ GPIOIntTypeSet(GPIO_PORTF_BASE,GPIO_PIN_4,GPIO_FALLING_EDGE);

GPIOPinIntEnable(GPIO_PORTF_BASE,GPIO_PIN_4); IntEnable(INT_GPIOF); IntMasterEnable(); }

void main(){ //// 40 MHz system clock SysCtlClockSet(SYSCTL_SYSDIV_5|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHZ|SYSCTL_OSC_MAIN);

enable_led_port(); enable_key_port(); //register_key_isr(); enable_key_interrupt();

while(1);}

void GPIO_PORT_F_ISR(void){

unsigned char ucVal; unsigned long ulStatus; ulStatus = GPIOPinIntStatus(GPIO_PORTB_BASE, true); // 读取中断状态 GPIOPinIntClear(GPIO_PORTB_BASE, ulStatus); // 清除中断状态,重要 if (ulStatus & GPIO_PIN_4) // 如果KEY的中断状态有效 { ucVal = GPIOPinRead(GPIO_PORTF_BASE,GPIO_PIN_1); // 翻转LED GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1, ~ucVal); SysCtlDelay(100000); // 延时约10ms,消除按键抖动 while (GPIOPinRead(GPIO_PORTF_BASE, GPIO_PIN_4) == 0x00); // 等待KEY抬起 SysCtlDelay(100000); // 延时约10ms,消除松键抖动 }

}

step by step:

回复 maoxin xu:

楼主可以参考一下下面的代码:

ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF); 

ROM_GPIOPinTypeGPIOInput(GPIO_PORTF_BASE, GPIO_PIN_4); ROM_GPIOPinIntEnable(GPIO_PORTF_BASE, GPIO_PIN_4); ROM_GPIOIntTypeSet(GPIO_PORTF_BASE, GPIO_PIN_4, GPIO_FALLING_EDGE); ROM_IntEnable(INT_GPIOF);

 ROM_IntMasterEnable();

赞(0)
未经允许不得转载:TI中文支持网 » 在ccs下编译lm4f120h5qr时不能正确进入中断服务函数。
分享到: 更多 (0)