|
楼主 |
发表于 2010-12-15 21:45:28
|
显示全部楼层
进入中断后,就在这循环,哪里错了?这个是下降沿中断。 用电平中断现象也差不多。
//*******************************************************/
// 功 能:触摸屏中断服务
//*******************************************************/
void IRQ_touchpanel(void* context, alt_u32 id)
{
delayms(100);
IRQC=IRQC+1;
startADS7843(); //启动SPI
WriteADS7843(0x90); //送控制字 10010000 即用差分方式读X坐
wait(10);
IOWR_ALTERA_AVALON_PIO_DATA(TDCLK_BASE,1);//DCLK=1;
wait(10);
IOWR_ALTERA_AVALON_PIO_DATA(TDCLK_BASE,0);//DCLK=0;
wait(10);
XP=ReadADS7843();
WriteADS7843(0xD0); //送控制字 11010000 即用差分方式读Y坐
wait(10);
IOWR_ALTERA_AVALON_PIO_DATA(TDCLK_BASE,1);//DCLK=1;
wait(10);
IOWR_ALTERA_AVALON_PIO_DATA(TDCLK_BASE,0);//DCLK=0;
wait(10);
YP=ReadADS7843();
IOWR_ALTERA_AVALON_PIO_DATA(TCS_BASE,1);//开ADS7843片选
IOWR_ALTERA_AVALON_PIO_EDGE_CAP(TPENIRQ_IRQ, 0x00); // 清中断捕获寄存器
while(IORD(TPENIRQ_BASE,0)==0);
GUI_printf8_8(4,50,0,COLOR_SILVERY,0," IRQC=%08d\n",IRQC);//显示中断次数
}
/*******************************************************/
//中断注_册
/*******************************************************/
void IRQ_init(void)
{
IOWR_ALTERA_AVALON_PIO_IRQ_MASK(TPENIRQ_BASE, 1); //开启触摸屏的中断
IOWR_ALTERA_AVALON_PIO_EDGE_CAP(TPENIRQ_IRQ, 0); // 清中断捕获寄存器
alt_irq_register(TPENIRQ_IRQ, NULL, IRQ_touchpanel); //注_册中断服务子程序
} |
|