AM243x Motor Control SDK  09.01.00
bissc_drv.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2023 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 #ifdef __cplusplus
38 extern "C" {
39 #endif
40 
41 #include <stdio.h>
42 #include <string.h>
43 #include <math.h>
44 #include <drivers/pruicss.h>
46 /* Single PRU - Single channel configuration */
47 #define BISSC_MODE_SINGLE_CHANNEL_SINGLE_PRU (0U)
48 /* Single PRU - Multichannel configuration */
49 #define BISSC_MODE_MULTI_CHANNEL_SINGLE_PRU (1U)
50 /* Multichannel - Load Share configuration */
51 #define BISSC_MODE_MULTI_CHANNEL_MULTI_PRU (2U)
52 
53 /* Minimum and Maximum BiSSC cycle time depends on various params as below:
54  TCycle_min = TMA ∗ (5 + DLEN + CRCLEN) + tLineDelay + tbusy_max + busy_s_max + tTO
55  Instead wait for max of 5 ms as this can vary for different encoders and for daisy chain
56 */
57 #define BISSC_MAX_CYCLE_TIMEOUT 5
58 /* Maximum number of Endat Channels*/
59 #define NUM_ED_CH_MAX 3
60 /* Maximum number of BiSS-C Encoders connected in Daisy chain*/
61 #define NUM_ENCODERS_MAX 3
62 /* Max processing delay as per spec - values are in valid bits/clock cycles*/
63 #define BISSC_MAX_PROC_DELAY_1MHZ 40
64 #define BISSC_MAX_PROC_DELAY_2MHZ 80
65 #define BISSC_MAX_PROC_DELAY_5MHZ 200
66 #define BISSC_MAX_PROC_DELAY_8MHZ 320
67 #define BISSC_MAX_PROC_DELAY_10MHZ 400
68 
69 #define BISSC_RX_SAMPLE_SIZE 7 /* 8x over clock */
70 #define BISSC_RX_SAMPLE_SIZE_10MHZ 3 /* 4x over clock */
71 #define BISSC_POS_CRC_LEN 6 /* Number of position data CRC bits */
72 #define BISSC_EW_LEN 2 /* Number of Error and Warning bits */
73 #define BISSC_CTRL_CMD_CRC_LEN 4 /* Number of CTRL cmd CRC bits */
74 #define BISSC_POS_DATA_LEN_DEFAULT 12 /* Default data length instead of garbage*/
75 
76 /* Allowed frequencies in MHz for BiSSC */
77 #define BISSC_FREQ_1MHZ 1
78 #define BISSC_FREQ_2MHZ 2
79 #define BISSC_FREQ_5MHZ 5
80 #define BISSC_FREQ_8MHZ 8
81 #define BISSC_FREQ_10MHZ 10
82 
90 {
91  uint16_t rx_div;
93  uint16_t tx_div;
95  uint16_t rx_div_attr;
97  uint16_t is_core_clk;
99 };
106 {
119 };
127 {
128  uint8_t cmd_result;
130  uint8_t cmd_rcv_crc;
132  uint8_t cmd_otf_crc;
134 };
142 {
143  int32_t pruicss_slicex;
145  int32_t load_share;
157  int32_t has_safety;
159  void *pruicss_cfg;
161  int64_t raw_data;
173  int32_t totalchannels;
177  uint32_t baud_rate;
179  uint32_t core_clk_freq;
181  uint32_t uart_clk_freq;
183 };
184 
185 #ifdef __cplusplus
186 }
187 #endif
188 
189 #endif
bissc_priv::pruicss_slicex
int32_t pruicss_slicex
Definition: bissc_drv.h:143
bissc_priv::load_share
int32_t load_share
Definition: bissc_drv.h:145
bissc_priv::baud_rate
uint32_t baud_rate
Definition: bissc_drv.h:177
bissc_interface.h
NUM_ED_CH_MAX
#define NUM_ED_CH_MAX
Definition: bissc_drv.h:59
bissc_priv::proc_delay
uint16_t proc_delay[NUM_ED_CH_MAX]
Definition: bissc_drv.h:175
bissc_position_info::ew
uint8_t ew[NUM_ENCODERS_MAX]
Definition: bissc_drv.h:113
bissc_priv::totalchannels
int32_t totalchannels
Definition: bissc_drv.h:173
bissc_priv
Initialize BiSS-C firmware interface address and get the pointer to struct bissc_priv instance.
Definition: bissc_drv.h:142
NUM_ENCODERS_MAX
#define NUM_ENCODERS_MAX
Definition: bissc_drv.h:61
bissc_pruicss_xchg
Structure defining BiSSC interface.
Definition: bissc_interface.h:109
bissc_control_info::cmd_rcv_crc
uint8_t cmd_rcv_crc
Definition: bissc_drv.h:130
bissc_clk_cfg::tx_div
uint16_t tx_div
Definition: bissc_drv.h:93
bissc_priv::data_len
int32_t data_len[NUM_ED_CH_MAX][NUM_ENCODERS_MAX]
Definition: bissc_drv.h:147
bissc_control_info
Structure defining BiSSC Channel specific control communication(ctrl) results.
Definition: bissc_drv.h:127
bissc_position_info::angle
float angle[NUM_ENCODERS_MAX]
Definition: bissc_drv.h:109
bissc_priv::pruicss_xchg
struct bissc_pruicss_xchg * pruicss_xchg
Definition: bissc_drv.h:155
bissc_priv::num_encoders
int32_t num_encoders[NUM_ED_CH_MAX]
Definition: bissc_drv.h:171
bissc_clk_cfg::is_core_clk
uint16_t is_core_clk
Definition: bissc_drv.h:97
bissc_priv::pd_crc_err_cnt
int32_t pd_crc_err_cnt[NUM_ED_CH_MAX][NUM_ENCODERS_MAX]
Definition: bissc_drv.h:167
bissc_priv::channel
int32_t channel[NUM_ED_CH_MAX]
Definition: bissc_drv.h:153
bissc_clk_cfg::rx_div_attr
uint16_t rx_div_attr
Definition: bissc_drv.h:95
bissc_priv::raw_data
int64_t raw_data
Definition: bissc_drv.h:161
bissc_position_info::otf_crc
uint8_t otf_crc[NUM_ENCODERS_MAX]
Definition: bissc_drv.h:117
bissc_priv::enc_pos_data
struct bissc_position_info enc_pos_data[NUM_ED_CH_MAX]
Definition: bissc_drv.h:163
bissc_position_info
Structure defining BiSSC Position data results.
Definition: bissc_drv.h:106
bissc_priv::pruicss_cfg
void * pruicss_cfg
Definition: bissc_drv.h:159
bissc_position_info::num_of_turns
uint32_t num_of_turns[NUM_ENCODERS_MAX]
Definition: bissc_drv.h:111
bissc_priv::has_safety
int32_t has_safety
Definition: bissc_drv.h:157
bissc_priv::ctrl_crc_err_cnt
int32_t ctrl_crc_err_cnt[NUM_ED_CH_MAX]
Definition: bissc_drv.h:169
bissc_priv::multi_turn_len
int32_t multi_turn_len[NUM_ED_CH_MAX][NUM_ENCODERS_MAX]
Definition: bissc_drv.h:151
bissc_priv::core_clk_freq
uint32_t core_clk_freq
Definition: bissc_drv.h:179
bissc_clk_cfg
Structure defining EnDat clock configuration for selected frequency.
Definition: bissc_drv.h:90
bissc_control_info::cmd_otf_crc
uint8_t cmd_otf_crc
Definition: bissc_drv.h:132
bissc_position_info::rcv_crc
uint8_t rcv_crc[NUM_ENCODERS_MAX]
Definition: bissc_drv.h:115
bissc_priv::enc_ctrl_data
struct bissc_control_info enc_ctrl_data[NUM_ED_CH_MAX]
Definition: bissc_drv.h:165
bissc_position_info::position
uint64_t position[NUM_ENCODERS_MAX]
Definition: bissc_drv.h:107
bissc_control_info::cmd_result
uint8_t cmd_result
Definition: bissc_drv.h:128
bissc_priv::single_turn_len
int32_t single_turn_len[NUM_ED_CH_MAX][NUM_ENCODERS_MAX]
Definition: bissc_drv.h:149
bissc_priv::uart_clk_freq
uint32_t uart_clk_freq
Definition: bissc_drv.h:181
bissc_clk_cfg::rx_div
uint16_t rx_div
Definition: bissc_drv.h:91