原创 PIO中断

2009-10-14 13:42 2929 15 15 分类: FPGA/CPLD

09/8/19<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


 


今天调试输入中断


总结:


使用模板:


volatile unsigned char t = 0;     //信号量:通知中断事件发生


static void ex_int_interrupt(void* context, alt_u32 id)


{


    //* 清中断捕获寄存器 */


    IOWR_ALTERA_AVALON_PIO_EDGE_CAP(PIO_0_BASE, ~KEYCON);


    IOWR_ALTERA_AVALON_PIO_IRQ_MASK(PIO_0_BASE, KEYCON);


  


 //t++;


    sprintf(&t,"%d",1);   // &t 中写入 '1'


    //上面两种方式都行~但是 就是不能直接 "t = 1"之类的阻塞操作!


 }


 


static void InitPIO(void)


{


    //* 初始化PIO_KEY为输入,PIO_LED为输出-使用双向口时要先定义方向*/  


    //IOWR_ALTERA_AVALON_PIO_DIRECTION(PIO_0_BASE, ~KEYCON); //0为输入


    //IOWR_ALTERA_AVALON_PIO_DIRECTION(PIO_0_BASE, LEDCON);  //1为输出


   


    //* PIO_KEY中断 */


    IOWR_ALTERA_AVALON_PIO_IRQ_MASK(PIO_0_BASE, KEYCON);


    //* 清边沿捕获寄存器 */


    IOWR_ALTERA_AVALON_PIO_EDGE_CAP(PIO_0_BASE, ~KEYCON);


    //* 注册中断服务子程序 */


    alt_irq_register(2, NULL, ex_int_interrupt);


}



 


记得使用设备初始化程序


              alt_irq_init(ALT_IRQ_BASE);     //不能少


 


e.g.


    alt_irq_init(ALT_IRQ_BASE);


    InitPIO();

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
15
关闭 站长推荐上一条 /3 下一条