一.硬件配置(1)添加IP核[[wysiwyg_imageupload:598:]] (2)分配地址[[wysiwyg_imageupload:599:]] (3)连线[[wysiwyg_imageupload:600:]] 二.软件编写(1)timer的处理:载入计数值->设置运行选项(向上向下计数,使能中断,自加载计数值等)->使能,开始运行(2)interupt的处理:使能microblaze中断->在XPS_INTC注册中断服务函数->使能XPS_INTC中断->使能timer在XPS_INTC里的中断(3)程序架构:#include "xparameters.h"#include "xintc.h" //中断子函数头文件#include "xtmrctr.h" //定时器子函数头文件void timer_int_handler(void);//中断函数声明int main(void){ microblaze_enable_interrupts(); XIntc_RegisterHandler(XPAR_XPS_INTC_0_BASEADDR, XPAR_XPS_INTC_0_XPS_TIMER_0_INTERRUPT_INTR, (XInterruptHandler)timer_int_handler, (void *)XPAR_XPS_TIMER_0_BASEADDR ); XIntc_mMasterEnable(XPAR_XPS_INTC_0_BASEADDR); XTmrCtr_mSetLoadReg(XPAR_XPS_TIMER_0_BASEADDR,0,0x20000000); XTmrCtr_mSetControlStatusReg(XPAR_XPS_TIMER_0_BASEADDR,0, XTC_CSR_ENABLE_TMR_MASK | XTC_CSR_ENABLE_INT_MASK |XTC_CSR_AUTO_RELOAD_MASK|XTC_CSR_DOWN_COUNT_MASK ); XIntc_mEnableIntr(XPAR_XPS_INTC_0_BASEADDR,XPAR_XPS_TIMER_0_INTERRUPT_MASK); while(1);//等待中断 return 0;}//中断处理程序: void timer_int_handler(void){ unsigned int timer_csr; timer_csr = XTmrCtr_mGetControlStatusReg(XPAR_XPS_TIMER_0_BASEADDR, 0); //...中断处理 XTmrCtr_mSetControlStatusReg(XPAR_XPS_TIMER_0_BASEADDR,0, timer_csr);} 例子:void InterruptHandler(void); int main(void){microblaze_register_handler((XInterruptHandler)InterruptHandler, (void*)0); #ifdef DEBUGprint("* Registered Interrupt Handler *\n\r");#endif microblaze_enable_interrupts(); // Something useful here. return 0;} void InterruptHandler(void){#ifdef DEBUGprint("* Entering Interrupt *\r\n");#endifmicroblaze_disable_interrupts(); // Do something useful here . microblaze_enable_interrupts(); #ifdef DEBUGprint("* Leaving Interrupt *\r\n");#endif} 转载自:阳明的博客 |