⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 decoder.h

📁 MC56F802BLDC 可以使用的算法 就是电机启动有点慢
💻 H
📖 第 1 页 / 共 2 页
字号:
* 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 + -