This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

关于IO口的中断程序



我想写一个中断程序,用A2口的下降沿进入中断,但写出来貌似进不了中断。

这个片子资料太少了,又都是英文。只好冒昧前来问众位了。

以下是程序:

#include <stdint.h>
#include <stdbool.h>
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/interrupt.h"
#include "driverlib/timer.h"
#include "driverlib/sysctl.h"
#include "driverlib/gpio.h"
#include "inc/hw_gpio.h"
#include "inc/hw_ints.h"

#define Delay_ms(x)    SysCtlDelay((long)(SysCtlClockGet( )*(double)x /3000 ))

int main(void)
{

 SysCtlClockSet(SYSCTL_SYSDIV_4|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHZ|SYSCTL_OSC_MAIN);
 SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);

 GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3);
 GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3, 8);


    GPIOPadConfigSet(GPIO_PORTA_BASE,GPIO_PIN_2,GPIO_STRENGTH_2MA,GPIO_PIN_TYPE_STD_WPU);// 设置PA2为2MA,上拉输入
    GPIODirModeSet(GPIO_PORTA_BASE, GPIO_PIN_2, GPIO_DIR_MODE_IN);//设置GPIO输入
    IntMasterEnable();
 GPIOIntEnable(GPIO_PORTA_BASE,GPIO_PIN_2);
 GPIOPinTypeGPIOInput(GPIO_PORTA_BASE, GPIO_PIN_2);
    GPIOIntTypeSet(GPIO_PORTA_BASE, GPIO_PIN_2, GPIO_FALLING_EDGE);

    while(1)
 {
 }
}


void GPIOAIntHandler(void) //
{
 unsigned long ulStatus;
 ulStatus = GPIOIntStatus(GPIO_PORTA_BASE, true); //
 GPIOIntClear(GPIO_PORTA_BASE, ulStatus); //
 GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3, 4);
 if (ulStatus&GPIO_PIN_2) // GPIO_PIN_2
 {
 // GPIOIntDisable(GPIO_PORTD_BASE,GPIO_PIN_2); // ??GPIOD????

  Delay_ms(100);
  GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3, 0);
 }
}


 

  • 中断代码已经加到startup_ccs.c里面

  • hao peng 说:

    我想写一个中断程序,用A2口的下降沿进入中断,但写出来貌似进不了中断。

    这个片子资料太少了,又都是英文。只好冒昧前来问众位了。

    以下是程序:

    #include <stdint.h>
    #include <stdbool.h>
    #include "inc/hw_memmap.h"
    #include "inc/hw_types.h"
    #include "driverlib/interrupt.h"
    #include "driverlib/timer.h"
    #include "driverlib/sysctl.h"
    #include "driverlib/gpio.h"
    #include "inc/hw_gpio.h"
    #include "inc/hw_ints.h"

    #define Delay_ms(x)    SysCtlDelay((long)(SysCtlClockGet( )*(double)x /3000 ))

    int main(void)
    {

     SysCtlClockSet(SYSCTL_SYSDIV_4|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHZ|SYSCTL_OSC_MAIN);
     SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
        SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);

     GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3);
     GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3, 8);


        GPIOPadConfigSet(GPIO_PORTA_BASE,GPIO_PIN_2,GPIO_STRENGTH_2MA,GPIO_PIN_TYPE_STD_WPU);// 设置PA2为2MA,上拉输入
        GPIODirModeSet(GPIO_PORTA_BASE, GPIO_PIN_2, GPIO_DIR_MODE_IN);//设置GPIO输入
        IntMasterEnable();
     GPIOIntEnable(GPIO_PORTA_BASE,GPIO_PIN_2);
     GPIOPinTypeGPIOInput(GPIO_PORTA_BASE, GPIO_PIN_2);
        GPIOIntTypeSet(GPIO_PORTA_BASE, GPIO_PIN_2, GPIO_FALLING_EDGE);

        while(1)
     {
     }
    }


    void GPIOAIntHandler(void) //
    {
     unsigned long ulStatus;
     ulStatus = GPIOIntStatus(GPIO_PORTA_BASE, true); //
     GPIOIntClear(GPIO_PORTA_BASE, ulStatus); //
     GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3, 4);
     if (ulStatus&GPIO_PIN_2) // GPIO_PIN_2
     {
     // GPIOIntDisable(GPIO_PORTD_BASE,GPIO_PIN_2); // ??GPIOD????

      Delay_ms(100);
      GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3, 0);
     }
    }


     

    如果使用PA2来触发中断,此处为何将PA2设置为输出?

    另外,请在配置完IO之后在执行中断的使能操作。

  • 又找了一资料,如你所说,改了之后好了。果然还是基础太差啊。谢谢了