RTEMS 6.1-rc2
Loading...
Searching...
No Matches
Data Structures | Macros | Typedefs | Enumerations | Functions
qep.h File Reference

eQEP (enhanced Quadrature Encoder Pulse) support API. More...

Go to the source code of this file.

Data Structures

struct  bbb_eqep
 

Macros

#define AM335X_EQEP_REGS   (0x00000180)
 
#define AM335X_EQEP_0_REGS   (AM335X_PWMSS0_MMAP_ADDR + AM335X_EQEP_REGS)
 
#define AM335X_EQEP_1_REGS   (AM335X_PWMSS1_MMAP_ADDR + AM335X_EQEP_REGS)
 
#define AM335X_EQEP_2_REGS   (AM335X_PWMSS2_MMAP_ADDR + AM335X_EQEP_REGS)
 
#define AM335x_EQEP_QPOSCNT   0x0 /* eQEP Position Counter */
 
#define AM335x_EQEP_QPOSINIT   0x4 /* eQEP Position Counter Initialization */
 
#define AM335x_EQEP_QPOSMAX   0x8 /* eQEP Maximum Position Count */
 
#define AM335x_EQEP_QPOSCMP   0xC /* eQEP Position-Compare */
 
#define AM335x_EQEP_QPOSILAT   0x10 /* eQEP Index Position Latch */
 
#define AM335x_EQEP_QPOSSLAT   0x14 /* eQEP Strobe Position Latch */
 
#define AM335x_EQEP_QPOSLAT   0x18 /* eQEP Position Counter Latch */
 
#define AM335x_EQEP_QUTMR   0x1C /* eQEP Unit Timer */
 
#define AM335x_EQEP_QUPRD   0x20 /* eQEP Unit Period */
 
#define AM335x_EQEP_QWDTMR   0x24 /* eQEP Watchdog Timer */
 
#define AM335x_EQEP_QWDPRD   0x26 /* eQEP Watchdog Period */
 
#define AM335x_EQEP_QDECCTL   0x28 /* eQEP Decoder Control */
 
#define AM335x_EQEP_QEPCTL   0x2A /* eQEP Control */
 
#define AM335x_EQEP_QCAPCTL   0x2C /* eQEP Capture Control */
 
#define AM335x_EQEP_QPOSCTL   0x2E /* eQEP Position-Compare Control */
 
#define AM335x_EQEP_QEINT   0x30 /* eQEP Interrupt Enable */
 
#define AM335x_EQEP_QFLG   0x32 /* eQEP Interrupt Flag */
 
#define AM335x_EQEP_QCLR   0x34 /* eQEP Interrupt Clear */
 
#define AM335x_EQEP_QFRC   0x36 /* eQEP Interrupt Force */
 
#define AM335x_EQEP_QEPSTS   0x38 /* eQEP Status */
 
#define AM335x_EQEP_QCTMR   0x3A /* eQEP Capture Timer */
 
#define AM335x_EQEP_QCPRD   0x3C /* eQEP Capture Period */
 
#define AM335x_EQEP_QCTMRLAT   0x3E /* eQEP Capture Timer Latch */
 
#define AM335x_EQEP_QCPRDLAT   0x40 /* eQEP Capture Period Latch */
 
#define AM335x_EQEP_REVID   0x5C /* eQEP Revision ID */
 
#define AM335x_EQEP_QEPCTL_UTE   (1 << 1)
 
#define AM335x_EQEP_QEPCTL_QCLM   (1 << 2)
 
#define AM335x_EQEP_QEPCTL_PHEN   (1 << 3)
 
#define AM335x_EQEP_QEPCTL_IEL   (1 << 4)
 
#define AM335x_EQEP_QEPCTL_SWI   (1 << 7)
 
#define AM335x_EQEP_QEPCTL_PCRM   (3 << 12)
 
#define AM335x_EQEP_QDECCTL_QSRC   (3 << 14)
 
#define AM335x_EQEP_QDECCTL_XCR   (1 << 11)
 
#define AM335x_EQEP_QDECCTL_SWAP   (1 << 10)
 
#define AM335x_EQEP_QDECCTL_IGATE   (1 << 9)
 
#define AM335x_EQEP_QDECCTL_QAP   (1 << 8)
 
#define AM335x_EQEP_QDECCTL_QBP   (1 << 7)
 
#define AM335x_EQEP_QDECCTL_QIP   (1 << 6)
 
#define AM335x_EQEP_QDECCTL_QSP   (1 << 5)
 
#define AM335x_EQEP_CLK_EN   (1 << 4)
 
