Nios II开发--按键中断处理
文章摘要:
本文描述了基于NIOS II系统的按键中断处理;
硬件平台:EP4CE6F17C8
开发环境:Quartus II 13.1/Nios II 13.1
配置Qsys添加PIO模块
重新编译并下载
重新生成BSP
新建Nios项目工程
示例代码:
/*
* main.c
* Created on: 2017-4-18
* Author: alex
*/
#include "system.h"
#include "sys/alt_irq.h"
// 定义寄存器,采用比较通用的寄存器定义方法来实现读写访问
#define rLEDS_PORT *((volatile int *)(PIO_LEDS_BASE + (0 << 2)))
#define rKEYS_IRQ_MASK *((volatile int *)(PIO_KEYS_BASE + (2 << 2)))
#define rKEYS_EDGE_CAP *((volatile int *)(PIO_KEYS_BASE + (3 << 2)))
char val = 0x00;
// 中断服务函数
void isr_keys(void* context)
{
rKEYS_EDGE_CAP = 0; // 清除中断
val = val + 1;
}
// 主函数入口
int main(void)
{
// 注册中断
alt_ic_isr_register(
PIO_KEYS_IRQ_INTERRUPT_CONTROLLER_ID,
PIO_KEYS_IRQ, // 中断向量
isr_keys, // 中断服务函数
0, // 中断服务函数参数
0); // flag
rKEYS_IRQ_MASK = 0x03; // 中断屏蔽(使能)
rKEYS_EDGE_CAP = 0; // 清队中断标识位
while(1)
{
rLEDS_PORT = val;
}
return 0;
}