首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MicroBlaze MCS固定定时器中断

MicroBlaze MCS固定定时器中断
EN

Stack Overflow用户
提问于 2013-10-16 13:31:21
回答 1查看 2.1K关注 0票数 1

我正在尝试在MicroBlaze的MCS内核中获得一个固定的定时器,以调用一个函数来切换一些LED,作为概念证明。

下面是我现在拥有的代码

代码语言:javascript
复制
#include <xparameters.h>
#include <xiomodule.h>
#include <xiomodule_l.h>

XIOModule gpo1;
volatile u32 ct = 0;

void timerTick(void* ref){
    ct++;
    XIOModule_DiscreteWrite(&gpo1, 1, ct);
    XIOModule_DiscreteWrite(&gpo1, 2, ct);
}

int main() {

    XIOModule_Initialize(&gpo1, XPAR_IOMODULE_0_DEVICE_ID);
    XIOModule_Start(&gpo1);

    XIOModule_EnableIntr(XPAR_IOMODULE_0_BASEADDR, XIN_IOMODULE_FIT_1_INTERRUPT_INTR);
    XIOModule_Connect(&gpo1, XIN_IOMODULE_FIT_1_INTERRUPT_INTR, timerTick, NULL);

    while (1) {
    }
}

GPO的东西起作用了。如果我把它放到while循环中,我就可以让LED按预期切换。但是,就像当前的代码一样,timerTick()从不被调用。我真的很困惑如何正确设置中断,我还没有找到任何关于这方面的文档。我能找到的最好的是http://www.xilinx.com/support/documentation/sw_manuals/xilinx14_4/pg048-microblaze-mcs.pdf,它涵盖了更多关于内核硬件的内容,而不是如何编程。

启用和连接中断的正确方式是什么?

EN

回答 1

Stack Overflow用户

发布于 2013-10-17 08:47:57

多亏了这篇论坛帖子http://forums.xilinx.com/t5/Embedded-Development-Tools/Can-not-fire-MicroBlaze-MCS-interrupt/td-p/256372,我找到了解决方案

代码语言:javascript
复制
#include <xparameters.h>
#include <xiomodule.h>
#include <xiomodule_l.h>

XIOModule gpo1;
volatile u32 ct = 0;

void timerTick(void* ref) {
    ct++;
    XIOModule_DiscreteWrite(&gpo1, 1, ct);
    XIOModule_DiscreteWrite(&gpo1, 2, ct);
}

int main() {

    XIOModule_Initialize(&gpo1, XPAR_IOMODULE_0_DEVICE_ID);

    microblaze_register_handler(XIOModule_DeviceInterruptHandler, XPAR_IOMODULE_0_DEVICE_ID);

    XIOModule_Start(&gpo1);

    XIOModule_Connect(&gpo1, XIN_IOMODULE_FIT_1_INTERRUPT_INTR, timerTick, NULL);
    XIOModule_Enable(&gpo1,XIN_IOMODULE_FIT_1_INTERRUPT_INTR);

    microblaze_enable_interrupts();
    while (1) {
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19395898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档