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.

关于cc2640 定时器的相关问题,请TI的大神移驾进来看看呗、

Other Parts Discussed in Thread: SYSBIOS

我在2.0版本的协议栈的从机工程中添加了C:\ti\tirtos_simplelink_2_11_01_09\products\cc26xxware_2_00_06_14829\driverlib 目录下的timer.c和timer.h文件,然后在SimpleBLEPeripheral_init()函数的最后调用的相关的函数对定时器进行配置,在这过程中遇到的问题是,当我调用TimerIntRegister()函数时,在编译的时候编译器提示说

“Warning[Lp023]: absolute placement (in [0x20000000-0x200000c7]) overlaps with reserved areas:[0x20000000-0x200000c7] "ti_sysbios_family_arm_m3_Hwi_ramVectors"   ”

这个问题我上网查了查,暂时没找到解决的方法,所以就来这里请教各位大神了,求大神解答。工程的部分代码如下:

pinHandle = PIN_open(&pinState, pwmExamplePins);
PINCC26XX_setMux(pinHandle, PIN_ID(Board_LED1), IOC_PORT_MCU_PORT_EVENT0);
TimerIntRegister(GPT0_BASE,TIMER_A,Timer_callBackFxn);    //Timer_callBackFxn是以存根的形式存在于代码中的   不知道有没有影响
Timer_Init();

下面是timer.h中该函数的声明:

extern void TimerIntRegister(uint32_t ui32Base, uint32_t ui32Timer, void (*pfnHandler)(void));

对应的函数体在timer.c中,这里就不贴出来了。

  • 楼主,问题解决了吗?

    我这也出现这个warning,虽然目前不影响使用,但是这个warning总是让人不踏实啊。

  • 解决了,请参考下面的代码:

    extern void Timer_Isr(UArg arg);

    static ti_sysbios_family_arm_m3_Hwi_Struct TimerHwi;

    //==============================================================================
    //Init
    //==============================================================================
    void Timer_init(void)
    {
    Hwi_Params     hwiParams;
    TIM_TimeBaseInitTypeDef    TIM_TimeBaseStructure;

    Power_setDependency(PERIPH_GPT0); //Set Power dependecies & constraints

    //配置GPT0模块定时器A.
    TIM_TimeBaseStructure.GPT_Separate = GPT_CFG_CFG_16BIT_TIMER;
    TIM_TimeBaseStructure.GPT_OneShotOrPeriodic = GPT_TBMR_TBMR_PERIODIC;
    TIM_TimeBaseStructure.GPT_CounterMode = GPT_TBMR_TBCDIR_UP;
    TIM_TimeBaseStructure.GPT_Period = 48000; //48M/48000 = 1KHz
    TIM_TimeBaseInit(GPT0_BASE, TIMER_A, TIM_TimeBaseStructure);

    TIM_IMRConfig(GPT0_BASE, TIMER_TIMA_TIMEOUT, ENABLE); //使能中断

    Disable_Timer(); //关闭定时器 

    Hwi_Params_init(&hwiParams);
    Hwi_construct(&TimerHwi, INT_TIMER0A, Timer_Isr,&hwiParams, NULL); //注册中断服务函数
    Power_setConstraint(Power_SB_DISALLOW); //



    // TIM_OCInitTypeDef TIM_OCInitStructure;
    // TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
    //
    // Power_setDependency(PERIPH_GPT0); // Set Power dependecies & constraints
    //
    // //配置GPT0模块定时器A,PWM模式 Start
    // TIM_TimeBaseStructure.GPT_Separate = TIME_16BIT_TIMER;
    // TIM_TimeBaseStructure.GPT_OneShotOrPeriodic = TIME_PERIODIC;
    // TIM_TimeBaseStructure.GPT_CounterMode = TIME_CDIR_DOWN;
    // TIM_TimeBaseStructure.GPT_Period = 48000;
    // TIM_TimeBaseInit(GPT0_BASE, TIMER_A, TIM_TimeBaseStructure);
    //
    // TIM_OCInitStructure.TIM_OCMode = TIME_CAPTURE_EDGCNT | TIME_PWM; //捕获比较、PWM模式选择
    // TIM_OCInitStructure.TIM_OutputState = TIME_CCP_ON_TIMEOUT; //Legacy PWM operation
    // TIM_OCInitStructure.TIM_Pulse = 24000; //占空比,到时间输出电平翻转
    // TIM_OCInitStructure.TIM_OCIdleState = NORMA_A; //空闲电平状态:INVERTED:0 NORMAL:1
    // TIM_OCInit(GPT0_BASE,TIMER_A,TIM_OCInitStructure);
    //
    // PINCC26XX_setMux(&lState, Board_GREEN, IOC_PORT_MCU_PORT_EVENT0); //PWM 输出引脚
    // Enable_Timer(); //使能定时器
    // Power_setConstraint(Power_SB_DISALLOW); //
    //
    // Util_constructClock(&periodicClock,SimpleBLEPeripheral_sem,10000, 0, 1, 0x0004);
    }

    //==============================================================================
    //
    //==============================================================================
    void Enable_Timer(void)
    {
    TIM_Cmd(GPT0_BASE, TIMER_A, ENABLE); //使能定时器
    }
    //==============================================================================
    //
    //==============================================================================
    void Disable_Timer(void)
    {
    TIM_Cmd(GPT0_BASE, TIMER_A, DISABLE); //关闭定时器
    }

  • 谢谢楼主分享,可是没看明白,楼主能稍微解释一下吗? 谢谢。

  • 其他的不管,只是一个参考,你说的注册中断回调函数的问题,是这样注册的:

    Hwi_Params_init(&hwiParams);        //初始化输入的参数
    Hwi_construct(&TimerHwi, INT_TIMER0A, Timer_Isr,&hwiParams, NULL); //注册中断服务函数 
    Power_setConstraint(Power_SB_DISALLOW); // 

  • 那可能我碰到的问题的原因和楼主的不一样,我把注册中断的代码注释掉,也还是有问题。

    这个问题很早就出现了,因为没影响调试,就没管它,目前也不知道是加什么代码时候引入的了。

    谢谢楼主了

  • 这个是我现在用的驱动,至于说你遇到的问题。。。我也不是很清楚,你可以去https://e2e.ti.com/问问老外。

  • 我下载您的驱动文件,我打开都是乱码啊。我这里没有TIM_TimeBaseInit(GPT0_BASE, TIMER_A, TIM_TimeBaseStructure); 这个函数,找不到。您可以再发一个给我吗?辛苦您了。

  • 你加我下QQ,传给我下,要不我加您也可以。谢谢楼主了

  • 楼主你有博客吗,有没有详细讨论这个配置的一些资料或者文章?2640的一些手册也看过了,讲得太简略了。。。。。

  • 你好,我现在想用timer中断来采集ADC,你这边的timer中断代码能分析下吗?谢谢