MSP432库函数学习笔记-CS

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

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

时钟初始化设置

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.
//!        选择一个时钟信号初始化
//!           -  CS_ACLK,
//!           -  CS_MCLK,
//!           -  CS_HSMCLK
//!           -  CS_SMCLK
//!           -  CS_BCLK  [clockSourceDivider is ignored for this parameter]



//! param clockSource  Clock source for the selectedClockSignal signal.
//!        选择时钟信号的时钟源
//!            -  CS_LFXTCLK_SELECT,
//!            -  CS_HFXTCLK_SELECT,
//!            -  CS_VLOCLK_SELECT,     [Not available for BCLK]
//!            -  CS_DCOCLK_SELECT,     [Not available for ACLK, BCLK]
//!            -  CS_REFOCLK_SELECT,
//!            -  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
//!           -  CS_CLOCK_DIVIDER_1,
//!           -  CS_CLOCK_DIVIDER_2,
//!           -  CS_CLOCK_DIVIDER_4,
//!           -  CS_CLOCK_DIVIDER_8,
//!           -  CS_CLOCK_DIVIDER_16,
//!           -  CS_CLOCK_DIVIDER_32,
//!           -  CS_CLOCK_DIVIDER_64,
//!           -  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:
//!         -  CS_LFXT_DRIVE0,
//!         -  CS_LFXT_DRIVE1,
//!         -  CS_LFXT_DRIVE2,
//!         -  CS_LFXT_DRIVE3,  [Default Value]
//!         -  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:
//!        -  CS_REFO_32KHZ,
//!        -  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:
//!        -  CS_ACLK,
//!        -  CS_HSMCLK,
//!        -  CS_SMCLK,
//!        -  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

DCO数控时钟源频率设置

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

//! param dcoFreq selects between the valid frequencies:
//!        -  CS_DCO_FREQUENCY_1_5, [1MHz to 2MHz]
//!        -  CS_DCO_FREQUENCY_3,   [2MHz to 4MHz]
//!        -  CS_DCO_FREQUENCY_6,   [4MHz to 8MHz]
//!        -  CS_DCO_FREQUENCY_12,  [8MHz to 16MHz]
//!        -  CS_DCO_FREQUENCY_24,  [16MHz to 32MHz]
//!        -  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
//!        -  CS_HFXT_FAULT_COUNTER
//!        -  CS_LFXT_FAULT_COUNTER


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

//! param counterSelect selects the fault counter to reset
//!        -  CS_HFXT_FAULT_COUNTER
//!        -  CS_LFXT_FAULT_COUNTER
//! param countValue selects the cycles to set the fault counter to
//!        -  CS_FAULT_COUNTER_4096_CYCLES
//!        -  CS_FAULT_COUNTER_8192_CYCLES
//!        -  CS_FAULT_COUNTER_16384_CYCLES
//!        -  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:
//!                     -  CS_LFXT_FAULT,
//!                     -  CS_HFXT_FAULT,
//!                     -  CS_DCOMIN_FAULT,
//!                     -  CS_DCOMAX_FAULT,
//!                     -  CS_DCO_OPEN_FAULT,
//!                     -  CS_STARTCOUNT_LFXT_FAULT,
//!                     -  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:
//!                     -  CS_LFXT_FAULT,
//!                     -  CS_HFXT_FAULT,
//!                     -  CS_DCO_OPEN_FAULT,
//!                     -  CS_STARTCOUNT_LFXT_FAULT,
//!                     -  CS_STARTCOUNT_HFXT_FAULT,

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

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

void CS_unregisterInterrupt(void);
//注销中断处理函数
经验分享 程序员 微信小程序 职场和发展