csl_clkrstaux.h
来自「dsp在音频处理中的运用」· C头文件 代码 · 共 218 行
H
218 行
#ifndef __CSL_CLKRSTAUX_H
#define __CSL_CLKRSTAUX_H
#include <csl_clkrst.h>
#ifdef __cplusplus
extern "C" {
#endif
static inline void CSL_clkrstCkEn(
CSL_ClkrstHandle hClkrst,
CSL_ClkrstHwControlCmd cmd,
Uint16 ckEnable
)
{
int i;
Uint16 _dsp_idlect2 = 0;
Uint16 clkSrcToClkEnLookup[] = { CSL_FMKT(CLKRST_DSP_IDLECT2_EN_TIMCK, ACTIVE),
CSL_FMKT(CLKRST_DSP_IDLECT2_EN_PERCK, ACTIVE),
CSL_FMKT(CLKRST_DSP_IDLECT2_EN_XORPCK, ACTIVE),
CSL_FMKT(CLKRST_DSP_IDLECT2_EN_WDTCK, ACTIVE)
};
for (i = 0; i < 4; i++) {
if (ckEnable & (1 << i)) {
_dsp_idlect2 |= clkSrcToClkEnLookup[i];
}
}
if (CSL_CLKRST_CMD_CLK_ENABLE == cmd) {
hClkrst->regs->DSP_IDLECT2 |= _dsp_idlect2;
} else if (CSL_CLKRST_CMD_CLK_DISABLE == cmd) {
hClkrst->regs->DSP_IDLECT2 &= ~_dsp_idlect2;
}
}
static inline void CSL_clkrstReset(
CSL_ClkrstHandle hClkrst,
CSL_ClkrstHwControlCmd cmd,
Uint16 resetSrc
)
{
Uint16 resetSrcToResetIn[] = { CSL_CLKRST_DSP_RSTCT2_PER_EN_RESET,
CSL_CLKRST_DSP_RSTCT2_WD_PER_EN_RESET };
Uint16 resetSrcToResetOut[] = { CSL_CLKRST_DSP_RSTCT2_PER_EN_ENABLED,
CSL_CLKRST_DSP_RSTCT2_WD_PER_EN_ENABLED};
Uint16 *lookupTbl;
Uint16 _dsp_rstct2;
int i;
if (CSL_CLKRST_CMD_RESET_IN == cmd) {
lookupTbl = resetSrcToResetIn;
} else if (CSL_CLKRST_CMD_RESET_OUT == cmd) {
lookupTbl = resetSrcToResetOut;
} else {
return;
}
_dsp_rstct2 = hClkrst->regs->DSP_RSTCT2;
for (i = 0; i < 2; i++) {
if (resetSrc & (1 << i)) {
CSL_FINSR(_dsp_rstct2, i, i, lookupTbl[i]);
}
};
hClkrst->regs->DSP_RSTCT2 = _dsp_rstct2;
}
static inline void CSL_clkrstGetCkEn(
CSL_ClkrstHandle hClkrst,
Uint16 *ckEnable
)
{
int i;
Uint16 _dsp_idlect2 = 0;
Uint16 clkEnToClkSrcLookup[] = { CSL_FMKT(CLKRST_DSP_IDLECT2_EN_TIMCK, ACTIVE),
CSL_FMKT(CLKRST_DSP_IDLECT2_EN_PERCK, ACTIVE),
CSL_FMKT(CLKRST_DSP_IDLECT2_EN_XORPCK, ACTIVE),
CSL_FMKT(CLKRST_DSP_IDLECT2_EN_WDTCK, ACTIVE)
};
_dsp_idlect2 = hClkrst->regs->DSP_IDLECT2;
*ckEnable = 0;
for (i = 0; i < 4; i++) {
if (_dsp_idlect2 & clkEnToClkSrcLookup[i]) {
*ckEnable |= (1 << i);
}
}
}
static inline void CSL_clkrstGetStatus(
CSL_ClkrstHandle hClkrst,
CSL_ClkrstStatus *status
)
{
Uint16 _dsp_sysst;
_dsp_sysst = hClkrst->regs->DSP_SYSST;
hClkrst->regs->DSP_SYSST = 0;
status->clkScheme = (CSL_ClkrstClkScheme)CSL_FEXT(_dsp_sysst, CLKRST_DSP_SYSST_CLOCK_SELECT);
status->status = _dsp_sysst & 0x3F;
status->mpuStatus = (CSL_ClkrstMpuStatus)CSL_FEXT(_dsp_sysst, CLKRST_DSP_SYSST_IDLE_ARM);
}
static inline void CSL_clkrstGetClkIdleEntry(
CSL_ClkrstHandle hClkrst,
Uint16 *ckIdleEntry
)
{
int i;
Uint16 _dsp_idlect1;
Uint16 clkSrcToIdleEntryLookup[] = { CSL_FMKT(CLKRST_DSP_IDLECT1_IDLTIM_DSP, IDLE_STOP),
CSL_FMKT(CLKRST_DSP_IDLECT1_IDLPER_DSP, IDLE_STOP),
CSL_FMKT(CLKRST_DSP_IDLECT1_IDLXORP_DSP, IDLE_STOP),
CSL_FMKT(CLKRST_DSP_IDLECT1_IDLWDT_DSP, IDLE_STOP)
};
_dsp_idlect1 = hClkrst->regs->DSP_IDLECT1;
*ckIdleEntry = 0;
for (i = 0; i < 4; i++) {
if (_dsp_idlect1 & clkSrcToIdleEntryLookup[i]) {
*ckIdleEntry |= (1 << i);
}
}
}
static inline void CSL_clkrstGetClkSource(
CSL_ClkrstHandle hClkrst,
CSL_ClkrstClkSrc *clkSource
)
{
*clkSource = (CSL_ClkrstClkSrc)
(hClkrst->regs->DSP_CKCTL &
(CSL_CLKRST_DSP_CKCTL_TIMXO_MASK));
}
static inline void CSL_clkrstGetClkDiv(
CSL_ClkrstHandle hClkrst,
CSL_ClkrstClkDiv *clkDivPtr
)
{
clkDivPtr->perDiv = CSL_FEXT(hClkrst->regs->DSP_CKCTL, CLKRST_DSP_CKCTL_PERDIV);
}
static inline void CSL_clkrstClkIdleEntry(
CSL_ClkrstHandle hClkrst,
Uint16 ckIdleEntry
)
{
int i;
Uint16 _dsp_idlect1 = 0;
Uint16 clkSrcToIdleEntryLookup[] = { CSL_FMKT(CLKRST_DSP_IDLECT1_IDLTIM_DSP, IDLE_STOP),
CSL_FMKT(CLKRST_DSP_IDLECT1_IDLPER_DSP, IDLE_STOP),
CSL_FMKT(CLKRST_DSP_IDLECT1_IDLXORP_DSP, IDLE_STOP),
CSL_FMKT(CLKRST_DSP_IDLECT1_IDLWDT_DSP, IDLE_STOP)
};
for (i = 0; i < 4; i++) {
if (ckIdleEntry & (1 << i)) {
_dsp_idlect1 |= clkSrcToIdleEntryLookup[i];
}
}
hClkrst->regs->DSP_IDLECT1 = _dsp_idlect1;
CSL_clkrstCkEn(hClkrst, CSL_CLKRST_CMD_CLK_ENABLE ,ckIdleEntry );
}
static inline void CSL_clkrstClkSource(
CSL_ClkrstHandle hClkrst,
CSL_ClkrstClkSrc clkSource
)
{
CSL_FINS(hClkrst->regs->DSP_CKCTL, CLKRST_DSP_CKCTL_TIMXO, CSL_FEXT(clkSource, CLKRST_DSP_CKCTL_TIMXO));
}
static inline void CSL_clkrstClkDiv(
CSL_ClkrstHandle hClkrst,
CSL_ClkrstClkDiv *clkDivPtr
)
{
CSL_FINS(hClkrst->regs->DSP_CKCTL, CLKRST_DSP_CKCTL_PERDIV, clkDivPtr->perDiv);
}
#ifdef __cplusplus
}
#endif
#endif
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?