关于按键中断的程序 解释得很详细
记得在用SOPC BUILDER添加PIO时要把IO设成输入的 而且要选定是什么沿触发
主要是检测BUTTON下降沿,触发中断,点亮相应的LED。
#include <stdio.h>
#include <io.h>
#include <system.h>
/*********************************************
函数名:button_irq
功 能:button中断处理函数
输 入:context:相关内容指针,中断号
返 回:
备 注:读取相应BUTTON数据,点亮相应LED
**********************************************/
void button_irq(void *context,alt_u32 interrupt)
{
unsigned int data;
//*在下面的语句中0x00代表是数据寄存器 0x01代表是方向寄存器 0x02代表是中断掩码器 0x03代表是边沿捕获寄存器*/
/* 读取边沿捕获寄存器值 */
data="IORD"(BUTTON_BASE,0x03);//这里的0x03代表地址偏移量为3 当偏移量为0时代表边沿捕获寄存器
/* 点亮相应的LED */
IOWR(LED_BASE,0x00,data); //这里的0x00代表地址偏移量为0 当偏移量为0时代表数据寄存器
/* 清除边沿捕获寄存器 */
IOWR(BUTTON_BASE,0x03,0x00);
}
#include <stdio.h>
int main()
{
unsigned int data;
printf("BUTTON 中断实验!\n");
/* 开放低四位 BUTTON的中断屏蔽 */
IOWR(BUTTON_BASE,0x02,0x0f);
/* 清除边沿捕获寄存器,先清除寄存器的内容*/
IOWR(BUTTON_BASE,0x03,0x00);
/* 注册中断处理函数 */
if (alt_irq_register( BUTTON_IRQ, NULL,button_irq))
{
printf("alt_irq_register error\n"); //在system liarbry里面的stdin stdout都设置为jtag uart,则alt_irq_register error在console窗口会显示出来
return -1;
}
while(1); //等待中断
return 0;
}
文章评论(0条评论)
登录后参与讨论