论坛徽章: 0
5 可用积分
在应用程序主函数中调用中断0初始化函数,然后有个while循环。不断循环的过程中接受中断。可是现在进不了中断服务程序,发一个终端信号过来及提示“Spurious Interrupt detected”,这是执行了init.c这个文件中的AT91F_SpuriousHandler()函数。然后再来中断信号就啥反应都没了。很纳闷,关键是以前调试过是可以的,怎么现在突然就不行了。
这是中断0的初始化函数:
[/code]void Irq0Init()
{
AT91C_BASE_PIOB->PIO_PDR |= AT91C_PIO_PB29;
AT91C_BASE_PIOB->PIO_ASR |= AT91C_PB29_IRQ0;
AT91F_PMC_EnablePeriphClock((AT91PS_PMC) AT91C_BASE_PMC, AT91C_ID_IRQ0);
AT91F_AIC_ConfigureIt(
AT91C_BASE_AIC,
AT91C_ID_IRQ0,
AT91C_AIC_PRIOR_HIGHEST,
AT91C_AIC_SRCTYPE_EXT_POSITIVE_EDGE,
AT91F_ASM_IRQ0_Handler
);
AT91F_AIC_EnableIt(AT91C_BASE_AIC, AT91C_ID_IRQ0);
}
[code] 复制代码
这是中断处理函数:
[/code]
void AT91F_IRQ0_Handler() //WriteVXIDataLow()
{
ushort command;
char buf[3];
irq0_flag=1;
command = *(VXI_REG_E);
dataLow = command & 0x00FF;
dataHigh = (command >> 8) & 0x00FF;
sprintf(buf,"\r0x%x%x\n",dataHigh,dataLow);
AT91F_DBGU_Printk(buf);
writeDataFlag = 1;
}
[code] 复制代码
没辙了,请各位大侠给指点指点!
主函数为:
int main()
{
unsigned int i=0;
AT91F_DBGU_Printk("\n\n\r-I- ======================================\n\r");
AT91F_DBGU_Printk("-I- FFT-RM9200 Zhongduan Test\n\r");
AT91F_DBGU_Printk("-I- --------------------------------------\n\r");
//***************************************************************************
//
// 进行中断的初始化
//
//***************************************************************************
//1-1 引脚PB29设置为IRQ0的功能
AT91F_PIO_CfgPeriph(
AT91C_BASE_PIOB, // PIO controller base address
((unsigned int) AT91C_PB29_IRQ0),
0); // Peripheral B
AT91F_AIC_ConfigureIt (
AT91C_BASE_AIC, // AIC base address
AT91C_ID_IRQ0, // System peripheral ID
AT91C_AIC_PRIOR_HIGHEST, // Max priority
AT91C_AIC_SRCTYPE_INT_EDGE_TRIGGERED,
AT91F_IRQ0_ASM_HANDLER );
// Enable IRQ0 interrupt
AT91F_AIC_EnableIt(AT91C_BASE_AIC, AT91C_ID_IRQ0);
while(1)
{
//如果检查到,IRQ0中断发生的标志,则向串口输出数据
if(irq0_flag==1)
{
AT91F_DBGU_Printk("-I- FFT-RM9200 Zhongduan generate\n\r");
i=i+1;
irq0_flag=0;
}
}
} 复制代码
[ 本帖最后由 yjz98 于 2009-7-7 14:51 编辑 ]
我来回答