MSP432库函数学习笔记-CS

CS库为clock system即系统时钟配置

此函数库需要系统时钟的基础,可参看我之前的博客MSP432-系统时钟简介

目录

 

时钟初始化设置

  时钟请求模块

获取各时钟源频率

DCO数控时钟源频率设置

 CS故障模块

CS中断模块


时钟初始化设置

void CS_setExternalClockSourceFrequency(uint32_t lfxt_XT_CLK_frequency,
                                        uint32_t hfxt_XT_CLK_frequency);
//设置外部晶振LFXT和HFXT的频率值

如果不使用外部时钟来源则不管这个,时钟故障机制会选择其他时钟来源


void CS_initClockSignal(uint32_t selectedClockSignal,uint32_t clockSource, 
                        uint32_t clockSourceDivider);
//初始化时钟信号

//! \param selectedClockSignal Clock signal to initialize.
//!        选择一个时钟信号初始化
//!           - \b CS_ACLK,
//!           - \b CS_MCLK,
//!           - \b CS_HSMCLK
//!           - \b CS_SMCLK
//!           - \b CS_BCLK  [clockSourceDivider is ignored for this parameter]



//! \param clockSource  Clock source for the selectedClockSignal signal.
//!        选择时钟信号的时钟源
//!            - \b CS_LFXTCLK_SELECT,
//!            - \b CS_HFXTCLK_SELECT,
//!            - \b CS_VLOCLK_SELECT,     [Not available for BCLK]
//!            - \b CS_DCOCLK_SELECT,     [Not available for ACLK, BCLK]
//!            - \b CS_REFOCLK_SELECT,
//!            - \b CS_MODOSC_SELECT      [Not available for ACLK, BCLK]


//! \param clockSourceDivider - selected the clock divider to calculate
//!         clock signal from clock source. This parameter is ignored when
//!         setting BLCK. Valid values are:
//!        选择分频器,时钟信号频率=时钟源频率/x
//!           - \b CS_CLOCK_DIVIDER_1,
//!           - \b CS_CLOCK_DIVIDER_2,
//!           - \b CS_CLOCK_DIVIDER_4,
//!           - \b CS_CLOCK_DIVIDER_8,
//!           - \b CS_CLOCK_DIVIDER_16,
//!           - \b CS_CLOCK_DIVIDER_32,
//!           - \b CS_CLOCK_DIVIDER_64,
//!           - \b CS_CLOCK_DIVIDER_128

要注意这个函数可能导致阻塞,因为此函数会等待CSSTAT寄存器(时钟状态寄存器)被设置为正确的值。

还要注意如果HSMCLK和SMCLK共享相同的时钟源时,当改变HSMCLK的时钟信号,那么SMCLK的时钟信号也会被改变。

bool CS_startHFXT(bool bypassMode);
//检测HFXT外接晶振状态,不带超时

bool CS_startHFXTWithTimeout(bool bypassMode, uint32_t timeout);
//检测HFXT外接晶振状态,带有超时

HFXT的外接晶振支持0~48MHz的频率,具体取决于选择的驱动强度。

在调用此函数前需要设置外部晶振频率

有关合适的驱动器设置可参阅特定的元件datasheet

不带超时函数会一直循环直到所有晶振故障标志被清除,可能造成阻塞,带超时则不会阻塞

如果bypassMode被设置为True,则此函数若在短时间内无法排除故障时会绕过故障检测机制,直接从旁路模式打开晶振,直接使用,但一般建议设置为false

正确启动则返回true,未能正确启动则返回false

bool CS_startLFXT(uint32_t xtDrive);
//检测LFXT启动状态

bool CS_startLFXTWithTimeout(uint32_t xtDrive, uint32_t timeout);
//带超时的LFXT启动状态


//! \param xtDrive is the target drive strength for the LFXT crystal
//!                  oscillator.
//!      Valid values are:
//!         - \b CS_LFXT_DRIVE0,
//!         - \b CS_LFXT_DRIVE1,
//!         - \b CS_LFXT_DRIVE2,
//!         - \b CS_LFXT_DRIVE3,  [Default Value]
//!         - \b CS_LFXT_BYPASS

