AM263Px Motor Control SDK  2025.00.00
bissc_drv.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2023-2026 Texas Instruments Incorporated
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  *
8  * Redistributions of source code must retain the above copyright
9  * notice, this list of conditions and the following disclaimer.
10  *
11  * Redistributions in binary form must reproduce the above copyright
12  * notice, this list of conditions and the following disclaimer in the
13  * documentation and/or other materials provided with the
14  * distribution.
15  *
16  * Neither the name of Texas Instruments Incorporated nor the names of
17  * its contributors may be used to endorse or promote products derived
18  * from this software without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  */
32 
33 
34 #ifndef BISSC_DRV_H_
35 #define BISSC_DRV_H_
36 
37 /* ========================================================================== */
38 /* Include Files */
39 /* ========================================================================== */
40 
41 #include <stdio.h>
42 #include <string.h>
43 #include <math.h>
44 #include <drivers/pruicss.h>
46 
47 #ifdef __cplusplus
48 extern "C" {
49 #endif
50 
51 /* ========================================================================== */
52 /* Macros & Typedefs */
53 /* ========================================================================== */
54 
55 
61 #define BISSC_DEFAULT_CMD_PROCESS_DELAY_US (1000U)
62 
68 #define BISSC_DEFAULT_FW_WAIT_DELAY_US (1000U)
69 
80 #define BISSC_DEFAULT_MAX_WAIT_LOOP_COUNT (5U)
81 
83 #define BISSC_DEFAULT_ENCODER_TIMEOUT_US (40U)
84 
90 #define BISSC_MODE_SINGLE_CHANNEL_SINGLE_PRU (0U)
91 
97 #define BISSC_MODE_MULTI_CHANNEL_SINGLE_PRU (1U)
98 
106 #define BISSC_MODE_MULTI_CHANNEL_MULTI_PRU (2U)
107 
109 #define BISSC_MAX_PROC_DELAY_1MHZ 40
110 
112 #define BISSC_MAX_PROC_DELAY_2MHZ 80
113 
115 #define BISSC_MAX_PROC_DELAY_5MHZ 200
116 
118 #define BISSC_MAX_PROC_DELAY_8MHZ 320
119 
121 #define BISSC_MAX_PROC_DELAY_10MHZ 400
122 
124 #define BISSC_CTS_BIT 1
125 
127 #define BISSC_ENC_ID_LEN 3
128 
130 #define BISSC_ENC_ID_MASK 0x7
131 
133 #define BISSC_REG_ADDR_LEN 7
134 
136 #define BISSC_REG_ADDR_MASK 0x7F
137 
139 #define BISSC_RWS_LEN 3
140 
142 #define BISSC_RWS_MASK 0x7
143 
145 #define BISSC_CTRL_READ_ACCESS 0x5
146 
148 #define BISSC_CTRL_WRITE_ACCESS 0x3
149 
151 #define BISSC_REG_DATA_LEN 8
152 
154 #define BISSC_REG_DATA_MASK 0xFF
155 
161 #define BISSC_CTRL_STOP_LEN 2
162 
168 #define BISSC_RX_SAMPLE_SIZE 7
169 
171 #define BISSC_RX_SAMPLE_SIZE_6X 5
172 
174 #define BISSC_RX_SAMPLE_SIZE_4X 3
175 
180 #define BISSC_POS_CRC_LEN 6
181 
183 #define BISSC_EW_LEN 2
184 
189 #define BISSC_CTRL_CMD_CRC_LEN 4
190 
192 #define BISSC_CTRL_CMD_CRC_MASK 0xF
193 
199 #define BISSC_POS_DATA_LEN_DEFAULT 12
200 
205 #define BISSC_SAFETY_CRC_LEN 16
206 
212 #define BISSC_SIGN_OF_LIFE_LEN 6
213 
220 #define BISSC_MAX_FRAME_SIZE 64
221 
227 #define BISSC_RX_ENABLE_FRACTIONAL_DIV (1<<15)
228 
230 #define BISSC_FREQ_1MHZ 1
231 
233 #define BISSC_FREQ_2MHZ 2
234 
236 #define BISSC_FREQ_5MHZ 5
237 
239 #define BISSC_FREQ_8MHZ 8
240 
242 #define BISSC_FREQ_10MHZ 10
243 
248 #define BISSC_FIFO_BIT_IDX_8X_OS 4
249 
251 #define BISSC_FIFO_BIT_IDX_6X_OS 3
252 
254 #define BISSC_FIFO_BIT_IDX_4X_OS 2
255 
257 #define BISSC_CLEAR_STATUS_FLAG 0x0
258 
260 #define BISSC_SET_STATUS_FLAG 0x1
261 
266 #define BISSC_PRU_CORE_CLK_FREQ_200MHZ 200
267 
272 #define BISSC_PRU_CORE_CLK_FREQ_300MHZ 300
273 
275 #define BISSC_PRU_UART_CLK_FREQ_160MHZ 160
276 
278 #define BISSC_PRU_UART_CLK_FREQ_192MHZ 192
279 
282 #define BISSC_VALID_BIT_IDX (24U)
283 
289 #define BISSC_CLOCK_FRACTIONAL_DIVIDER (1.5)
290 
296 #define BISSC_MHZ_TO_HZ (1000000U)
297 
302 #define BISSC_EW_FIELD_MASK (0x03U)
303 
305 #define BISSC_6BIT_FIELD_MASK (0x3FU)
306 
312 #define BISSC_SAFETY_CRC_FIELD_MASK (0xFFFFU)
313 
319 #define BISSC_OPMODE_PERIODIC_CMP (0x0U)
320 
326 #define BISSC_OPMODE_HOST_TRIGGER (0x1U)
327 
333 #define BISSC_OPMODE_PERIODIC_CAP (0x2U)
334 
336 #define BISSC_MEASURE_PROC_DELAY_DISABLE (0x0U)
337 
339 #define BISSC_MEASURE_PROC_DELAY_ENABLE (0x1U)
340 
341 
345 #define BISSC_CFG_REG_SIZE (4U)
346 #define BISSC_CSL_ICSS_PR1_IEP0_SLV_CAP0_REG0 (CSL_ICSS_PR1_IEP0_SLV_CAP_CFG_REG + 2U*BISSC_CFG_REG_SIZE)
347 
351 #define BISSC_8_BYTE_REG_OFFSET (8U)
352 
354 #define BISSC_IEP_MAX_CAP_EVENT (0x8U)
355 
356 #define BISSC_IEP_MAX_CMP_EVENT (0x10U)
357 
358 /* ========================================================================== */
359 /* Structure Declarations */
360 /* ========================================================================== */
361 
370 typedef struct bissc_clk_cfg_s
371 {
372  uint16_t rx_div;
377  uint16_t tx_div;
382  uint16_t rx_div_attr;
388  uint16_t is_core_clk;
392 } bissc_clk_cfg;
393 
402 typedef struct bissc_position_info_s
403 {
417 
427 typedef struct bissc_control_info_s
428 {
429  uint8_t cmd_result;
431  uint8_t cmd_rcv_crc;
433  uint8_t cmd_otf_crc;
436 
444 typedef struct bissc_params_s
445 {
446  PRUICSS_Handle pruicss_handle;
467 } bissc_params;
468 
478 typedef struct bissc_priv_s
479 {
480  uint8_t is_open;
497  uint32_t channel[BISSC_NUM_CH_PER_SLICE_MAX];
527  uint64_t raw_data;
543  uint32_t ctrl_crc_err_cnt[BISSC_NUM_CH_PER_SLICE_MAX];
547  uint32_t num_encoders[BISSC_NUM_CH_PER_SLICE_MAX];
551  uint8_t ctrl_write_status[BISSC_NUM_CH_PER_SLICE_MAX];
555  uint32_t ctrl_reg_address[BISSC_NUM_CH_PER_SLICE_MAX];
559  uint32_t ctrl_reg_data[BISSC_NUM_CH_PER_SLICE_MAX];
562  uint32_t ctrl_enc_id[BISSC_NUM_CH_PER_SLICE_MAX];
565  uint16_t proc_delay[BISSC_NUM_CH_PER_SLICE_MAX];
569  uint32_t baud_rate;
592  PRUICSS_Handle pruicss_handle;
597 } bissc_priv;
598 
603 typedef struct bissc_attrs_s
604 {
605  uint8_t instance;
609  uint8_t mode;
620  uint8_t pruicss_slice;
631  uint8_t channel_mask;
647  uint8_t total_channels;
651  uint16_t baud_rate;
655  uint32_t core_clk_freq;
658  uint32_t uart_clk_freq;
661  uint32_t iep_clk_freq;
664  uint16_t is_core_clk;
670  uint8_t iep_instance;
673  uint8_t iep_cmp_event[BISSC_NUM_CH_PER_SLICE_MAX];
676  uint8_t iep_cap_event[BISSC_NUM_CH_PER_SLICE_MAX];
682 } bissc_attrs;
683 
692 typedef struct bissc_config_s
693 {
703 } bissc_config;
704 
712 
713 #ifdef __cplusplus
714 }
715 #endif
716 
717 #endif
bissc_priv::is_continuous_mode
uint8_t is_continuous_mode
Definition: bissc_drv.h:522
bissc_priv::pruicss_handle
PRUICSS_Handle pruicss_handle
Definition: bissc_drv.h:592
bissc_attrs::instance
uint8_t instance
Definition: bissc_drv.h:605
bissc_priv::cmd_process_delay_us
uint32_t cmd_process_delay_us
Definition: bissc_drv.h:575
bissc_attrs::pruicss_slice
uint8_t pruicss_slice
Definition: bissc_drv.h:620
bissc_priv::fw_wait_delay_us
uint32_t fw_wait_delay_us
Definition: bissc_drv.h:580
bissc_priv::baud_rate
uint32_t baud_rate
Definition: bissc_drv.h:569
bissc_params::pruicss_handle
PRUICSS_Handle pruicss_handle
Definition: bissc_drv.h:446
bissc_interface.h
bissc_params::cmd_process_delay_us
uint32_t cmd_process_delay_us
Definition: bissc_drv.h:449
bissc_attrs::mode
uint8_t mode
Definition: bissc_drv.h:609
bissc_config::priv
bissc_priv * priv
Definition: bissc_drv.h:694
bissc_handle
bissc_config * bissc_handle
BiSS-C handle type.
Definition: bissc_drv.h:711
bissc_priv::raw_data
uint64_t raw_data
Definition: bissc_drv.h:527
bissc_priv
BiSS-C private data structure (runtime state and configuration)
Definition: bissc_drv.h:479
bissc_pruicss_xchg
Structure defining BiSS-C PRU-ICSS shared memory interface.
Definition: bissc_interface.h:173
bissc_params::max_wait_loop_count
uint32_t max_wait_loop_count
Definition: bissc_drv.h:460
bissc_control_info::cmd_rcv_crc
uint8_t cmd_rcv_crc
Definition: bissc_drv.h:431
bissc_clk_cfg::tx_div
uint16_t tx_div
Definition: bissc_drv.h:377
bissc_priv::is_open
uint8_t is_open
Definition: bissc_drv.h:480
bissc_params::fw_wait_delay_us
uint32_t fw_wait_delay_us
Definition: bissc_drv.h:454
bissc_attrs::uart_clk_freq
uint32_t uart_clk_freq
Definition: bissc_drv.h:658
bissc_control_info
Structure defining BiSS-C Channel specific control communication(ctrl) results.
Definition: bissc_drv.h:428
bissc_attrs::core_clk_freq
uint32_t core_clk_freq
Definition: bissc_drv.h:655
bissc_attrs::iep_clk_freq
uint32_t iep_clk_freq
Definition: bissc_drv.h:661
bissc_clk_cfg::is_core_clk
uint16_t is_core_clk
Definition: bissc_drv.h:388
bissc_config::attrs
const bissc_attrs * attrs
Definition: bissc_drv.h:699
bissc_attrs::iep_instance
uint8_t iep_instance
Definition: bissc_drv.h:670
BISSC_NUM_CH_PER_SLICE_MAX
#define BISSC_NUM_CH_PER_SLICE_MAX
Maximum number of BiSS-C channels per PRU-ICSS slice (3 channels: ch0, ch1, ch2)
Definition: bissc_interface.h:54
bissc_clk_cfg::rx_div_attr
uint16_t rx_div_attr
Definition: bissc_drv.h:382
bissc_attrs::channel1_enabled
uint8_t channel1_enabled
Definition: bissc_drv.h:641
bissc_attrs::baud_rate
uint16_t baud_rate
Definition: bissc_drv.h:651
BISSC_NUM_ENCODERS_IN_DAISY_CHAIN_MAX
#define BISSC_NUM_ENCODERS_IN_DAISY_CHAIN_MAX
Maximum number of BiSS-C encoders in daisy chain configuration per channel (3 encoders)
Definition: bissc_interface.h:61
bissc_attrs::total_channels
uint8_t total_channels
Definition: bissc_drv.h:647
bissc_attrs::iep_base_addr
void * iep_base_addr
Definition: bissc_drv.h:679
bissc_params
Structure defining BiSS-C initialization parameters.
Definition: bissc_drv.h:445
bissc_position_info
Structure defining BiSS-C Position data results.
Definition: bissc_drv.h:403
bissc_attrs::channel2_enabled
uint8_t channel2_enabled
Definition: bissc_drv.h:644
bissc_attrs::load_share_enabled
uint8_t load_share_enabled
Definition: bissc_drv.h:626
bissc_priv::pruicss_xchg
bissc_pruicss_xchg * pruicss_xchg
Definition: bissc_drv.h:502
bissc_attrs
Structure defining BiSS-C attributes (compile-time/SysConfig configuration data)
Definition: bissc_drv.h:604
bissc_attrs::is_core_clk
uint16_t is_core_clk
Definition: bissc_drv.h:664
bissc_attrs::pruicss_instance
uint8_t pruicss_instance
Definition: bissc_drv.h:615
bissc_clk_cfg
Structure defining BiSS-C clock configuration for selected frequency.
Definition: bissc_drv.h:371
bissc_control_info::cmd_otf_crc
uint8_t cmd_otf_crc
Definition: bissc_drv.h:433
bissc_attrs::channel_mask
uint8_t channel_mask
Definition: bissc_drv.h:631
bissc_priv::max_wait_loop_count
uint32_t max_wait_loop_count
Definition: bissc_drv.h:585
bissc_control_info::cmd_result
uint8_t cmd_result
Definition: bissc_drv.h:429
bissc_config
Structure defining BiSS-C configuration handle.
Definition: bissc_drv.h:693
bissc_attrs::channel0_enabled
uint8_t channel0_enabled
Definition: bissc_drv.h:638
bissc_clk_cfg::rx_div
uint16_t rx_div
Definition: bissc_drv.h:372