#define AM335x_EQEP_QEINT_UTO   (1 << 11)
 
#define AM335x_EQEP_QFLG_UTO   (1 << 11)
 
#define AM335x_EQEP_QFLG_MASK   0x0FFF
 
#define BBB_P8_11_MUX_QEP   4
 
#define BBB_P8_12_MUX_QEP   4
 
#define BBB_P8_15_MUX_QEP   4
 
#define BBB_P8_16_MUX_QEP   4
 
#define BBB_P8_31_MUX_QEP   2
 
#define BBB_P8_32_MUX_QEP   2
 
#define BBB_P8_33_MUX_QEP   2
 
#define BBB_P8_35_MUX_QEP   2
 
#define BBB_P8_39_MUX_QEP   3
 
#define BBB_P8_40_MUX_QEP   3
 
#define BBB_P8_41_MUX_QEP   3
 
#define BBB_P8_42_MUX_QEP   3
 
#define BBB_P9_25_MUX_QEP   1
 
#define BBB_P9_27_MUX_QEP   1
 
#define BBB_P9_41_MUX_QEP   1
 
#define BBB_P9_42_MUX_QEP   1
 
#define NANO_SEC_PER_SEC   1000000000
 
#define SYSCLKOUT   100000000
 

Typedefs

typedef void(* bbb_eqep_timer_callback) (BBB_PWMSS, uint32_t position, void *user)
 This function definition is used to declare a callback function that will be called by the interrupt handler of the QEP driver. In order for the interrupt event to trigger the driver must be configured in RELATIVE mode (using the beagle_qep_get_quadrature_mode function), and the unit timer must have been configured (using the beagle_eqep_set_timer_period function).
 

Enumerations

enum  BBB_QEP_COUNT_MODE { QUADRATURE_COUNT = 0 , DIRECTION_COUNT , UP_COUNT , DOWN_COUNT }
 The set of possible eQEP Position Counter Input Modes. More...
 
enum  BBB_QEP_QUADRATURE_MODE { ABSOLUTE = 0 , RELATIVE }
 The set of possible modes for Quadrature decode. More...
 
enum  bbb_qep_pin {
  BBB_P8_11_2B_IN , BBB_P8_12_2A_IN , BBB_P8_15_2_STROBE , BBB_P8_16_2_IDX ,
  BBB_P8_31_1_IDX , BBB_P8_32_1_STROBE , BBB_P8_33_1B_IN , BBB_P8_35_1A_IN ,
  BBB_P8_39_2_IDX , BBB_P8_40_2_STROBE , BBB_P8_41_2A_IN , BBB_P8_42_2B_IN ,
  BBB_P9_25_0_STROBE , BBB_P9_27_0B_IN , BBB_P9_41_0_IDX , BBB_P9_42_0A_IN
}
 The set of possible eQEP input pins. More...
 

Functions

rtems_status_code beagle_qep_init (BBB_PWMSS pwmss_id)
 Initialises the eQEP module of the specified PWMSS unit. This configures the clocks, sets up the interrupt handler and unit timer, The module is configured in Quadrature decode mode using absolute position by default.
 
rtems_status_code beagle_qep_enable (BBB_PWMSS pwmss_id)
 Enables the eQEP module of the specified PWMSS unit.
 
rtems_status_code beagle_qep_disable (BBB_PWMSS pwmss_id)
 Disables the eQEP module of the specified PWMSS unit.
 
rtems_status_code beagle_qep_pinmux_setup (bbb_qep_pin pin_no, BBB_PWMSS pwmss_id, bool pullup_enable)
 Configures a given pin for use with the eQEP function of the supplied PWMSS module.
 
int32_t beagle_qep_get_position (BBB_PWMSS pwmss_id)
 Returns the current position value of the eQEP function for the specified PWMSS module.
 
rtems_status_code beagle_qep_set_position (BBB_PWMSS pwmss_id, uint32_t position)
 Sets the initial position value of the eQEP function for the specified PWMSS module.
 
rtems_status_code beagle_qep_set_count_mode (BBB_PWMSS pwmss_id, BBB_QEP_COUNT_MODE mode)
 Sets the count mode for the eQEP module.
 
BBB_QEP_COUNT_MODE beagle_qep_get_count_mode (BBB_PWMSS pwmss_id)
 Gets the currently configured count mode for the eQEP module.
 
BBB_QEP_QUADRATURE_MODE beagle_qep_get_quadrature_mode (BBB_PWMSS pwmss_id)
 Returns the currently configured quadrature mode - either absolute, or relative.
 
