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 + -
显示快捷键?