首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Microblaze中断

Microblaze中断

一.硬件配置(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} 转载自:阳明的博客
记录学习中的点点滴滴,让每一天过的更加有意义!
返回列表