微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI无线射频设计 > cc1310 driverlib-时钟切换问题

cc1310 driverlib-时钟切换问题

时间:12-23 整理:3721RD 点击:

因为多方衡量,我们小组选择了使用SDK里面提供的driverlib驱动库来使用CC1310开发产品。

在系统时钟切换上遇到了问题,如下:

1. 这里说CPU时钟能够在48MHz~750KHz切换,但实在没有找到对应的函数。

这个函数居然固定返回 48000000Hz,这是为啥?

//*****************************************************************************
//
//! \brief Get the CPU core clock frequency.
//!
//! Use this function to get the current clock frequency for the CPU.
//!
//! The CPU can run from 48 MHz and down to 750kHz. The frequency is defined
//! by the combined division factor of the SYSBUS and the CPU clock divider.
//!
//! \return Returns the current CPU core clock frequency.
//
//*****************************************************************************
__STATIC_INLINE uint32_t
SysCtrlClockGet( void )
{
    // Return fixed clock speed
    return( GET_MCU_CLOCK );
}

2. 貌似无法切换到外部24MHz晶体,代码如下:

    if (OSCClockSourceGet(OSC_SRC_CLK_HF)!=OSC_XOSC_HF)
    {
        uint32_t tmp;
        OSCHF_TurnOnXosc();
        while (!OSCHfSourceReady());
        OSCHfSourceSwitch();
        do
        {//check
            tmp = OSCClockSourceGet(OSC_SRC_CLK_HF);
        }
        while (tmp != OSC_XOSC_HF);
    }

3. SCLK_LF貌似也没有切换到外部32.768KHz,ccfg.c中clock设置如下:

//#####################################
// Clock settings
//#####################################

#ifndef SET_CCFG_MODE_CONF_SCLK_LF_OPTION
// #define SET_CCFG_MODE_CONF_SCLK_LF_OPTION            0x0        // LF clock derived from High Frequency XOSC
// #define SET_CCFG_MODE_CONF_SCLK_LF_OPTION            0x1        // External LF clock
#define SET_CCFG_MODE_CONF_SCLK_LF_OPTION               0x2        // LF XOSC
// #define SET_CCFG_MODE_CONF_SCLK_LF_OPTION            0x3        // LF RCOSC
#endif

按照你上面截取的代码,ccfg.c中的设置即为使用外部32.768KHz晶振。

在使用RTC时候,明显发现LaunchPad上时间和电脑时间有差异。大约246s,相差21ms左右。

你使用的外部晶振还是内部振荡器,使能校准了吗?

这个差异是如何测到的?具体测试方法是什么?

振荡器的设置代码如下:

    AUXWUCPowerCtrl(AUX_WUC_POWER_ACTIVE);
    while (!(AONWUC_AUX_POWER_ON&AONWUCPowerStatusGet()));
    AUXWUCClockEnable(AUX_WUC_OSCCTRL_CLOCK);
    if (OSCClockSourceGet(OSC_SRC_CLK_LF)!=OSC_XOSC_LF)
	{
		OSCClockSourceSet(OSC_SRC_CLK_LF, OSC_XOSC_LF);
	}

使用方式是使用RTC CH2产生2s的中断,在中断中打印一小段信息。经过很长时间,比如1小时吧,会明显发现偏差

代码如下:

    AONRTCCombinedEventConfig(AON_RTC_CH2);
    AONRTCCompareValueSet(AON_RTC_CH2, 0x10000);
    AONRTCModeCh2Set(AON_RTC_MODE_CH2_CONTINUOUS);
    AONRTCIncValueCh2Set(0x20000);//2s
    AONRTCEnable();
    AONRTCChannelEnable(AON_RTC_CH2);
    

    IntEnable(INT_AON_RTC_COMB);//AON-RTC

使用的串口工具大致如下(3S的一个周期性打印任务),接收数据时间能精确到ms。

[17-07-25 10:49:12:436][Rx]uart_p run 115 timers
[17-07-25 10:49:15:439][Rx]uart_p run 116 timers
[17-07-25 10:49:18:437][Rx]uart_p run 117 timers
[17-07-25 10:49:21:436][Rx]uart_p run 118 timers

另外,我测试的硬件平台是CC1350的LaunchPad Rev:1.1

问题汇总:

1. 目前MCU工作频率固定为48MHz。

2. ccfg.c和启动文件做了很多关于时钟初始化的工作。使用用driverlib切换时钟没有问题。

3. RTC时钟的问题,以上代码操作是正确的,误差是正常的,由32.768KHz晶振产生。修改增量寄存器即可实现校准,因为没有仪器测量从IO口引出的低速时钟信号的频率,带来误判。

  1. 您好,可不可以把你RTC唤醒的例程发给我一份,我参考一下

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

网站地图

Top