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();
文章评论(0条评论)
登录后参与讨论