我用聂子测试IO的中断时(上升沿中断)不起作用,但是只要我将示波器的探头接上相应IO口后,再用聂子测试此时中断正常。请问这是什么原因造成的啊?
以下是原代码(PA14,15中断)
#include <stdio.h>
#include "NUC122.h"
#include "DrvGPIO.h"
#include "DrvSYS.h"
void SelectClk_12M(void) //External 22MHZ
{
SYSCLK->PWRCON.XTL12M_EN=1;
/* Waiting for 12M Xtal stable */
DrvSYS_Delay(5000); //us级延时函数
DrvSYS_SelectHCLKSource (0); //选择时钟源
}
void GPABCallback(uint32_t GPAStatus, uint32_t GPBStatus)
{
if(GPAStatus & 0x4000)
{
DrvGPIO_ClrBit(E_GPB,4);
DrvSYS_Delayms(200);
}
else if(GPAStatus & 0x8000)
{
DrvGPIO_ClrBit(E_GPB,4);
DrvSYS_Delayms(200);
}
outpw((uint32_t)&GPIOA->DOUT, inpw((uint32_t)&GPIOA->PIN) ^ (1 << 7));
}
void GPCDCallback(uint32_t GPCStatus, uint32_t GPDStatus)
{
outpw((uint32_t)&GPIOA->DOUT, inpw((uint32_t)&GPIOA->PIN) ^ (1 << 7));
}
void Init_GPAInterrupt(void)
{
DrvGPIO_Open(E_GPA, 14, E_IO_INPUT);
DrvGPIO_EnableInt(E_GPA, 14, E_IO_RISING, E_MODE_EDGE);
DrvGPIO_SetIntCallback(GPABCallback, GPCDCallback);
// DrvGPIO_SetDebounceTime(5, E_DBCLKSRC_HCLK); //端口消抖设置
// DrvGPIO_EnableDebounce(E_GPA, 14);
//DrvGPIO_DisableInt(E_GPA, 14);
DrvGPIO_Open(E_GPA, 15, E_IO_INPUT);
DrvGPIO_EnableInt(E_GPA, 15, E_IO_RISING, E_MODE_EDGE);
DrvGPIO_SetIntCallback(GPABCallback, GPCDCallback);
// DrvGPIO_SetDebounceTime(5, E_DBCLKSRC_HCLK); //端口消抖设置
// DrvGPIO_EnableDebounce(E_GPA, 15);
//DrvGPIO_DisableInt(E_GPA, 15);
}
int main(void)
{
UNLOCKREG();
SelectClk_12M();
LOCKREG();
Init_GPAInterrupt();
while(1)
{DrvGPIO_SetBit(E_GPB, 4);}
} |