github
簡介
使用上升沿/下降沿捕獲產設中斷的方式,在中斷服務函數中ToggleLED燈。
Quartus
對引腳邊沿捕獲方式及中斷產生方式進行配置
Eclipse
#include "system.h"
#include "altera_avalon_pio_regs.h"
#include "alt_types.h"
#include "sys/alt_irq.h" //使用中斷所必須的頭文件
void key_interrupt(void* p) //中斷服務函數
{
static alt_u8 flag = 0;
IOWR_ALTERA_AVALON_PIO_EDGE_CAP(PIO_0_BASE,0x10); //清除邊沿觸發的標誌位
flag = ~flag;
if(flag)
IOWR_ALTERA_AVALON_PIO_DATA(PIO_0_BASE,0); //4個led引腳輸出0
else
IOWR_ALTERA_AVALON_PIO_DATA(PIO_0_BASE,0x0f); //4個led引腳輸出1
}
int main()
{
alt_ic_isr_register(PIO_0_IRQ_INTERRUPT_CONTROLLER_ID, //中斷配置
PIO_0_IRQ,
key_interrupt, //中斷服務函數
0, //入口參數
0);
IOWR_ALTERA_AVALON_PIO_DIRECTION(PIO_0_BASE,0x0f); //設置IO口方向
IOWR_ALTERA_AVALON_PIO_IRQ_MASK(PIO_0_BASE,0x10); //開啓IO口的中斷
/* Event loop never exits. */
while (1)
{
}
return 0;
}