HFXT的外接晶振支持0~500KHz的频率,具体取决于选择的驱动强度。

在调用此函数前需要设置外部晶振频率

有关合适的驱动器设置可参阅特定的元件datasheet

xtDriver是LFXT晶震的目标驱动强度。

不带超时函数会一直循环直到所有晶振故障标志被清除,可能造成阻塞,带超时则不会阻塞

如果bypassMode被设置为True,则此函数若在短时间内无法排除故障时会绕过故障检测机制,直接从旁路模式打开晶振,直接使用,但一般建议设置为false

正确启动则返回true,未能正确启动则返回false

void CS_setReferenceOscillatorFrequency(uint8_t referenceFrequency);
//选择REFO时钟源频率

//! \param referenceFrequency selects between the valid frequencies:
//!        - \b CS_REFO_32KHZ,
//!        - \b CS_REFO_128KHZ,

可选频率为32768Hz和128KHz。

  时钟请求模块

void CS_enableClockRequest(uint32_t selectClock);
//使能时钟请求模块

void CS_disableClockRequest(uint32_t selectClock);
//禁用时钟请求模块

//! \param selectClock selects specific request disables. Valid values are
//!        are a logical OR of the following values:
//!        - \b CS_ACLK,
//!        - \b CS_HSMCLK,
//!        - \b CS_SMCLK,
//!        - \b CS_MCLK

时钟请求模块可减小不需要特定时钟系统模块的动态功率

获取各时钟源频率

uint32_t CS_getACLK(void);
uint32_t CS_getSMCLK(void);
uint32_t CS_getMCLK(void);
uint32_t CS_getBCLK(void);
uint32_t CS_getHSMCLK(void);
uint32_t CS_getDCOFrequency(void);
//获取各时钟源频率
//单位为Hz

如果时钟来源为HFXT或LFXT则需要先调用CS_setExternalClockSourceFrequency函数

DCO数控时钟源频率设置

void CS_setDCOCenteredFrequency(uint32_t dcoFreq);
//设置DCO的中心频率

//! \param dcoFreq selects between the valid frequencies:
//!        - \b CS_DCO_FREQUENCY_1_5, [1MHz to 2MHz]
//!        - \b CS_DCO_FREQUENCY_3,   [2MHz to 4MHz]
//!        - \b CS_DCO_FREQUENCY_6,   [4MHz to 8MHz]
//!        - \b CS_DCO_FREQUENCY_12,  [8MHz to 16MHz]
//!        - \b CS_DCO_FREQUENCY_24,  [16MHz to 32MHz]
//!        - \b CS_DCO_FREQUENCY_48   [32MHz to 64MHz]
void CS_tuneDCOFrequency(int16_t tuneParameter);
//精调DCO频率

每个频率代表一个频率范围的中间值,可通过CS_tuneDCOFrequency函数精调。

void CS_setDCOFrequency(uint32_t dcoFrequency);
//自动将DCO调谐到给定的频率

最大可设置为64MHz

void CS_enableDCOExternalResistor(void);
//使用外部电阻

void CS_disableDCOExternalResistor(void);
//不使用外部电阻
void CS_setDCOExternalResistorCalibration(uint_fast8_t uiCalData,
                                          uint_fast8_t freqRange);
//设置DCO校准值

 一般使用校准填充建议的外部电阻器的数据(见设备数据表)。

 CS故障模块

void CS_enableFaultCounter(uint_fast8_t counterSelect);
//使能CS模块故障计数器

void CS_disableFaultCounter(uint_fast8_t counterSelect);
//禁用CS模块故障计数器

void CS_resetFaultCounter(uint_fast8_t counterSelect);
//复位CS模块故障计数器

//! \param counterSelect selects the fault counter to enable
//!        - \b CS_HFXT_FAULT_COUNTER
//!        - \b CS_LFXT_FAULT_COUNTER


