工具/软件:TI-RTOS
您好!
CC1310驱动程序库文档指出,我们可以使用 void SysCtrlStandby()函数将 CC1310置于低功耗模式。 但没有这样的功能。 我使用的是 tirtos_cc13xx_cc26xx_2_21_00_06。
以下是 tirtos_cc13xx_cc26xx_2_21_00_06的 sys_ctrl.h 文件
/*********
*文件名:sys_ctrl.h
*修订日期:2016年7月7日19:12:02 +0200 (星期四、2016年7月7日)
*修订版:46848
*
*说明:系统控制器的定义和原型。
*
*版权所有(c) 2015 - 2016、德州仪器(TI)公司
*保留所有权利。
*
*以源代码和二进制形式重新分发和使用、有无
*如果满足以下条件、则允许进行修改:
*
* 1)重新发布源代码必须保留上述版权声明、
*此条件列表和以下免责声明。
*
* 2)二进制形式的再发行必须复制上述版权声明、
*本条件列表和文档中的以下免责声明
*和/或随分发提供的其他材料。
*
3)本组织的名称或其捐助者的名称均不得
*用于在没有的情况下认可或推广从此软件派生的产品
*特定的事先书面许可。
*
*本软件由版权所有者和贡献者"按原样"提供
*以及任何明示或暗示的保证、包括但不限于
*对适销性和特定用途适用性的隐含保证
*不承担任何责任。 在任何情况下、版权持有人或作者都不得
*对任何直接、间接、偶然、特殊、模范、 或
*相应的损害(包括但不限于采购
*替代产品或服务;丧失使用、数据或利润;或业务
*中断)、但有任何责任理论、无论是在中还是在中
*合同、严格责任或侵权行为(包括疏忽或其他原因)
*因使用本软件而以任何方式产生、即使已被告知
*可能造成此类损坏。
*
秘书长的报告 /
//
//
//! \addtogroup system_control_group
//! @{
//! 添加到组 SYSCTRL_API
//! @{
//
//
#ifndef __sysctrl_H__
#define __SYSCTRL_H__
//
//
//如果使用 C++编译器进行编译,请在此标头中进行所有定义
//具有 C 绑定。
//
//
#ifdef __cplusplus
外部"C"
{
#endif
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
//
//
//支持 ROM 中的 DriverLib:
//此部分重命名所有不是“静态内联”的函数,因此
//调用这些函数将默认在闪存中实现。 结束时
//对于此文件,第二次重命名将更改中的默认实现
//可用函数的 ROM。
//
//强制使用闪存中的实现,例如用于调试:
//-全局:在项目级别定义 DRIVERLIB_NOROM
//-每个函数:调用函数时使用前缀"NOROM_"
//
//
#if !defined (DOXYGEN)
#define SysCtrlPowerEverything NOROM_SysCtrlPowerEverything
#define SysCtrlSetRechargeBeforePowerDown NOROM_SysCtrlSetRechargeBeforePowerDown
#define SysCtrlAdjustRechargeAfterPowerDown NOROM_SysCtrlAdjustRechargeAfterPowerDown
#define SYSCTRL_DCDC_VoltageConditionalControl NOROM_SYSCTRL_DCDC_VoltageConditionalControl
#define SysCtrlResetSourceGet NOROM_SysCtrlResetSourceGet
#endif
//
//
//定义主 XOSC 的设置
//
//
#define SYSCTRL_SYSBUS_ON 0x00000001
#define SYSCTRL_SYSBUS_OFF 0x00000000
//
//
//为系统 CPU 的不同功耗模式定义
//
//
#define CPU_RUN 0x00000000
#define CPU_SLEEP 0x00000001
#define CPU_DEEP_SLEEP 0x00000002
//
//
//为 SysCtrlSetRechargeBeforePowerDown 定义
//
//
#define XOSC_IN_HIGH_POWER_MODE 0 //当 xosc_HF 处于 HIGH_POWER_XOSC 中时
#define XOSC_IN_LOW_POWER_MODE 1 //当 xosc_HF 处于 LOW_POWER_XOSC 中时
//
//
// API 函数和原型
//
//
//
//
//! 简要启动所有设备。
//!
//! 注意此函数中的排序不一定是您的方式
//! 希望在实际应用中对活动模式进行排序。 可能存在这种情况
//! 您需要的特定于应用的先决条件或硬件限制
//! 考虑哪些因素偏离了该特定的实施方案。
//!
//! 注意此函数在将来的版本中可能已被弃用
//!
//! \无返回
//
//
extern void SysCtrlPowerEverything (void);
//
//
//! 简要了解 CPU 内核时钟频率。
//!
//! 使用此函数获取 CPU 的当前时钟频率。
//!
//! CPU 可在48MHz 和低至750kHz 的频率下运行。 定义了频率
//! SYSBUS 和 CPU 时钟分频器的组合分频因子。
//!
//! 返回当前 CPU 内核时钟频率。
//
//
_static_inline uint32_t
SysCtrlClockGet (空)
{
//
//返回固定时钟速度
//
return (get_MCU_clock);
}
//
//
//! \brief 同步对 AON 寄存器接口的所有访问。
//!
//! 当该函数返回时、对 AON 寄存器接口的所有写入操作均为
//! 保证已经传播到硬件。 函数将返回
//! 如果没有 AON 写入被挂起、立即执行;否则、它将等待下一个写入
//! 返回前的 Aon 时钟。
//!
//! \无返回
//!
//! \sa \ref SysCtrlAonUpdate()
//
//
__static_inline void
SysCtrlAonSync (空)
{
//
//同步 AON 接口
//
HWREG (AON_RTC_BASE + AON_RTC_O_SYNC);
}
//
//
//! \brief 将所有接口更新为 AON。
//!
//! 当该函数返回时、上至少有1个时钟周期在进行
//! AON 域、以便对 AON 接口进行任何未完成的更新
//! 是同步的。
//!
//! 注意此函数主要应在从睡眠模式唤醒后使用、
//! 因为它将保证 AON 接口上的所有影子寄存器都被更新
//! 在从 MCU 域读取任何 AON 寄存器之前。 如果写入操作已经完成
//! 对 AON 接口执行此操作就足以调用\ref SysCtrlAonSync()。
//!
//! \无返回
//!
//! \sa \ref SysCtrlAonSync()
//
//
__static_inline void
SysCtrlAonUpdate (空)
{
//
//在 AON 接口上强制一个时钟周期以保证所有寄存器都是
//同步。
//
HWREG (AON_RTC_BASE + AON_RTC_O_SYNC)= 1;
HWREG (AON_RTC_BASE + AON_RTC_O_SYNC);
}
//
//
//! \brief 在进入断电模式之前设置再充电值。
//!
//! 应在进入断电之前调用此函数。
//! 它可计算自适应再充电的最佳和安全再充电设置
//! 控制器。 还会考虑之前设置的结果。
//!
//! 注意为了确保寄存器写入完成,\ref SysCtrlAonSync()
//! 必须在进入待机/断电前调用。 这不是在内部完成的
//! 在该函数中、有两个原因:
//! -1)可能还有其他寄存器写入也必须同步。
//! 2) 2)在呼叫之前、可以通过执行其他操作来节省一些时间
//! \ref SysCtrlAonSync(),因为此调用在没有之前不会返回
//! MCU 和 AON 之间未处理的写入请求。
//!
//! \param xoscPowerMode (通常始终在 XOSC_IN_HIGH_POWER_MODE 中运行)。
//! -\ref XOSC_IN_HIGH_POWER_MODE:当 xosc_HF 处于 HIGH_POWER_XOSC 中时。
//! -\ref XOSC_IN_LOW_POWER_MODE:当 xosc_HF 处于 LOW_POWER_XOSC 中时。
//!
//! \无返回
//
//
extern void SysCtrlSetRechargeBeforePowerDown (uint32_t xoscPowerMode);
//
//
//! 简要调整充电计算、以便在接下来使用。
//!
//! 应在从断电状态返回后调用此函数。
//!
//! 读取自适应再充电控制器和电流芯片的结果
//! 温度。 这在计算时用作附加信息
//! 下次(何时)优化再充电控制器设置
//! \ref SysCtrlSetRechedBeforePowerDowne()下次调用)。
//!
//! 注意
//! 必须特别小心、以确保 AON 寄存器被读取
//! 唤醒后更新。 写入 AON 寄存器、然后调用
//! \ref SysCtrlAonSync()将处理此问题。
//!
//! \无返回
//
//
extern void SysCtrlAdjustRechargeAfterPowerDown ( void );
//
//
//! 简要地根据被认为是最佳用法打开或关闭 DCDC。
//!
//! 此函数仅在以下两个 CCFG 设置为\c true 时控制 DCDC:
//! - DCDC 被配置为使用。
//! -定义并启用备用直流/直流设置。
//!
//! 当打开时、DCDC 根据 CCFG 设置进行配置。
//!
//! 应定期调用此函数。
//!
//! \无返回
//
//
extern void sysctrl_dcdc_VoltageConditionalControl( void );
//
//\name 调用 SysCtrlResetSourceGet 返回值()
//@
//
#define RSTSRC_PWR_ON ((AON_SYSCTL_RESETCTL_RESET_SRC_PWR_ON)>>(AON_SYSCTL_RESETCTL_RESET_SRC_S))
#define RSTSRC_PIN_RESET (((AON_SYSCTL_RESETCTL_RESET_SRC_PIN_RESET)>>(AON_SYSCTL_RESETCTL_RESET_SRC_S))
#define RSTSRC_VDDS_LOSS ((AON_SYSCTL_RESETCTL_RESET_SRC_VDDS_LOSS)>>(AON_SYSCTL_RESETCTL_RESET_SRC_S))
#define RSTSRC_VDD_Loss ((AON_SYSCTL_RESETCTL_RESET_SRC_VDD_Loss)>>(AON_SYSCTL_RESETCTL_RESET_SRC_S))
#define RSTSRC_VDDR_Loss ((AON_SYSCTL_RESETCTL_RESET_SRC_VDDR_Loss)>>(AON_SYSCTL_RESETCTL_RESET_SRC_S))
#define RSTSRC_CLK_LOSS ((AON_SYSCTL_RESETCTL_RESET_SRC_CLK_LOSS)>>(AON_SYSCTL_RESETCTL_RESET_SRC_S))
#define RSTSRC_SYSRESET ((AON_SYSCTL_RESET_RESET_SRC_SYSRESET)>>(AON_SYSCTL_RESETL_RESET_SRC_S))
#define RSTSRC_WARMRESET ((AON_SYSCTL_RESET_RESET_SRC_WARMRESET)>>(AON_SYSCTL_RESETY_RESET_SRC_S)
#define RSTSRC_WAKEUP_FROW_SHUTDOWN (((AON_SYSCTL_RESET_SRC_M)>>(AON_SYSCTL_RESET_SRC_S)+ 1)
//@}
//
//
//! \brief 返回上一次复位源(包括"从关断状态唤醒")。
//!
//! 返回 RSTSRC_定义之一。
//
//
extern uint32_t SysCtrlResetSourceGet (void);
//
//
//! \brief 执行完整的系统重置。
//!
//! 返回芯片将重置、因此从不会从此调用返回。
//
//
__static_inline void
SysCtrlSystemReset( void )
{
//禁用 CPU 中断
CPUCPsid();
//写复位寄存器
HWREGBITW (AON_SYSCTL_BASE + AON_SYSCTL_O_RESETCTL、AON_SYSCTL_RESETCTL_SYSRESET_BITN)= 1;
//最后,等待上述写入传播
while (1){
//不执行任何操作,只需等待复位(从不返回)
}
}
//
//
//! 如果 OSC 时钟丢失事件被置为有效、则\brief 启用复位。
//!
//! 模拟域中的时钟丢失电路也必须被启用以实现
//! 启用时钟丢失复位
//! \ref OSCClockLossEventEnable()。
//!
//! \note 由于时钟丢失、通常不会调用此函数
//! 复位功能由引导代码(工厂配置)控制
//! 定义是否设置)。
//!
//! \无返回
//!
//! \sa \ref SysCtrlClockLossResetDisable(),\ref OSCClockLossEventEnable()
//
//
__static_inline void
SysCtrlClockLossResetEnable (空)
{
//
//使用位段设置 AON_SYSCTRL 中的时钟丢失使能位
//
HWREGBITW (AON_SYSCTL_BASE + AON_SYSCTL_O_RESETCTL、AON_SYSCTL_RESETCTL_CLK_LOW_EN_BITL)= 1;
}
//
//
//! \brief 由于 OSC 时钟丢失事件而禁用复位。
//!
//! \note 由于时钟丢失、通常不会调用此函数
//! 复位功能由引导代码(工厂配置)控制
//! 定义是否设置)。
//!
//! \无返回
//!
//! \sa \ref SysCtrlClockLossResetEnable()
//
//
__static_inline void
SysCtrlClockLossResetDisable (空)
{
//
//使用位段清除 AON_SYSCTRL 中的时钟丢失使能位
//
HWREGBITW (AON_SYSCTL_BASE + AON_SYSCTL_O_RESETCTL、AON_SYSCTL_RESETCTL_CLK_LOW_EN_BITL)= 0;
}
//
//
//支持 ROM 中的 DriverLib:
//如果可用,重定向到 ROM 中的实现。
//
//
#if !defined (DRIVERLIB_NOROM)&&!defined (DOXYGEN)
#include
#ifdef ROM_SysCtrlPowerEverything
#undef SysCtrlPowerEverything
#define SysCtrlPowerEverything ROM_SysCtrlPowerEverything
#endif
#ifdef ROM_SysCtrlSetRechargeBeforePowerDown
#undef SysCtrlSetRechargeBeforePowerDown
#define SysCtrlSetRechargeBeforePowerDown ROM_SysCtrlSetRechargeBeforePowerDown
#endif
#ifdef ROM_SysCtrlAdjustRechargeAfterPowerDown
#undef SysCtrlAdjustRechargeAfterPowerDown
#define SysCtrlAdjustRechargeAfterPowerDown ROM_SysCtrlAdjustRechargeAfterPowerDown
#endif
#ifdef ROM_SYSCTRL_DCDC_VoltageConditionalControl
#undef SYSCTRL_DCDC_VoltageConditionalControl
#define SYSCTRL_DCDC_VoltageConditionalControl ROM_SYSCTRL_DCDC_VoltageConditionalControl
#endif
#ifdef ROM_SysCtrlResetSourceGet
#undef SysCtrlResetSourceGet
#define SysCtrlResetSourceGet ROM_SysCtrlResetSourceGet
#endif
#endif
//
//
//标记 C++编译器的 C 绑定部分的结尾。
//
//
#ifdef __cplusplus
}
#endif
#endif //__SYSCTRL_H__
//
//
//! 关闭 Doxygen 组。
//! @}
//! @}
//
//
有人能帮我如何使用全新的 TI-RTOS 将 cc1310置于待机模式吗? 谢谢你。