This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

beagle bone black 开发sysbios程序问题

Other Parts Discussed in Thread: SYSBIOS

大家好, 我打算用bbb开发一个sysbios程序, 目前通过向导生成的程序编译下载正常。

增加一个timer0,和一个timer0isr后,程序编译正常,但是无法下载。

请问这是哪里出错了呢?

  • BBB的板子有进行初始化么?

    请参考:http://www.deyisupport.com/question_answer/dsp_arm/sitara_arm/f/25/t/73955.aspx

  • 我一开始没有进行初始化,以为在sysbios中会自动初始化。

    后来加上时钟控制的初始化,发现timer2可以用,但timer3,timer6的寄存器还是不能访问。

    这是cfg文件中的相关配置。

    // install a "first function"
    var len = Startup.firstFxns.length
    Startup.firstFxns.length++;
    Startup.firstFxns[len] = '&dmTimerClkInitialization'

    /* Create myTimer as source of Hwi */
    var Timer = xdc.useModule('ti.sysbios.hal.Timer');
    var timer2Params = new Timer.Params();
    timer2Params.instance.name = "timer2";
    timer2Params.period = 10000;
    Program.global.timer2 = Timer.create(2, "&myTimerFunc", timer2Params);
    Idle.idleFxns[0] = "&idleFxn";

    这是c代码中的配置,

    #define HWREG(x) (*((volatile unsigned int *)(x)))

    /** @brief Base addresses of PRCM memory mapped registers */
    #define SOC_PRCM_REGS (0x44E00000)
    #define SOC_CM_PER_REGS (SOC_PRCM_REGS + 0)

    #define CM_PER_TIMER2_CLKCTRL (0x80)
    #define CM_PER_TIMER3_CLKCTRL (0x84)
    #define CM_PER_TIMER4_CLKCTRL (0x88)
    #define CM_PER_TIMER5_CLKCTRL (0xec)
    #define CM_PER_TIMER6_CLKCTRL (0xf0)
    #define CM_PER_TIMER7_CLKCTRL (0x7c)

    #define CM_PER_TIMER2_CLKCTRL_MODULEMODE_ENABLE (0x2u)
    #define CM_PER_TIMER3_CLKCTRL_MODULEMODE_ENABLE (0x2u)
    #define CM_PER_TIMER4_CLKCTRL_MODULEMODE_ENABLE (0x2u)
    #define CM_PER_TIMER5_CLKCTRL_MODULEMODE_ENABLE (0x2u)
    #define CM_PER_TIMER6_CLKCTRL_MODULEMODE_ENABLE (0x2u)
    #define CM_PER_TIMER7_CLKCTRL_MODULEMODE_ENABLE (0x2u)

    /** @brief Base addresses of PRCM memory mapped registers */
    #define SOC_CM_WKUP_REGS (SOC_PRCM_REGS + 0x400)

    #define CM_WKUP_TIMER1_CLKCTRL (0xc4)
    #define CM_WKUP_TIMER1_CLKCTRL_MODULEMODE_ENABLE (0x2u)

    Void idleFxn(UArg a0, UArg a1)
    {
    System_flush(); /* force SysMin output to console */
    }

    Void dmTimerClkInitialization(void)
    {

    HWREG(SOC_CM_WKUP_REGS + CM_WKUP_TIMER1_CLKCTRL) = 2;
    while(CM_WKUP_TIMER1_CLKCTRL_MODULEMODE_ENABLE !=
    (HWREG(SOC_CM_WKUP_REGS + CM_WKUP_TIMER1_CLKCTRL) &0x3));

    HWREG(SOC_CM_PER_REGS + CM_PER_TIMER7_CLKCTRL) = 2;
    while(CM_PER_TIMER7_CLKCTRL_MODULEMODE_ENABLE !=
    (HWREG(SOC_CM_PER_REGS + CM_PER_TIMER7_CLKCTRL) & 0x3));

    /* Set DMTimer 2 clock enable bit */
    HWREG(SOC_CM_PER_REGS + CM_PER_TIMER2_CLKCTRL) = 2;
    while(CM_PER_TIMER2_CLKCTRL_MODULEMODE_ENABLE !=
    (HWREG(SOC_CM_PER_REGS + CM_PER_TIMER2_CLKCTRL) & 0x3));

    HWREG(SOC_CM_PER_REGS + CM_PER_TIMER3_CLKCTRL) = 2;
    while(CM_PER_TIMER3_CLKCTRL_MODULEMODE_ENABLE !=
    (HWREG(SOC_CM_PER_REGS + CM_PER_TIMER3_CLKCTRL) & 0x3));

    HWREG(SOC_CM_PER_REGS + CM_PER_TIMER4_CLKCTRL) = 2;
    while(CM_PER_TIMER4_CLKCTRL_MODULEMODE_ENABLE !=
    (HWREG(SOC_CM_PER_REGS + CM_PER_TIMER4_CLKCTRL) & 0x3));

    HWREG(SOC_CM_PER_REGS + CM_PER_TIMER5_CLKCTRL) = 2;
    while(CM_PER_TIMER5_CLKCTRL_MODULEMODE_ENABLE !=
    (HWREG(SOC_CM_PER_REGS + CM_PER_TIMER5_CLKCTRL) & 0x3));

    HWREG(SOC_CM_PER_REGS + CM_PER_TIMER6_CLKCTRL) = 2;
    while(CM_PER_TIMER6_CLKCTRL_MODULEMODE_ENABLE !=
    (HWREG(SOC_CM_PER_REGS + CM_PER_TIMER6_CLKCTRL) & 0x3));

    }

    代码执行后,发现timer2,4,5,7的初始化正常,

    但是timer3,6初始化不正常。

    CM_PER_TIMER3_CLKCTRL 0x00030002 This register manages the TIMER3 clocks. [Memory Mapped]

    CM_PER_TIMER6_CLKCTRL 0x00030002 This register manages the TIMER6 clocks. [Memory Mapped]

    这两个寄存器,已经通过写低位,使能,但是idle状态一直保持禁止状态,无法访问相关寄存器。

    请问这个如何解决呢?