Timer 如何初始化ARM Cortex-A7中的核心计时器

Timer 如何初始化ARM Cortex-A7中的核心计时器,timer,operating-system,arm,Timer,Operating System,Arm,目前,我正在为Raspberry 2开发一个操作系统,这是我获得大学学位的最后一个项目,而现在我在创建一个每秒抛出一个中断的简单计时器方面遇到了严重的问题,因为ARM提供的没有说明如何初始化该模块。 我阅读了架构参考手册,它在ARM架构/参考手册/ARMv7 AR中 有人能给我解释一下初始化核心计时器的过程吗 我将补充到目前为止我所尝试的: 在我的C文件中 _local_timer_init(); // ROUTING IRQ *(volatile uint32_t*)C

目前,我正在为Raspberry 2开发一个操作系统,这是我获得大学学位的最后一个项目,而现在我在创建一个每秒抛出一个中断的简单计时器方面遇到了严重的问题,因为ARM提供的没有说明如何初始化该模块。
我阅读了架构参考手册,它在ARM架构/参考手册/ARMv7 AR中

有人能给我解释一下初始化核心计时器的过程吗

我将补充到目前为止我所尝试的:

在我的C文件中

    _local_timer_init();
    // ROUTING IRQ
    *(volatile uint32_t*)CORE0_L_TIMER_INT_CTL = 0x8;
在我的汇编文件中

.globl _local_timer_init
/*
        THIS STEPS APPLIES IN A SYSTEM WHERE THERE IS NOT VIRTUALIZATION SUPPORT
        (I think so)
    1. Look into CNTKCTL register if you need
    2. Look into CNTP_CTL or CNTH_CTL or CNTV_CTL to enable or disable
       the corresponding timer (bit 0)
    3. You have to set the compare value for the corresponding timer
       CNTP_CVAL, CNTH_CVAL, CNTV_CVAL if needed
    4. It should be in boot.S but you have to initialize the counter 
       frequency register, CNTFRQ
    5. Putting the corresponding TVAL register to a right value
    6. Routing the IRQ and enabling IRQ of the corresponding core
*/
_local_timer_init:
    // ENABLING TIMER
    mov r0, #1
    mcr p15, #0, r0, c14, c3, #1 //Write to CNTV_CTL
    // SETTING FREQUENCY TIMER
    //we don't need this right now
    // SETTING TVAL REGISTER (virtual)
    mrc p15, #0, r0, c14, c0, #0 //we obtain CNTFRQ
    mcr p15, #0, r0, c14, c3, #0 //Write to CNTV_TVAL
我还为IRQ异常创建了自定义汇编处理程序,如下所示: 也许问题就在这里,我真的不知道这是处理IRQ异常的正确方法吗

irq_s_handler:
    /*Mode: PL1 irq */
    srsda sp!, #0x12 //we stores the spsr and lr at the address contained in sp of the mode irq
    /*
    It is necessary to switch to supervisor mode and store some registers
    into it's stack for having support for nested exceptions
     */
    push {r0-r12}
    bl irq_c_handler
    pop {r0-r12}
    rfeib sp! //we do the inverse operation of srsdb
    subs pc, lr, #4 //we adjust the appropiate value considered

你先试过投票吗?如果可以,请始终从轮询开始,在将外围设备启用到中断控制器之前,尽可能多地了解外围设备,然后在启用该外围设备以中断处理器之前,尽可能多地进行轮询。试图一次完成这一切通常会失败,并且需要更长的时间才能解决。你需要在内核中使用计时器吗,或者芯片中可以使用任何计时器吗?嗨,我很抱歉这么长时间的延迟,我刚刚知道发生了什么,这不是上面显示的任何代码的问题,而是我的一个c文件在其他地方的问题,我现在觉得自己很笨,但我解决了我的问题。谢谢你试图帮助我,不管怎样,你的想法将帮助我解决我的下一个问题,了解arm cortex a7的邮箱:)