void CS_startFaultCounter(uint_fast8_t counterSelect,uint_fast8_t countValue);
//设置故障计数器的起始值

//! \param counterSelect selects the fault counter to reset
//!        - \b CS_HFXT_FAULT_COUNTER
//!        - \b CS_LFXT_FAULT_COUNTER
//! \param countValue selects the cycles to set the fault counter to
//!        - \b CS_FAULT_COUNTER_4096_CYCLES
//!        - \b CS_FAULT_COUNTER_8192_CYCLES
//!        - \b CS_FAULT_COUNTER_16384_CYCLES
//!        - \b CS_FAULT_COUNTER_32768_CYCLES

CS中断模块

void CS_enableInterrupt(uint32_t flags);
//使能单个时钟控制中断源

void CS_disableInterrupt(uint32_t flags);
//禁用单个时钟控制中断源

uint32_t CS_getEnabledInterruptStatus(void);
//获取启动的中断的状态

uint32_t CS_getInterruptStatus(void);
//获取中断状态

//! \param flags is a bit mask of the interrupt sources to be enabled.  Must
//! be a logical OR of:
//!                     - \b CS_LFXT_FAULT,
//!                     - \b CS_HFXT_FAULT,
//!                     - \b CS_DCOMIN_FAULT,
//!                     - \b CS_DCOMAX_FAULT,
//!                     - \b CS_DCO_OPEN_FAULT,
//!                     - \b CS_STARTCOUNT_LFXT_FAULT,
//!                     - \b CS_STARTCOUNT_HFXT_FAULT,



void CS_clearInterruptFlag(uint32_t flags);
//清除中断标志

//! \param flags is a bit mask of the interrupt sources to be cleared.  Must
//! be a logical OR of:
//!                     - \b CS_LFXT_FAULT,
//!                     - \b CS_HFXT_FAULT,
//!                     - \b CS_DCO_OPEN_FAULT,
//!                     - \b CS_STARTCOUNT_LFXT_FAULT,
//!                     - \b CS_STARTCOUNT_HFXT_FAULT,

中断源根据使用的模块不同而变化,可以参考数据表查看可用中断源

void CS_registerInterrupt(void (*intHandler)(void));
//注册中断处理函数

void CS_unregisterInterrupt(void);
//注销中断处理函数
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
引用\[2\]:MSP430官方的函数库可以帮助开发者进行开发,使用CCS作为开发工具。主要步骤包括下载并安装CCS、下载函数库、部署函数库。首先,下载并安装CCS,这是德州仪器公司(Texas Instrument,TI)提供的代码开发和调试套件。安装完成后选择一个工作空间,即代码存放的位置。然后,新建CCS项目,选择芯片型号、填写工程名称并选择main模板。这样就创建了一个默认的工程文件。接下来,下载函数库,可以从官网下载,并可以下载相应的指南。解压后可以找到MSP430F5529的函数库文件,将其拷贝到库目录下备用。最后,部署函数库,右击工程文件添加一个新文件并命名为driverlib,然后将下载的函数库添加到其中。\[2\] 问题: 你能给我提供一个关于MSP430库函数的教程吗? 回答: 关于MSP430库函数的教程,你可以参考TI - MCU - MSP430使用指南14中的I2C通信(eUSCI)部分。这个教程详细介绍了I2C协议,并通过16张图来解释。此外,你还可以参考一篇博客中的驱动OLED的代码,其中讨论了使用MSP430的GPIO引脚作为SDA和SCL的问题。根据博主的猜测,MSP430的所有引脚都可以配置成I2C的SDA和SCL,但具体的资源数量需要进一步确认。此外,P1到P2引脚还具有中断功能。总结起来,你可以通过这些资料来学习MSP430库函数的使用。\[2\]\[3\] #### 引用[.reference_title] - *1* *3* [【MSP430F5529基于库函数学习】电赛速学及小车实战](https://blog.csdn.net/weixin_56760882/article/details/125841604)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [MSP430F5529基于CCS库函数开发——软件安装与库函数配置](https://blog.csdn.net/weixin_44098974/article/details/125686172)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值