Zynq中斷大致可分為三個部分
第一部分為SGI,軟件生成的中斷,共16個端口;
第三部分為SPI,共享外設中斷,來自于44個PS端的IO外設以及16個PL端的中斷。中間部分為GIC,也即中斷控制器,用于對中斷進行使能、關閉、掩碼、設置優(yōu)先等。
SGI中斷(軟件產(chǎn)生中斷),共16個IRQ ID號
PPI中斷,CPU私有中斷,共5個IRQ ID號
SPI中斷部分,共60個IRQ ID號
接下來設置帶有中斷的GPIO
INT_MASK:中斷掩碼
INT_DIS: 中斷關閉
INT_EN: 中斷使能
INT_TYPE: 中斷類型,設置電平敏感還是邊沿敏感
INT_POLARITY:中斷極性,設置低電平或下降沿還是高電平或上升沿
INT_ANY: 邊沿觸發(fā)方式,需要INT_TYPE設置為邊沿敏感才能使用
GPIO初始化→設置按鍵和LED方向→設置產(chǎn)生中斷方式→設置中斷→打開中斷控制器→打開中斷異常→打開GPIO中斷→判斷KEY_FLAG值,是1,寫LED
GPIO_CONFIG =XGpioPs_LookupConfig(MIO_0_ID) ; Status =XGpioPs_CfgInitialize(&GPIO_PTR, GPIO_CONFIG, PIO_CONFIG->BaseAddr) ; //設置LED方向 XGpioPs_SetDirectionPin(&GPIO_PTR,0, GPIO_OUTPUT) ; XGpioPs_SetDirectionPin(&GPIO_PTR,13, GPIO_OUTPUT) ; //設置按鍵方向 XGpioPs_SetDirectionPin(&GPIO_PTR,PS_KEY1, GPIO_INPUT) ; XGpioPs_SetDirectionPin(&GPIO_PTR,PS_KEY2, GPIO_INPUT) ; //使能LED輸出 XGpioPs_SetOutputEnablePin(&GPIO_PTR,0, GPIO_OUTPUT) ; XGpioPs_SetOutputEnablePin(&GPIO_PTR,13, GPIO_OUTPUT) ; //設置中斷類型 0表示上升沿 XGpioPs_SetIntrTypePin(&GPIO_PTR,PS_KEY1, 0);//rising edge XGpioPs_SetIntrTypePin(&GPIO_PTR,PS_KEY2, 0);//rising edge //設置按鍵使能 XGpioPs_IntrEnablePin(&GPIO_PTR,PS_KEY1) ; XGpioPs_IntrEnablePin(&GPIO_PTR,PS_KEY2) ; //設置中斷 Status= IntrInitFuntion(&INTCInst, MIO_0_ID, &GPIO_PTR) ; //產(chǎn)生按鍵的GPIO while(1) { if (key_flag) { XGpioPs_WritePin(&GPIO_PTR,0, key_val) ; XGpioPs_WritePin(&GPIO_PTR,13, key_val) ; key_val= ~key_val ; key_flag= 0 ; } } 編輯:hfy
-
cpu
+關注
關注
68文章
10825瀏覽量
211149 -
MIO
+關注
關注
0文章
12瀏覽量
8157 -
Zynq
+關注
關注
9文章
608瀏覽量
47128
發(fā)布評論請先 登錄
相關推薦
評論