|
#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 |
|
|
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...
|
|
|
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.
|
|
eQEP (enhanced Quadrature Encoder Pulse) support API.
#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.