大家好, 我打算用bbb开发一个sysbios程序, 目前通过向导生成的程序编译下载正常。
增加一个timer0,和一个timer0isr后,程序编译正常,但是无法下载。
请问这是哪里出错了呢?
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.
大家好, 我打算用bbb开发一个sysbios程序, 目前通过向导生成的程序编译下载正常。
增加一个timer0,和一个timer0isr后,程序编译正常,但是无法下载。
请问这是哪里出错了呢?
我一开始没有进行初始化,以为在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状态一直保持禁止状态,无法访问相关寄存器。
请问这个如何解决呢?