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.

关于GPIO口外部中断的设置问题(型号:TM4C123G)

我设置 PE3口为外部中断,当该口接受到一个下降沿的时候产生中断进入中断处理子程序

然后不是要把中断处理程序的函数名,添加到相应的中断向量表中么(在startup_ccs.c中)

我查了向量表

   

 IntDefaultHandler,                      // GPIO Port P1    

IntDefaultHandler,                      // GPIO Port P2   

  IntDefaultHandler,                      // GPIO Port P3   

  IntDefaultHandler,                      // GPIO Port P4    

IntDefaultHandler,                      // GPIO Port P5    

 IntDefaultHandler,                      // GPIO Port P6

 

 

 

    IntDefaultHandler,                      // GPIO Port A    

IntDefaultHandler,                      // GPIO Port B    

 IntDefaultHandler,                      // GPIO Port C    

 IntDefaultHandler,                      // GPIO Port D   

 

 

 

 

向量表中只有   P后面加个字母   和  P后面加个数字。。。。但是我给的中断是PE3口阿,,既有字母也有数字。。。。这该怎么设置向量表么

 

求助!

 

  • PE3出发的也是PORTE的中断,然后进入中断后读取:

    ulIntSta = GPIOIntStatus(GPIO_PORTE_BASE, false);

    判断ulIntSta 的值。如果是PE3,则ulIntSta 会等于GPIO_PIN_3

  • 请问ulIntSta = GPIOIntStatus(GPIO_PORTE_BASE, false);

    如果改成ulIntSta = GPIOIntStatus(GPIO_PORTE_BASE, true); 的话有什么区别呢

    不懂这里的 false 和 true 各代表什么含义。。。。

    我看了datasheet里的描述 如下

    “被设置成True,则返回屏蔽的中断状态;否则,返回原始的中断状态”。。。这是什么意思阿

  • 看一下库函数吧:

    //*****************************************************************************
    //
    //! Gets interrupt status for the specified GPIO port.
    //!
    //! \param ui32Port is the base address of the GPIO port.
    //! \param bMasked specifies whether masked or raw interrupt status is
    //! returned.
    //!
    //! If \e bMasked is set as \b true, then the masked interrupt status is
    //! returned; otherwise, the raw interrupt status is returned.
    //!
    //! \return Returns the current interrupt status for the specified GPIO module.
    //! The value returned is the logical OR of the \b GPIO_INT_* values that are
    //! currently active.
    //
    //*****************************************************************************
    uint32_t
    GPIOIntStatus(uint32_t ui32Port, bool bMasked)
    {
    //
    // Check the arguments.
    //
    ASSERT(_GPIOBaseValid(ui32Port));

    //
    // Return the interrupt status.
    //
    if(bMasked)
    {
    return(HWREG(ui32Port + GPIO_O_MIS));
    }
    else
    {
    return(HWREG(ui32Port + GPIO_O_RIS));
    }
    }

  • 意思就是,其实只要判断中断状态,不要在.s启动文件中注册中断了?

  • s启动文件中要注册中断服务程序的。

    进入后判断中断状态可以判断是哪个GPIO触发的中断。

  • 请问楼主实现监测上升沿并触发中断了吗,我也想实现这个功能但不大会做
  • 他这个意思是单线中断还是组合中断,可以设置GPIOSI寄存器确定。一般设成单线中断。但我遇到的奇葩现象是,采用跟TM4C123相同的GPIO中断设置方法,用到TM4C1294时候完全不能触发中断!使用的是GPIOE PIN2,读取端口电平也都正常,查看了所有的GPIO寄存器和NVIC,PRIMASK,包括优先级设定都没有异常,端口GPIOMIS寄存器已经显示产生了触发并发给中断控制器了,但就是没有执行isr,尝试采用软件触发该端口中断,没有问题,可以响应isr,说明向量表没有问题。百思不得其解,求解中