📄 decoder.h
字号:
* Quadrature Decoder init
*
***********************************************************************/
#define ioctlDEC_INIT(pDecBase,param) decoderInit((arch_sDecoder*)pDecBase)
void decoderInit(arch_sDecoder *pDecBase); // function prototype, implemented in decoder.c
/***********************************************************************
*
* Decoder Control Register
*
***********************************************************************/
#define ioctlDEC_HOME_INT_REQUEST_CLEAR(pDecBase,param) \
periphBitSet(DEC_HIRQ, (UWord16 *)(&((arch_sDecoder*)pDecBase)->ControlReg) )
#define ioctlDEC_HOME_INT(pDecBase,param) \
if (param) {periphBitSet(DEC_HIE, (UWord16 *)(&((arch_sDecoder*)pDecBase)->ControlReg) );} \
else {periphBitClear(DEC_HIE, (UWord16 *)(&((arch_sDecoder*)pDecBase)->ControlReg) );}
#define ioctlDEC_HOME_TRIGGERED_INIT(pDecBase,param) \
if (param) {periphBitSet(DEC_HIP, (UWord16 *)(&((arch_sDecoder*)pDecBase)->ControlReg) );} \
else {periphBitClear(DEC_HIP, (UWord16 *)(&((arch_sDecoder*)pDecBase)->ControlReg) );}
#define ioctlDEC_HOME_EDGE(pDecBase,param) \
if (param) {periphBitSet(DEC_HNE, (UWord16 *)(&((arch_sDecoder*)pDecBase)->ControlReg) );} \
else {periphBitClear(DEC_HNE, (UWord16 *)(&((arch_sDecoder*)pDecBase)->ControlReg) );}
#define ioctlDEC_SOFTWARE_TRIGGERED_INIT(pDecBase,param) \
periphBitSet(DEC_SWIP, (UWord16 *)(&((arch_sDecoder*)pDecBase)->ControlReg) )
#define ioctlDEC_DIRECTION_COUNTING_ENABLE(pDecBase,param) \
if (param) {periphBitSet(DEC_REV, (UWord16 *)(&((arch_sDecoder*)pDecBase)->ControlReg) );} \
else {periphBitClear(DEC_REV, (UWord16 *)(&((arch_sDecoder*)pDecBase)->ControlReg) );}
#define ioctlDEC_SINGLE_PHASE_COUNT(pDecBase,param) \
if (param) {periphBitSet(DEC_PH1, (UWord16 *)(&((arch_sDecoder*)pDecBase)->ControlReg) );} \
else {periphBitClear(DEC_PH1, (UWord16 *)(&((arch_sDecoder*)pDecBase)->ControlReg) );}
#define ioctlDEC_INDEX_PULSE_INT_REQUEST_CLEAR(pDecBase,param) \
periphBitSet(DEC_XIRQ, (UWord16 *)(&((arch_sDecoder*)pDecBase)->ControlReg) )
#define ioctlDEC_INDEX_PULSE_INT(pDecBase,param) \
if (param) {periphBitSet(DEC_XIE, (UWord16 *)(&((arch_sDecoder*)pDecBase)->ControlReg) );} \
else {periphBitClear(DEC_XIE, (UWord16 *)(&((arch_sDecoder*)pDecBase)->ControlReg) );}
#define ioctlDEC_INDEX_TRIGGERED_INIT(pDecBase,param) \
if (param) {periphBitSet(DEC_XIP, (UWord16 *)(&((arch_sDecoder*)pDecBase)->ControlReg) );} \
else {periphBitClear(DEC_XIP, (UWord16 *)(&((arch_sDecoder*)pDecBase)->ControlReg) );}
#define ioctlDEC_INDEX_EDGE(pDecBase,param) \
if (param) {periphBitSet(DEC_XNE, (UWord16 *)(&((arch_sDecoder*)pDecBase)->ControlReg) );} \
else {periphBitClear(DEC_XNE, (UWord16 *)(&((arch_sDecoder*)pDecBase)->ControlReg) );}
#define ioctlDEC_WATCHDOG_INT_REQUEST_CLEAR(pDecBase,param) \
periphBitSet(DEC_DIRQ, (UWord16 *)(&((arch_sDecoder*)pDecBase)->ControlReg) )
#define ioctlDEC_WATCHDOG_INT(pDecBase,param) \
if (param) {periphBitSet(DEC_DIE, (UWord16 *)(&((arch_sDecoder*)pDecBase)->ControlReg) );} \
else {periphBitClear(DEC_DIE, (UWord16 *)(&((arch_sDecoder*)pDecBase)->ControlReg) );}
#define ioctlDEC_WATCHDOG(pDecBase,param) \
if (param) {periphBitSet(DEC_WDE, (UWord16 *)(&((arch_sDecoder*)pDecBase)->ControlReg) );} \
else {periphBitClear(DEC_WDE, (UWord16 *)(&((arch_sDecoder*)pDecBase)->ControlReg) );}
#define ioctlDEC_SWITCH_MATRIX(pDecBase,param) \
{ periphBitClear(~((((UWord16)(param))) | ((DEC_MAX_INT) & (~(DEC_MODE_2 | DEC_MODE_1 | DEC_MODE_0)))), (UWord16 *)(&((arch_sDecoder*)pDecBase)->ControlReg) ); \
periphBitSet(((UWord16)(param)), (UWord16 *)(&((arch_sDecoder*)pDecBase)->ControlReg) ); }
#define ioctlDEC_READ_CONTROL_REG(pDecBase,param) \
periphMemRead( (UWord16 *)(&((arch_sDecoder*)pDecBase)->ControlReg) )
/***********************************************************************
*
* Filter Interval Register
*
***********************************************************************/
#define ioctlDEC_WRITE_FILTER(pDecBase,param) \
periphMemWrite(((UWord16)(param)), (UWord16 *)(&((arch_sDecoder*)pDecBase)->FilterIntervalReg) )
/***********************************************************************
*
* Watchdog Time-out Register
*
***********************************************************************/
#define ioctlDEC_WRITE_WATCHDOG_TIMEOUT(pDecBase,param) \
periphMemWrite(((UWord16)(param)), (UWord16 *)(&((arch_sDecoder*)pDecBase)->WatchdogTimeoutReg) )
/***********************************************************************
*
* Position Diffrence Register
*
***********************************************************************/
#define ioctlDEC_READ_POSITION_DIFFERENCE(pDecBase,param) \
periphMemRead( (UWord16 *)(&((arch_sDecoder*)pDecBase)->PositionDifferenceReg) )
/***********************************************************************
*
* Revolution Counter Register
*
***********************************************************************/
#define ioctlDEC_READ_REVOLUTION(pDecBase,param) \
periphMemRead( (UWord16 *)(&((arch_sDecoder*)pDecBase)->RevolutionCounterReg) )
#define ioctlDEC_WRITE_REVOLUTION(pDecBase,param) \
periphMemWrite(((UWord16)(param)), (UWord16 *)(&((arch_sDecoder*)pDecBase)->RevolutionCounterReg) )
/***********************************************************************
*
* Upper and Lower Position Register
*
***********************************************************************/
#define ioctlDEC_READ_POSITION(pDecBase,param) \
{((decoder_uReg32bit*)param) -> RegParts.LSBpart = periphMemRead( (UWord16 *)(&((arch_sDecoder*)pDecBase)->LowerPositionCounterReg) ); \
((decoder_uReg32bit*)param) -> RegParts.MSBpart = periphMemRead( (UWord16 *)(&((arch_sDecoder*)pDecBase)->UpperPositionHoldReg) ); }
/***********************************************************************
*
* Upper and Lower Initialization Register
*
***********************************************************************/
#define ioctlDEC_WRITE_POSITION(pDecBase,param) \
{ decoder_uReg32bit tmp; \
tmp.Reg32bit = param; \
periphMemWrite(tmp.RegParts.LSBpart , (UWord16 *)(&((arch_sDecoder*)pDecBase)->LowerInitializationReg) ); \
periphMemWrite(tmp.RegParts.MSBpart , (UWord16 *)(&((arch_sDecoder*)pDecBase)->UpperInitializationReg) ); \
periphBitSet(DEC_SWIP, (UWord16 *)(&((arch_sDecoder*)pDecBase)->ControlReg )); }
#define ioctlDEC_WRITE_INIT_STATE(pDecBase,param) \
{ decoder_uReg32bit tmp; \
tmp.Reg32bit = param; \
periphMemWrite(tmp.RegParts.LSBpart , (UWord16 *)(&((arch_sDecoder*)pDecBase)->LowerInitializationReg) ); \
periphMemWrite(tmp.RegParts.MSBpart , (UWord16 *)(&((arch_sDecoder*)pDecBase)->UpperInitializationReg) ); }
/***********************************************************************
*
* Input Monitor Register
*
***********************************************************************/
#define ioctlDEC_READ_MONITOR_REG(pDecBase,param) \
periphMemRead( (UWord16 *)(&((arch_sDecoder*)pDecBase)->InputMonitorReg) )
#define ioctlDEC_GET_RAW_ENCSIGNALS(pDecBase,param) \
((periphMemRead( (UWord16 *)(&((arch_sDecoder*)pDecBase)->InputMonitorReg) ) & 0x000e) >> 1)
#define ioctlDEC_GET_FILTERED_ENCSIGNALS(pDecBase,param) \
((periphMemRead( (UWord16 *)(&((arch_sDecoder*)pDecBase)->InputMonitorReg) ) & 0x00e0) >> 5)
/***********************************************************************
*
* Decoder Hold Registers
*
***********************************************************************/
#define ioctlDEC_READ_HOLD_DATA_REGS(pDecBase,param) \
{ ((decoder_sState*)param)->PositionDifferenceHoldReg = periphMemRead((UWord16 *)(&((arch_sDecoder*)pDecBase)->PositionDifferenceReg) ); \
((decoder_sState*)param)->RevolutionHoldReg = periphMemRead((UWord16 *)(&((arch_sDecoder*)pDecBase)->RevolutionHoldReg) ); \
((decoder_sState*)param)->PositionHoldReg.RegParts.LSBpart = periphMemRead((UWord16 *)(&((arch_sDecoder*)pDecBase)->LowerPositionHoldReg) ); \
((decoder_sState*)param)->PositionHoldReg.RegParts.MSBpart = periphMemRead((UWord16 *)(&((arch_sDecoder*)pDecBase)->UpperPositionHoldReg) ); }
/***************************************************************************
the API for the Quadrature Decoder module commands implemented as routines
****************************************************************************/
#define ioctlDEC_CALCULATE_SCALE_COEF(pDecBase,param) decoderCoefCalc( (decoder_sEncScale *)param )
#define ioctlDEC_GET_SCALED_POSITION(pDecBase,param) decoderGetScaledPosition((arch_sDecoder*)pDecBase, (decoder_sEncScale *)param)
#define ioctlDEC_GET_SCALED_POSITION_DIFFERENCE(pDecBase,param) decoderGetScaledPositionDifference((arch_sDecoder*)pDecBase, (decoder_sEncScale *)param)
// function prototypes, implemented in decoder.c
void decoderCoefCalc( decoder_sEncScale *pEncScale );
Word32 decoderGetScaledPosition(arch_sDecoder *pDecBase, decoder_sEncScale *pEncScale);
Word16 decoderGetScaledPositionDifference(arch_sDecoder *pDecBase, decoder_sEncScale *pEncScale);
/**********************************************************************
*
* Include of device specific Quadrature Decoder commands and defines
*
***********************************************************************/
#include "decodertarget.h" /* device specific defines */
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -