微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > 关于cc2640 定时器的相关问题,请TI的大神移驾进来看看呗、

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

时间:10-02 整理:3721RD 点击:

我在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); // 

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

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

谢谢楼主了

3808.timer.rar

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

谢谢楼主分享

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

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

谢谢分享。

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

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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top