rtems_status_code beagle_qep_set_quadrature_mode (BBB_PWMSS pwmss_id, BBB_QEP_QUADRATURE_MODE mode)
 Sets the quadrature mode to either absolute or relative.
 
uint32_t beagle_eqep_get_timer_period (BBB_PWMSS pwmss_id)
 Returns the the currently configured unit timer period.
 
rtems_status_code beagle_eqep_set_timer_period (BBB_PWMSS pwmss_id, uint64_t period, bbb_eqep_timer_callback timer_callback, void *user)
 Sets the unit timer period for the eQEP module. 0 = off, greater than zero sets the period.
 

Detailed Description

eQEP (enhanced Quadrature Encoder Pulse) support API.

Macro Definition Documentation

◆ AM335X_EQEP_REGS

#define AM335X_EQEP_REGS   (0x00000180)

For details of the Enhanced Quadrature Encoder Pulse (eQEP) Module refer to page 2511 of the TI Technical Reference Manual (https://www.ti.com/lit/ug/spruh73q/spruh73q.pdf)

This driver supports using the QEP modules in Quadrature-clock Mode. Direction-count Mode is not currently supported. Similarly the QEPI: Index or Zero Marker and QEPS: Strobe Input pins are not currently supported.

The mode can be any one of:

  • Quadrature-count mode - For encoders that generate pulses 90 degrees out of phase for determining direction and speed.
  • Direction-count mode - for position encoders that provide direction and clock outputs, instead of quadrature outputs.
  • UP-count mode - The counter direction signal is hard-wired for up count and the position counter is used to measure the frequency of the QEPA input.
  • DOWN-count mode - The counter direction signal is hard-wired for a down count and the position counter is used to measure the frequency of the QEPA input.

When the eQEP module is configured in quadrature mode, the module can either provide an absolute position, or a relative position. Absolute simply increments or decrements depending on the direction. Relative increments until the unit timer overflows at which point it latches the position value, resets the position count to zero and starts again.

Typedef Documentation

◆ bbb_eqep_timer_callback

typedef void(* bbb_eqep_timer_callback) (BBB_PWMSS, uint32_t position, void *user)

This function definition is used to declare a callback function that will be called by the interrupt handler of the QEP driver. In order for the interrupt event to trigger the driver must be configured in RELATIVE mode (using the beagle_qep_get_quadrature_mode function), and the unit timer must have been configured (using the beagle_eqep_set_timer_period function).

Parameters
BBB_PWMSSThis argument is provided to the user call back function so that the user can tell which QEP module raised the interrupt.
positionThe value of the position counter that was latched when the unit timer raised this interrupt. This is the value that would be returned by calling "beagle_qep_get_position".
userThis a pointer to a user provided data structure. The user sets this pointer value when configuring the unit timer callback via the beagle_eqep_set_timer_period function and it is returned here as an argument. The driver does not touch this value.

Enumeration Type Documentation

◆ BBB_QEP_COUNT_MODE

The set of possible eQEP Position Counter Input Modes.

Enumerated type to define various modes for the eQEP module. The values correspond to the values for the QSRC bits of the QDECCTL register.

◆ bbb_qep_pin

The set of possible eQEP input pins.

◆ BBB_QEP_QUADRATURE_MODE

The set of possible modes for Quadrature decode.

Function Documentation

◆ beagle_eqep_get_timer_period()

uint32_t beagle_eqep_get_timer_period ( BBB_PWMSS  pwmss_id)

Returns the the currently configured unit timer period.

Parameters
pwmss_idIdentifies which PWMSS module to get the eQEP timer value for
Returns
uint32_t The current unit timer value in nanoseconds

◆ beagle_eqep_set_timer_period()

rtems_status_code beagle_eqep_set_timer_period ( BBB_PWMSS  pwmss_id,
uint64_t  period,
bbb_eqep_timer_callback  timer_callback,
void *  user 
)

Sets the unit timer period for the eQEP module. 0 = off, greater than zero sets the period.

Parameters
pwmss_idIdentifies which PWMSS module to set the eQEP unit timer for.
periodThe value in nanoseconds to set the unit timer period to.
timer_callbackThis is the user provided callback function that will be called by the interrupt event handler on expiry of the unit timer. The user can provide NULL if they don't require a call back.
userThis is a pointer to a user provided data structure that will be handed back as an argument to the timer callback. The driver does not touch this value.
Returns
RTEMS_SUCCESSFUL if ok, RTEMS_INVALID_ID if an invalid pwmss_id is supplied.

◆ beagle_qep_disable()

rtems_status_code beagle_qep_disable ( BBB_PWMSS  pwmss_id)

Disables the eQEP module of the specified PWMSS unit.

Parameters
pwmss_idThe PWMSS module which will have the eQEP function disabled.
Returns
RTEMS_SUCCESSFUL if ok, RTEMS_INVALID_ID if an invalid pwmss_id is supplied.

◆ beagle_qep_enable()

rtems_status_code beagle_qep_enable ( BBB_PWMSS  pwmss_id)

Enables the eQEP module of the specified PWMSS unit.

Parameters
pwmss_idThe PWMSS module which will have the eQEP function enabled.
Returns
RTEMS_SUCCESSFUL if ok, RTEMS_INVALID_ID if an invalid pwmss_id is supplied.

◆ beagle_qep_get_count_mode()

BBB_QEP_COUNT_MODE beagle_qep_get_count_mode ( BBB_PWMSS  pwmss_id)

Gets the currently configured count mode for the eQEP module.

Parameters
pwmss_idIdentifies which PWMSS module to set the eQEP count mode for.
Returns
An enum value representing the current count mode.

◆ beagle_qep_get_position()

int32_t beagle_qep_get_position ( BBB_PWMSS  pwmss_id)

Returns the current position value of the eQEP function for the specified PWMSS module.

Parameters
pwmss_idIdentifies which PWMSS module to return the eQEP position for
Returns
int32_t The current position value.

◆ beagle_qep_get_quadrature_mode()

BBB_QEP_QUADRATURE_MODE beagle_qep_get_quadrature_mode ( BBB_PWMSS  pwmss_id)

Returns the currently configured quadrature mode - either absolute, or relative.

Parameters
pwmss_idIdentifies which PWMSS module to get the eQEP quadrature mode for.
Returns
BBB_QEP_QUADRATURE_MODE The currently configured quadrature mode.

◆ beagle_qep_init()

rtems_status_code beagle_qep_init ( BBB_PWMSS  pwmss_id)

Initialises the eQEP module of the specified PWMSS unit. This configures the clocks, sets up the interrupt handler and unit timer, The module is configured in Quadrature decode mode using absolute position by default.

Parameters
pwmss_idThe PWMSS module to configure the eQEP for.
Returns
RTEMS_SUCCESSFUL if ok, RTEMS_INVALID_ID if an invalid pwmss_id is supplied.

◆ beagle_qep_pinmux_setup()

rtems_status_code beagle_qep_pinmux_setup ( bbb_qep_pin  pin_no,
BBB_PWMSS  pwmss_id,
bool  pullup_enable 
)

Configures a given pin for use with the eQEP function of the supplied PWMSS module.

Parameters
pin_noThe P9 or P8 header pin to be configured for the eQEP function.
pwmss_idThe PWMSS module which will have the eQEP function enabled.
pullup_enableIf true then the internal pull up resistor on the specified pin will be enabled, if false the pull down will be enabled.
Returns
RTEMS_SUCCESSFUL if ok, RTEMS_INVALID_ID if an invalid pwmss_id is supplied.

◆ beagle_qep_set_count_mode()

rtems_status_code beagle_qep_set_count_mode ( BBB_PWMSS  pwmss_id,
BBB_QEP_COUNT_MODE  mode 
)

Sets the count mode for the eQEP module.

Parameters
pwmss_idIdentifies which PWMSS module to set the eQEP count mode for.
modeOne of the above modes to configure the eQEP module for.
Returns
RTEMS_SUCCESSFUL if ok, RTEMS_INVALID_ID if an invalid pwmss_id is supplied.

◆ beagle_qep_set_position()

rtems_status_code beagle_qep_set_position ( BBB_PWMSS  pwmss_id,
uint32_t  position 
)

Sets the initial position value of the eQEP function for the specified PWMSS module.

Parameters
pwmss_idIdentifies which PWMSS module to set the eQEP position for
positionThe value to initialise the position register with.
Returns
RTEMS_SUCCESSFUL if ok, RTEMS_INVALID_ID if an invalid pwmss_id is supplied.

◆ beagle_qep_set_quadrature_mode()

rtems_status_code beagle_qep_set_quadrature_mode ( BBB_PWMSS  pwmss_id,
BBB_QEP_QUADRATURE_MODE  mode 
)

Sets the quadrature mode to either absolute or relative.

Parameters
pwmss_idIdentifies which PWMSS module to set the eQEP quadrature mode for.
modeBBB_QEP_QUADRATURE_MODE Set the mode of the eQEP to either absolute or relative.
Returns
RTEMS_SUCCESSFUL if ok, RTEMS_INVALID_ID if an invalid pwmss_id is supplied.