microblaze gpioÖжÏ
2012-12-13 14:06:59| ·ÖÀࣺ
רҵ
| ±êÇ©£º
|¾Ù±¨
|×ֺŴóÖÐС ¶©ÔÄ
#include "xparameters.h"
#include "xgpio_l.h"
#include "xintc.h"
#include "xgpio.h"
XIntc intc;
XGpio push_buttons;
int intc_cnt = 0;
void button_int_handler( void * basedder_p)
{
xil_printf("Push_button interrupt occured %d .\r\n", intc_cnt++);
XGpio_WriteReg(XPAR_LEDS_BASEADDR,1,~intc_cnt);
XGpio_InterruptClear(&push_buttons, 0xFFFF);
XIntc_Acknowledge(&intc,XPAR_INTC_0_GPIO_1_VEC_ID);
}
void delay(int cnt)
{
int i,j;
for(i=0;i<cnt;i++)
for(j=0;j<256;j++);
}
XStatus gpio_irq_init(void)
{
XStatus Status;
// initialize gpio
XGpio_Initialize(&push_buttons, XPAR_PUSH_BUTTONS_DEVICE_ID);
XGpio_SetDataDirection(&push_buttons, 1, 0xFFFF); //set input
XGpio_InterruptEnable(&push_buttons, 0xFFFF); //
XGpio_InterruptGlobalEnable(&push_buttons);
// initialize Interrupt controller
Status = XIntc_Initialize(&intc, (Xuint16)XPAR_INTC_0_DEVICE_ID);
if (Status != XST_SUCCESS)
{ return XST_FAILURE; }
Status = XIntc_SelfTest(&intc);
if (Status != XST_SUCCESS)
{ return XST_FAILURE; }
Status = XIntc_Connect(&intc, XPAR_INTC_0_GPIO_1_VEC_ID, (XInterruptHandler)button_int_handler, &push_buttons);
if (Status != XST_SUCCESS)
{ return XST_FAILURE;}
Status = XIntc_Start(&intc, XIN_REAL_MODE);
if (Status != XST_SUCCESS)
{ return XST_FAILURE; }
XIntc_Enable(&intc, XPAR_INTC_0_GPIO_1_VEC_ID);
microblaze_enable_interrupts();
return XST_SUCCESS;
}
int main (void)
{
char m;
//HSB:LSB <--> D7:D14, ÖÃ0µÆÁÁÖÃ1µÆÃð
for(m=0;m<8;m++)
{
XGpio_WriteReg(XPAR_LEDS_BASEADDR,1,~(1<<m));
delay(10000);
}
gpio_irq_init();
xil_printf("Push_button interrupt test start...\r\n");
while(1)
{
}
}
ÆÀÂÛÕâÕÅ
ת·¢ÖÁ΢²©
ת·¢ÖÁ΢²©
ÔĶÁ(752)|
ÆÀÂÛ()
|
ÓÃ΢ÐÅ ¡°É¨Ò»É¨¡±
½«ÎÄÕ·ÖÏíµ½ÅóÓÑȦ¡£
ÓÃÒ×ÐÅ ¡°É¨Ò»É¨¡±
½«ÎÄÕ·ÖÏíµ½ÅóÓÑȦ¡£
ϲ»¶
ÍÆ¼ö
0ÈË |
ÆÀÂÛ