Speed profile working

Fork of Easyspin_lib by Julien Tiron

Committer:
julientiron
Date:
Wed Aug 26 13:35:55 2015 +0000
Revision:
1:9efe863db15e
Parent:
0:cba942f8172a
Update for speed profile

Who changed what in which revision?

UserRevisionLine numberNew contents of line
julientiron 0:cba942f8172a 1 /******************************************************//**
julientiron 0:cba942f8172a 2 * @file easyspin.h
julientiron 0:cba942f8172a 3 * @version V1.0
julientiron 0:cba942f8172a 4 * @date June 29, 2015
julientiron 0:cba942f8172a 5 * @brief Header for easyspin library for mbed
julientiron 0:cba942f8172a 6 *
julientiron 0:cba942f8172a 7 * This file is free software; you can redistribute it and/or modify
julientiron 0:cba942f8172a 8 * it under the terms of either the GNU General Public License version 2
julientiron 0:cba942f8172a 9 * or the GNU Lesser General Public License version 2.1, both as
julientiron 0:cba942f8172a 10 * published by the Free Software Foundation.
julientiron 0:cba942f8172a 11 **********************************************************/
julientiron 0:cba942f8172a 12
julientiron 0:cba942f8172a 13 #ifndef __Easyspin_H_INCLUDED
julientiron 0:cba942f8172a 14 #define __Easyspin_H_INCLUDED
julientiron 0:cba942f8172a 15
julientiron 0:cba942f8172a 16 #include "easyspin_config.h"
julientiron 0:cba942f8172a 17 #include "mbed.h"
julientiron 0:cba942f8172a 18
julientiron 0:cba942f8172a 19 /// Define to print debug logs via the UART
julientiron 0:cba942f8172a 20 #ifndef _DEBUG_Easyspin
julientiron 0:cba942f8172a 21 //#define _DEBUG_Easyspin
julientiron 0:cba942f8172a 22 #endif
julientiron 0:cba942f8172a 23
julientiron 0:cba942f8172a 24
julientiron 0:cba942f8172a 25 /// Clear bit Macro
julientiron 0:cba942f8172a 26 #ifndef cbi
julientiron 0:cba942f8172a 27 #define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
julientiron 0:cba942f8172a 28 #endif
julientiron 0:cba942f8172a 29
julientiron 0:cba942f8172a 30 /// Set bit Macro
julientiron 0:cba942f8172a 31 #ifndef sbi
julientiron 0:cba942f8172a 32 #define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
julientiron 0:cba942f8172a 33 #endif
julientiron 0:cba942f8172a 34
julientiron 0:cba942f8172a 35 /// Current FW version
julientiron 0:cba942f8172a 36 #define Easyspin_FW_VERSION (1)
julientiron 0:cba942f8172a 37
julientiron 0:cba942f8172a 38 /// Digital Pins used for the Easyspin MOSI pin
julientiron 0:cba942f8172a 39 #define Easyspin_MOSI_Pin PA_7
julientiron 0:cba942f8172a 40 /// Digital Pins used for the Easyspin MISO pin
julientiron 0:cba942f8172a 41 #define Easyspin_MISO_Pin PA_6
julientiron 0:cba942f8172a 42 /// Digital Pins used for the Easyspin SCK pin
julientiron 0:cba942f8172a 43 #define Easyspin_SCK_Pin PA_5
julientiron 0:cba942f8172a 44 /// Digital Pins used for the Easyspin flag pin
julientiron 0:cba942f8172a 45 #define Easyspin_FLAG_Pin PA_10 //(2)
julientiron 0:cba942f8172a 46 /// Digital Pins used for the Easyspin chip select pin
julientiron 0:cba942f8172a 47 #define Easyspin_CS_Pin PB_6
julientiron 0:cba942f8172a 48 /// Digital Pins used for the Easyspin step clock pin of shield 0
julientiron 0:cba942f8172a 49 #define Easyspin_PWM_1_Pin PC_7 //(9)
julientiron 0:cba942f8172a 50 /// Digital Pins used for the Easyspin step clock pin of shield 1
julientiron 0:cba942f8172a 51 #define Easyspin_PWM_2_Pin PB_3 //(3)
julientiron 0:cba942f8172a 52 /// Digital Pins used for the Easyspin step clock pin of shield 2
julientiron 0:cba942f8172a 53 #define Easyspin_PWM_3_Pin PB_10 //(6)
julientiron 0:cba942f8172a 54 /// Digital Pins used for the Easyspin direction pin of shield 0
julientiron 0:cba942f8172a 55 #define Easyspin_DIR_1_Pin PA_8 //(7)
julientiron 0:cba942f8172a 56 /// Digital Pins used for the Easyspin direction pin of shield 1
julientiron 0:cba942f8172a 57 #define Easyspin_DIR_2_Pin PB_5 //(4)
julientiron 0:cba942f8172a 58 /// Digital Pins used for the Easyspin direction pin of shield 2
julientiron 0:cba942f8172a 59 #define Easyspin_DIR_3_Pin PB_4 //(5)
julientiron 0:cba942f8172a 60 /// Digital Pins used for the Easyspin reset pin
julientiron 0:cba942f8172a 61 #define Easyspin_Reset_Pin PA_9 //(8)
julientiron 0:cba942f8172a 62 /// Maximum number of steps
julientiron 0:cba942f8172a 63 #define MAX_STEPS (0x7FFFFFFF)
julientiron 0:cba942f8172a 64 /// uint8_t max value
julientiron 0:cba942f8172a 65 #define UINT8_MAX (uint8_t)(0XFF)
julientiron 0:cba942f8172a 66 /// uint16_t max value
julientiron 0:cba942f8172a 67 #define UINT16_MAX (uint16_t)(0XFFFF)
julientiron 0:cba942f8172a 68
julientiron 0:cba942f8172a 69 /// Pwm prescaler array size for timer 0 & 1
julientiron 0:cba942f8172a 70 #define PRESCALER_ARRAY_TIMER0_1_SIZE (6)
julientiron 0:cba942f8172a 71 /// Pwm prescaler array size for timer 2
julientiron 0:cba942f8172a 72 #define PRESCALER_ARRAY_TIMER2_SIZE (8)
julientiron 0:cba942f8172a 73
julientiron 0:cba942f8172a 74 /// Maximum frequency of the PWMs
julientiron 0:cba942f8172a 75 #define Easyspin_MAX_PWM_FREQ (10000)
julientiron 0:cba942f8172a 76 /// Minimum frequency of the PWMs
julientiron 0:cba942f8172a 77 #define Easyspin_MIN_PWM_FREQ (30)
julientiron 0:cba942f8172a 78
julientiron 0:cba942f8172a 79 /// Easyspin max number of bytes of command & arguments to set a parameter
julientiron 0:cba942f8172a 80 #define Easyspin_CMD_ARG_MAX_NB_BYTES (4)
julientiron 0:cba942f8172a 81
julientiron 0:cba942f8172a 82 /// Easyspin command + argument bytes number for NOP command
julientiron 0:cba942f8172a 83 #define Easyspin_CMD_ARG_NB_BYTES_NOP (1)
julientiron 0:cba942f8172a 84 /// Easyspin command + argument bytes number for ENABLE command
julientiron 0:cba942f8172a 85 #define Easyspin_CMD_ARG_NB_BYTES_ENABLE (1)
julientiron 0:cba942f8172a 86 /// Easyspin command + argument bytes number for DISABLE command
julientiron 0:cba942f8172a 87 #define Easyspin_CMD_ARG_NB_BYTES_DISABLE (1)
julientiron 0:cba942f8172a 88 /// Easyspin command + argument bytes number for GET_STATUS command
julientiron 0:cba942f8172a 89 #define Easyspin_CMD_ARG_NB_BYTES_GET_STATUS (1)
julientiron 0:cba942f8172a 90
julientiron 0:cba942f8172a 91 /// Easyspin response bytes number
julientiron 0:cba942f8172a 92 #define Easyspin_RSP_NB_BYTES_GET_STATUS (2)
julientiron 0:cba942f8172a 93
julientiron 0:cba942f8172a 94 /// Daisy chain command mask
julientiron 0:cba942f8172a 95 #define DAISY_CHAIN_COMMAND_MASK (0xFA)
julientiron 0:cba942f8172a 96
julientiron 0:cba942f8172a 97 /// Easyspin value mask for ABS_POS register
julientiron 0:cba942f8172a 98 #define Easyspin_ABS_POS_VALUE_MASK ((uint32_t) 0x003FFFFF)
julientiron 0:cba942f8172a 99 /// Easyspin sign bit mask for ABS_POS register
julientiron 0:cba942f8172a 100 #define Easyspin_ABS_POS_SIGN_BIT_MASK ((uint32_t) 0x00200000)
julientiron 0:cba942f8172a 101
julientiron 0:cba942f8172a 102 /// Easyspin step mask for electrical position (EL_POS) register
julientiron 0:cba942f8172a 103 #define Easyspin_ELPOS_STEP_MASK ((uint8_t)0xC0)
julientiron 0:cba942f8172a 104 /// Easyspin microstep mask for electrical position (EL_POS) register
julientiron 0:cba942f8172a 105 #define Easyspin_ELPOS_MICROSTEP_MASK ((uint8_t)0x3F)
julientiron 0:cba942f8172a 106
julientiron 0:cba942f8172a 107 /// Easyspin fast decay time option (TOFF_FAST values for T_FAST register )
julientiron 0:cba942f8172a 108 typedef enum {
julientiron 0:cba942f8172a 109 Easyspin_TOFF_FAST_2us = ((uint8_t) 0x00 << 4),
julientiron 0:cba942f8172a 110 Easyspin_TOFF_FAST_4us = ((uint8_t) 0x01 << 4),
julientiron 0:cba942f8172a 111 Easyspin_TOFF_FAST_6us = ((uint8_t) 0x02 << 4),
julientiron 0:cba942f8172a 112 Easyspin_TOFF_FAST_8us = ((uint8_t) 0x03 << 4),
julientiron 0:cba942f8172a 113 Easyspin_TOFF_FAST_10us = ((uint8_t) 0x04 << 4),
julientiron 0:cba942f8172a 114 Easyspin_TOFF_FAST_12us = ((uint8_t) 0x05 << 4),
julientiron 0:cba942f8172a 115 Easyspin_TOFF_FAST_14us = ((uint8_t) 0x06 << 4),
julientiron 0:cba942f8172a 116 Easyspin_TOFF_FAST_16us = ((uint8_t) 0x07 << 4),
julientiron 0:cba942f8172a 117 Easyspin_TOFF_FAST_18us = ((uint8_t) 0x08 << 4),
julientiron 0:cba942f8172a 118 Easyspin_TOFF_FAST_20us = ((uint8_t) 0x09 << 4),
julientiron 0:cba942f8172a 119 Easyspin_TOFF_FAST_22us = ((uint8_t) 0x0A << 4),
julientiron 0:cba942f8172a 120 Easyspin_TOFF_FAST_24us = ((uint8_t) 0x0B << 4),
julientiron 0:cba942f8172a 121 Easyspin_TOFF_FAST_26us = ((uint8_t) 0x0C << 4),
julientiron 0:cba942f8172a 122 Easyspin_TOFF_FAST_28us = ((uint8_t) 0x0D << 4),
julientiron 0:cba942f8172a 123 Easyspin_TOFF_FAST_30us = ((uint8_t) 0x0E << 4),
julientiron 0:cba942f8172a 124 Easyspin_TOFF_FAST_32us = ((uint8_t) 0x0F << 4)
julientiron 0:cba942f8172a 125 } Easyspin_TOFF_FAST_t;
julientiron 0:cba942f8172a 126
julientiron 0:cba942f8172a 127 /// Easyspin fall step time options (FAST_STEP values for T_FAST register )
julientiron 0:cba942f8172a 128 typedef enum {
julientiron 0:cba942f8172a 129 Easyspin_FAST_STEP_2us = ((uint8_t) 0x00),
julientiron 0:cba942f8172a 130 Easyspin_FAST_STEP_4us = ((uint8_t) 0x01),
julientiron 0:cba942f8172a 131 Easyspin_FAST_STEP_6us = ((uint8_t) 0x02),
julientiron 0:cba942f8172a 132 Easyspin_FAST_STEP_8us = ((uint8_t) 0x03),
julientiron 0:cba942f8172a 133 Easyspin_FAST_STEP_10us = ((uint8_t) 0x04),
julientiron 0:cba942f8172a 134 Easyspin_FAST_STEP_12us = ((uint8_t) 0x05),
julientiron 0:cba942f8172a 135 Easyspin_FAST_STEP_14us = ((uint8_t) 0x06),
julientiron 0:cba942f8172a 136 Easyspin_FAST_STEP_16us = ((uint8_t) 0x07),
julientiron 0:cba942f8172a 137 Easyspin_FAST_STEP_18us = ((uint8_t) 0x08),
julientiron 0:cba942f8172a 138 Easyspin_FAST_STEP_20us = ((uint8_t) 0x09),
julientiron 0:cba942f8172a 139 Easyspin_FAST_STEP_22us = ((uint8_t) 0x0A),
julientiron 0:cba942f8172a 140 Easyspin_FAST_STEP_24us = ((uint8_t) 0x0B),
julientiron 0:cba942f8172a 141 Easyspin_FAST_STEP_26us = ((uint8_t) 0x0C),
julientiron 0:cba942f8172a 142 Easyspin_FAST_STEP_28us = ((uint8_t) 0x0D),
julientiron 0:cba942f8172a 143 Easyspin_FAST_STEP_30us = ((uint8_t) 0x0E),
julientiron 0:cba942f8172a 144 Easyspin_FAST_STEP_32us = ((uint8_t) 0x0F)
julientiron 0:cba942f8172a 145 } Easyspin_FAST_STEP_t;
julientiron 0:cba942f8172a 146
julientiron 0:cba942f8172a 147 /// Easyspin overcurrent threshold options (OCD_TH register)
julientiron 0:cba942f8172a 148 typedef enum {
julientiron 0:cba942f8172a 149 Easyspin_OCD_TH_375mA = ((uint8_t) 0x00),
julientiron 0:cba942f8172a 150 Easyspin_OCD_TH_750mA = ((uint8_t) 0x01),
julientiron 0:cba942f8172a 151 Easyspin_OCD_TH_1125mA = ((uint8_t) 0x02),
julientiron 0:cba942f8172a 152 Easyspin_OCD_TH_1500mA = ((uint8_t) 0x03),
julientiron 0:cba942f8172a 153 Easyspin_OCD_TH_1875mA = ((uint8_t) 0x04),
julientiron 0:cba942f8172a 154 Easyspin_OCD_TH_2250mA = ((uint8_t) 0x05),
julientiron 0:cba942f8172a 155 Easyspin_OCD_TH_2625mA = ((uint8_t) 0x06),
julientiron 0:cba942f8172a 156 Easyspin_OCD_TH_3000mA = ((uint8_t) 0x07),
julientiron 0:cba942f8172a 157 Easyspin_OCD_TH_3375mA = ((uint8_t) 0x08),
julientiron 0:cba942f8172a 158 Easyspin_OCD_TH_3750mA = ((uint8_t) 0x09),
julientiron 0:cba942f8172a 159 Easyspin_OCD_TH_4125mA = ((uint8_t) 0x0A),
julientiron 0:cba942f8172a 160 Easyspin_OCD_TH_4500mA = ((uint8_t) 0x0B),
julientiron 0:cba942f8172a 161 Easyspin_OCD_TH_4875mA = ((uint8_t) 0x0C),
julientiron 0:cba942f8172a 162 Easyspin_OCD_TH_5250mA = ((uint8_t) 0x0D),
julientiron 0:cba942f8172a 163 Easyspin_OCD_TH_5625mA = ((uint8_t) 0x0E),
julientiron 0:cba942f8172a 164 Easyspin_OCD_TH_6000mA = ((uint8_t) 0x0F)
julientiron 0:cba942f8172a 165 } Easyspin_OCD_TH_t;
julientiron 0:cba942f8172a 166
julientiron 0:cba942f8172a 167 /// Easyspin STEP_MODE register masks
julientiron 0:cba942f8172a 168 typedef enum {
julientiron 0:cba942f8172a 169 Easyspin_STEP_MODE_STEP_SEL = ((uint8_t) 0x07),
julientiron 0:cba942f8172a 170 Easyspin_STEP_MODE_SYNC_SEL = ((uint8_t) 0x70)
julientiron 0:cba942f8172a 171 } Easyspin_STEP_MODE_Masks_t;
julientiron 0:cba942f8172a 172
julientiron 0:cba942f8172a 173 /// Easyspin STEP_SEL options for STEP_MODE register
julientiron 0:cba942f8172a 174 typedef enum {
julientiron 0:cba942f8172a 175 Easyspin_STEP_SEL_1 = ((uint8_t) 0x08), //full step
julientiron 0:cba942f8172a 176 Easyspin_STEP_SEL_1_2 = ((uint8_t) 0x09), //half step
julientiron 0:cba942f8172a 177 Easyspin_STEP_SEL_1_4 = ((uint8_t) 0x0A), //1/4 microstep
julientiron 0:cba942f8172a 178 Easyspin_STEP_SEL_1_8 = ((uint8_t) 0x0B), //1/8 microstep
julientiron 0:cba942f8172a 179 Easyspin_STEP_SEL_1_16 = ((uint8_t) 0x0C) //1/16 microstep
julientiron 0:cba942f8172a 180 } Easyspin_STEP_SEL_t;
julientiron 0:cba942f8172a 181
julientiron 0:cba942f8172a 182 /// Easyspin SYNC_SEL options for STEP_MODE register
julientiron 0:cba942f8172a 183 typedef enum {
julientiron 0:cba942f8172a 184 Easyspin_SYNC_SEL_1_2 = ((uint8_t) 0x80),
julientiron 0:cba942f8172a 185 Easyspin_SYNC_SEL_1 = ((uint8_t) 0x90),
julientiron 0:cba942f8172a 186 Easyspin_SYNC_SEL_2 = ((uint8_t) 0xA0),
julientiron 0:cba942f8172a 187 Easyspin_SYNC_SEL_4 = ((uint8_t) 0xB0),
julientiron 0:cba942f8172a 188 Easyspin_SYNC_SEL_8 = ((uint8_t) 0xC0),
julientiron 0:cba942f8172a 189 Easyspin_SYNC_SEL_UNUSED = ((uint8_t) 0xD0)
julientiron 0:cba942f8172a 190 } Easyspin_SYNC_SEL_t;
julientiron 0:cba942f8172a 191
julientiron 0:cba942f8172a 192 /// Easyspin ALARM_EN register options
julientiron 0:cba942f8172a 193 typedef enum {
julientiron 0:cba942f8172a 194 Easyspin_ALARM_EN_OVERCURRENT = ((uint8_t) 0x01),
julientiron 0:cba942f8172a 195 Easyspin_ALARM_EN_THERMAL_SHUTDOWN = ((uint8_t) 0x02),
julientiron 0:cba942f8172a 196 Easyspin_ALARM_EN_THERMAL_WARNING = ((uint8_t) 0x04),
julientiron 0:cba942f8172a 197 Easyspin_ALARM_EN_UNDERVOLTAGE = ((uint8_t) 0x08),
julientiron 0:cba942f8172a 198 Easyspin_ALARM_EN_SW_TURN_ON = ((uint8_t) 0x40),
julientiron 0:cba942f8172a 199 Easyspin_ALARM_EN_WRONG_NPERF_CMD = ((uint8_t) 0x80)
julientiron 0:cba942f8172a 200 } Easyspin_ALARM_EN_t;
julientiron 0:cba942f8172a 201
julientiron 0:cba942f8172a 202 /// Easyspin CONFIG register masks
julientiron 0:cba942f8172a 203 typedef enum {
julientiron 0:cba942f8172a 204 Easyspin_CONFIG_OSC_SEL = ((uint16_t) 0x0007),
julientiron 0:cba942f8172a 205 Easyspin_CONFIG_EXT_CLK = ((uint16_t) 0x0008),
julientiron 0:cba942f8172a 206 Easyspin_CONFIG_EN_TQREG = ((uint16_t) 0x0020),
julientiron 0:cba942f8172a 207 Easyspin_CONFIG_OC_SD = ((uint16_t) 0x0080),
julientiron 0:cba942f8172a 208 Easyspin_CONFIG_POW_SR = ((uint16_t) 0x0300),
julientiron 0:cba942f8172a 209 Easyspin_CONFIG_TOFF = ((uint16_t) 0x7C00)
julientiron 0:cba942f8172a 210 } Easyspin_CONFIG_Masks_t;
julientiron 0:cba942f8172a 211
julientiron 0:cba942f8172a 212 /// Easyspin clock source options for CONFIG register
julientiron 0:cba942f8172a 213 typedef enum {
julientiron 0:cba942f8172a 214 Easyspin_CONFIG_INT_16MHZ = ((uint16_t) 0x0000),
julientiron 0:cba942f8172a 215 Easyspin_CONFIG_INT_16MHZ_OSCOUT_2MHZ = ((uint16_t) 0x0008),
julientiron 0:cba942f8172a 216 Easyspin_CONFIG_INT_16MHZ_OSCOUT_4MHZ = ((uint16_t) 0x0009),
julientiron 0:cba942f8172a 217 Easyspin_CONFIG_INT_16MHZ_OSCOUT_8MHZ = ((uint16_t) 0x000A),
julientiron 0:cba942f8172a 218 Easyspin_CONFIG_INT_16MHZ_OSCOUT_16MHZ = ((uint16_t) 0x000B),
julientiron 0:cba942f8172a 219 Easyspin_CONFIG_EXT_8MHZ_XTAL_DRIVE = ((uint16_t) 0x0004),
julientiron 0:cba942f8172a 220 Easyspin_CONFIG_EXT_16MHZ_XTAL_DRIVE = ((uint16_t) 0x0005),
julientiron 0:cba942f8172a 221 Easyspin_CONFIG_EXT_24MHZ_XTAL_DRIVE = ((uint16_t) 0x0006),
julientiron 0:cba942f8172a 222 Easyspin_CONFIG_EXT_32MHZ_XTAL_DRIVE = ((uint16_t) 0x0007),
julientiron 0:cba942f8172a 223 Easyspin_CONFIG_EXT_8MHZ_OSCOUT_INVERT = ((uint16_t) 0x000C),
julientiron 0:cba942f8172a 224 Easyspin_CONFIG_EXT_16MHZ_OSCOUT_INVERT = ((uint16_t) 0x000D),
julientiron 0:cba942f8172a 225 Easyspin_CONFIG_EXT_24MHZ_OSCOUT_INVERT = ((uint16_t) 0x000E),
julientiron 0:cba942f8172a 226 Easyspin_CONFIG_EXT_32MHZ_OSCOUT_INVERT = ((uint16_t) 0x000F)
julientiron 0:cba942f8172a 227 } Easyspin_CONFIG_OSC_MGMT_t;
julientiron 0:cba942f8172a 228
julientiron 0:cba942f8172a 229 /// Easyspin external torque regulation options for CONFIG register
julientiron 0:cba942f8172a 230 typedef enum {
julientiron 0:cba942f8172a 231 Easyspin_CONFIG_EN_TQREG_TVAL_USED = ((uint16_t) 0x0000),
julientiron 0:cba942f8172a 232 Easyspin_CONFIG_EN_TQREG_ADC_OUT = ((uint16_t) 0x0020)
julientiron 0:cba942f8172a 233 } Easyspin_CONFIG_EN_TQREG_t;
julientiron 0:cba942f8172a 234
julientiron 0:cba942f8172a 235 /// Easyspin over current shutdown options for CONFIG register
julientiron 0:cba942f8172a 236 typedef enum {
julientiron 0:cba942f8172a 237 Easyspin_CONFIG_OC_SD_DISABLE = ((uint16_t) 0x0000),
julientiron 0:cba942f8172a 238 Easyspin_CONFIG_OC_SD_ENABLE = ((uint16_t) 0x0080)
julientiron 0:cba942f8172a 239 } Easyspin_CONFIG_OC_SD_t;
julientiron 0:cba942f8172a 240
julientiron 0:cba942f8172a 241 /// Easyspin power bridge output slew_rates options (POW_SR values for CONFIG register)
julientiron 0:cba942f8172a 242 typedef enum {
julientiron 0:cba942f8172a 243 Easyspin_CONFIG_SR_320V_us =((uint16_t)0x0000),
julientiron 0:cba942f8172a 244 Easyspin_CONFIG_SR_075V_us =((uint16_t)0x0100),
julientiron 0:cba942f8172a 245 Easyspin_CONFIG_SR_110V_us =((uint16_t)0x0200),
julientiron 0:cba942f8172a 246 Easyspin_CONFIG_SR_260V_us =((uint16_t)0x0300)
julientiron 0:cba942f8172a 247 } Easyspin_CONFIG_POW_SR_t;
julientiron 0:cba942f8172a 248
julientiron 0:cba942f8172a 249 /// Easyspin Off time options (TOFF values for CONFIG register)
julientiron 0:cba942f8172a 250 typedef enum {
julientiron 0:cba942f8172a 251 Easyspin_CONFIG_TOFF_004us = (((uint16_t) 0x01) << 10),
julientiron 0:cba942f8172a 252 Easyspin_CONFIG_TOFF_008us = (((uint16_t) 0x02) << 10),
julientiron 0:cba942f8172a 253 Easyspin_CONFIG_TOFF_012us = (((uint16_t) 0x03) << 10),
julientiron 0:cba942f8172a 254 Easyspin_CONFIG_TOFF_016us = (((uint16_t) 0x04) << 10),
julientiron 0:cba942f8172a 255 Easyspin_CONFIG_TOFF_020us = (((uint16_t) 0x05) << 10),
julientiron 0:cba942f8172a 256 Easyspin_CONFIG_TOFF_024us = (((uint16_t) 0x06) << 10),
julientiron 0:cba942f8172a 257 Easyspin_CONFIG_TOFF_028us = (((uint16_t) 0x07) << 10),
julientiron 0:cba942f8172a 258 Easyspin_CONFIG_TOFF_032us = (((uint16_t) 0x08) << 10),
julientiron 0:cba942f8172a 259 Easyspin_CONFIG_TOFF_036us = (((uint16_t) 0x09) << 10),
julientiron 0:cba942f8172a 260 Easyspin_CONFIG_TOFF_040us = (((uint16_t) 0x0A) << 10),
julientiron 0:cba942f8172a 261 Easyspin_CONFIG_TOFF_044us = (((uint16_t) 0x0B) << 10),
julientiron 0:cba942f8172a 262 Easyspin_CONFIG_TOFF_048us = (((uint16_t) 0x0C) << 10),
julientiron 0:cba942f8172a 263 Easyspin_CONFIG_TOFF_052us = (((uint16_t) 0x0D) << 10),
julientiron 0:cba942f8172a 264 Easyspin_CONFIG_TOFF_056us = (((uint16_t) 0x0E) << 10),
julientiron 0:cba942f8172a 265 Easyspin_CONFIG_TOFF_060us = (((uint16_t) 0x0F) << 10),
julientiron 0:cba942f8172a 266 Easyspin_CONFIG_TOFF_064us = (((uint16_t) 0x10) << 10),
julientiron 0:cba942f8172a 267 Easyspin_CONFIG_TOFF_068us = (((uint16_t) 0x11) << 10),
julientiron 0:cba942f8172a 268 Easyspin_CONFIG_TOFF_072us = (((uint16_t) 0x12) << 10),
julientiron 0:cba942f8172a 269 Easyspin_CONFIG_TOFF_076us = (((uint16_t) 0x13) << 10),
julientiron 0:cba942f8172a 270 Easyspin_CONFIG_TOFF_080us = (((uint16_t) 0x14) << 10),
julientiron 0:cba942f8172a 271 Easyspin_CONFIG_TOFF_084us = (((uint16_t) 0x15) << 10),
julientiron 0:cba942f8172a 272 Easyspin_CONFIG_TOFF_088us = (((uint16_t) 0x16) << 10),
julientiron 0:cba942f8172a 273 Easyspin_CONFIG_TOFF_092us = (((uint16_t) 0x17) << 10),
julientiron 0:cba942f8172a 274 Easyspin_CONFIG_TOFF_096us = (((uint16_t) 0x18) << 10),
julientiron 0:cba942f8172a 275 Easyspin_CONFIG_TOFF_100us = (((uint16_t) 0x19) << 10),
julientiron 0:cba942f8172a 276 Easyspin_CONFIG_TOFF_104us = (((uint16_t) 0x1A) << 10),
julientiron 0:cba942f8172a 277 Easyspin_CONFIG_TOFF_108us = (((uint16_t) 0x1B) << 10),
julientiron 0:cba942f8172a 278 Easyspin_CONFIG_TOFF_112us = (((uint16_t) 0x1C) << 10),
julientiron 0:cba942f8172a 279 Easyspin_CONFIG_TOFF_116us = (((uint16_t) 0x1D) << 10),
julientiron 0:cba942f8172a 280 Easyspin_CONFIG_TOFF_120us = (((uint16_t) 0x1E) << 10),
julientiron 0:cba942f8172a 281 Easyspin_CONFIG_TOFF_124us = (((uint16_t) 0x1F) << 10)
julientiron 0:cba942f8172a 282 } Easyspin_CONFIG_TOFF_t;
julientiron 0:cba942f8172a 283
julientiron 0:cba942f8172a 284 /// Easyspin STATUS register bit masks
julientiron 0:cba942f8172a 285 typedef enum {
julientiron 0:cba942f8172a 286 Easyspin_STATUS_HIZ = (((uint16_t) 0x0001)),
julientiron 0:cba942f8172a 287 Easyspin_STATUS_DIR = (((uint16_t) 0x0010)),
julientiron 0:cba942f8172a 288 Easyspin_STATUS_NOTPERF_CMD = (((uint16_t) 0x0080)),
julientiron 0:cba942f8172a 289 Easyspin_STATUS_WRONG_CMD = (((uint16_t) 0x0100)),
julientiron 0:cba942f8172a 290 Easyspin_STATUS_UVLO = (((uint16_t) 0x0200)),
julientiron 0:cba942f8172a 291 Easyspin_STATUS_TH_WRN = (((uint16_t) 0x0400)),
julientiron 0:cba942f8172a 292 Easyspin_STATUS_TH_SD = (((uint16_t) 0x0800)),
julientiron 0:cba942f8172a 293 Easyspin_STATUS_OCD = (((uint16_t) 0x1000))
julientiron 0:cba942f8172a 294 } Easyspin_STATUS_Masks_t;
julientiron 0:cba942f8172a 295
julientiron 0:cba942f8172a 296 /// Easyspin STATUS register options
julientiron 0:cba942f8172a 297 typedef enum {
julientiron 0:cba942f8172a 298 Easyspin_STATUS_DIR_FORWARD = (((uint16_t) 0x0001) << 4),
julientiron 0:cba942f8172a 299 Easyspin_STATUS_DIR_REVERSE = (((uint16_t) 0x0000) << 4)
julientiron 0:cba942f8172a 300 } Easyspin_STATUS_DIR_t;
julientiron 0:cba942f8172a 301
julientiron 0:cba942f8172a 302 /// Easyspin internal register addresses
julientiron 0:cba942f8172a 303 typedef enum {
julientiron 0:cba942f8172a 304 Easyspin_ABS_POS = ((uint8_t) 0x01),
julientiron 0:cba942f8172a 305 Easyspin_EL_POS = ((uint8_t) 0x02),
julientiron 0:cba942f8172a 306 Easyspin_MARK = ((uint8_t) 0x03),
julientiron 0:cba942f8172a 307 Easyspin_RESERVED_REG01 = ((uint8_t) 0x04),
julientiron 0:cba942f8172a 308 Easyspin_RESERVED_REG02 = ((uint8_t) 0x05),
julientiron 0:cba942f8172a 309 Easyspin_RESERVED_REG03 = ((uint8_t) 0x06),
julientiron 0:cba942f8172a 310 Easyspin_RESERVED_REG04 = ((uint8_t) 0x07),
julientiron 0:cba942f8172a 311 Easyspin_RESERVED_REG05 = ((uint8_t) 0x08),
julientiron 0:cba942f8172a 312 Easyspin_RESERVED_REG06 = ((uint8_t) 0x15),
julientiron 0:cba942f8172a 313 Easyspin_TVAL = ((uint8_t) 0x09),
julientiron 0:cba942f8172a 314 Easyspin_RESERVED_REG07 = ((uint8_t) 0x0A),
julientiron 0:cba942f8172a 315 Easyspin_RESERVED_REG08 = ((uint8_t) 0x0B),
julientiron 0:cba942f8172a 316 Easyspin_RESERVED_REG09 = ((uint8_t) 0x0C),
julientiron 0:cba942f8172a 317 Easyspin_RESERVED_REG10 = ((uint8_t) 0x0D),
julientiron 0:cba942f8172a 318 Easyspin_T_FAST = ((uint8_t) 0x0E),
julientiron 0:cba942f8172a 319 Easyspin_TON_MIN = ((uint8_t) 0x0F),
julientiron 0:cba942f8172a 320 Easyspin_TOFF_MIN = ((uint8_t) 0x10),
julientiron 0:cba942f8172a 321 Easyspin_RESERVED_REG11 = ((uint8_t) 0x11),
julientiron 0:cba942f8172a 322 Easyspin_ADC_OUT = ((uint8_t) 0x12),
julientiron 0:cba942f8172a 323 Easyspin_OCD_TH = ((uint8_t) 0x13),
julientiron 0:cba942f8172a 324 Easyspin_RESERVED_REG12 = ((uint8_t) 0x14),
julientiron 0:cba942f8172a 325 Easyspin_STEP_MODE = ((uint8_t) 0x16),
julientiron 0:cba942f8172a 326 Easyspin_ALARM_EN = ((uint8_t) 0x17),
julientiron 0:cba942f8172a 327 Easyspin_CONFIG = ((uint8_t) 0x18),
julientiron 0:cba942f8172a 328 Easyspin_STATUS = ((uint8_t) 0x19),
julientiron 0:cba942f8172a 329 Easyspin_RESERVED_REG13 = ((uint8_t) 0x1A),
julientiron 0:cba942f8172a 330 Easyspin_RESERVED_REG14 = ((uint8_t) 0x1B),
julientiron 0:cba942f8172a 331 Easyspin_INEXISTENT_REG = ((uint8_t) 0x1F)
julientiron 0:cba942f8172a 332 } Easyspin_Registers_t;
julientiron 0:cba942f8172a 333
julientiron 0:cba942f8172a 334 /// Easyspin command set
julientiron 0:cba942f8172a 335 typedef enum {
julientiron 0:cba942f8172a 336 Easyspin_NOP = ((uint8_t) 0x00),
julientiron 0:cba942f8172a 337 Easyspin_SET_PARAM = ((uint8_t) 0x00),
julientiron 0:cba942f8172a 338 Easyspin_GET_PARAM = ((uint8_t) 0x20),
julientiron 0:cba942f8172a 339 Easyspin_ENABLE = ((uint8_t) 0xB8),
julientiron 0:cba942f8172a 340 Easyspin_DISABLE = ((uint8_t) 0xA8),
julientiron 0:cba942f8172a 341 Easyspin_GET_STATUS = ((uint8_t) 0xD0),
julientiron 0:cba942f8172a 342 Easyspin_RESERVED_CMD1 = ((uint8_t) 0xEB),
julientiron 0:cba942f8172a 343 Easyspin_RESERVED_CMD2 = ((uint8_t) 0xF8)
julientiron 0:cba942f8172a 344 } Easyspin_Commands_t;
julientiron 0:cba942f8172a 345
julientiron 0:cba942f8172a 346 /// Direction options
julientiron 0:cba942f8172a 347 typedef enum {
julientiron 0:cba942f8172a 348 FORWARD = 1,
julientiron 0:cba942f8172a 349 BACKWARD = 0
julientiron 0:cba942f8172a 350 } dir_t;
julientiron 0:cba942f8172a 351
julientiron 1:9efe863db15e 352 /// Rotation options
julientiron 1:9efe863db15e 353 typedef enum {
julientiron 1:9efe863db15e 354 RIGHT = 1,
julientiron 1:9efe863db15e 355 LEFT = 0
julientiron 1:9efe863db15e 356 } rot_t;
julientiron 1:9efe863db15e 357
julientiron 0:cba942f8172a 358 /// Shield state
julientiron 0:cba942f8172a 359 typedef enum {
julientiron 0:cba942f8172a 360 ACCELERATING = 0,
julientiron 0:cba942f8172a 361 DECELERATING = 1,
julientiron 0:cba942f8172a 362 STEADY = 2,
julientiron 0:cba942f8172a 363 INACTIVE= 3
julientiron 0:cba942f8172a 364 } shieldState_t;
julientiron 0:cba942f8172a 365
julientiron 0:cba942f8172a 366 /// Shield Commands
julientiron 0:cba942f8172a 367 typedef enum {
julientiron 0:cba942f8172a 368 RUN_CMD,
julientiron 0:cba942f8172a 369 MOVE_CMD,
julientiron 0:cba942f8172a 370 SOFT_STOP_CMD,
julientiron 0:cba942f8172a 371 NO_CMD
julientiron 0:cba942f8172a 372 } shieldCommand_t;
julientiron 0:cba942f8172a 373
julientiron 0:cba942f8172a 374 /// Easyspin shield parameters
julientiron 0:cba942f8172a 375 typedef struct {
julientiron 0:cba942f8172a 376 /// accumulator used to store speed increase smaller than 1 pps
julientiron 0:cba942f8172a 377 volatile uint32_t accu;
julientiron 0:cba942f8172a 378 /// Position in steps at the start of the goto or move commands
julientiron 0:cba942f8172a 379 volatile int32_t currentPosition;
julientiron 0:cba942f8172a 380 /// position in step at the end of the accelerating phase
julientiron 0:cba942f8172a 381 volatile uint32_t endAccPos;
julientiron 0:cba942f8172a 382 /// nb steps performed from the beggining of the goto or the move command
julientiron 0:cba942f8172a 383 volatile uint32_t relativePos;
julientiron 0:cba942f8172a 384 /// position in step at the start of the decelerating phase
julientiron 0:cba942f8172a 385 volatile uint32_t startDecPos;
julientiron 0:cba942f8172a 386 /// nb steps to perform for the goto or move commands
julientiron 0:cba942f8172a 387 volatile uint32_t stepsToTake;
julientiron 0:cba942f8172a 388
julientiron 0:cba942f8172a 389 /// acceleration in pps^2
julientiron 0:cba942f8172a 390 volatile uint16_t acceleration;
julientiron 0:cba942f8172a 391 /// deceleration in pps^2
julientiron 0:cba942f8172a 392 volatile uint16_t deceleration;
julientiron 0:cba942f8172a 393 /// max speed in pps (speed use for goto or move command)
julientiron 0:cba942f8172a 394 volatile uint16_t maxSpeed;
julientiron 0:cba942f8172a 395 /// min speed in pps
julientiron 0:cba942f8172a 396 volatile uint16_t minSpeed;
julientiron 0:cba942f8172a 397 /// current speed in pps
julientiron 0:cba942f8172a 398 volatile uint16_t speed;
julientiron 0:cba942f8172a 399
julientiron 0:cba942f8172a 400 /// command under execution
julientiron 0:cba942f8172a 401 volatile shieldCommand_t commandExecuted;
julientiron 0:cba942f8172a 402 /// FORWARD or BACKWARD direction
julientiron 0:cba942f8172a 403 volatile dir_t direction;
julientiron 0:cba942f8172a 404 /// Current State of the shield
julientiron 0:cba942f8172a 405 volatile shieldState_t motionState;
julientiron 0:cba942f8172a 406 }shieldParams_t;
julientiron 0:cba942f8172a 407
julientiron 0:cba942f8172a 408 /// Easyspin library class
julientiron 0:cba942f8172a 409 class Easyspin {
julientiron 0:cba942f8172a 410 public:
julientiron 0:cba942f8172a 411 // constructor:
julientiron 0:cba942f8172a 412 Easyspin();
julientiron 0:cba942f8172a 413
julientiron 0:cba942f8172a 414 /// @defgroup group1 Shield control functions
julientiron 0:cba942f8172a 415 ///@{
julientiron 0:cba942f8172a 416 void AttachFlagInterrupt(void (*callback)(void)); //Attach a user callback to the flag Interrupt
julientiron 0:cba942f8172a 417 void Begin(uint8_t nbShields); //Start the Easyspin library
julientiron 0:cba942f8172a 418 uint16_t GetAcceleration(uint8_t shieldId); //Return the acceleration in pps^2
julientiron 0:cba942f8172a 419 uint16_t GetCurrentSpeed(uint8_t shieldId); //Return the current speed in pps
julientiron 0:cba942f8172a 420 uint16_t GetDeceleration(uint8_t shieldId); //Return the deceleration in pps^2
julientiron 0:cba942f8172a 421 shieldState_t GetShieldState(uint8_t shieldId); //Return the shield state
julientiron 0:cba942f8172a 422 uint8_t GetFwVersion(void); //Return the FW version
julientiron 0:cba942f8172a 423 int32_t GetMark(uint8_t shieldId); //Return the mark position
julientiron 0:cba942f8172a 424 uint16_t GetMaxSpeed(uint8_t shieldId); //Return the max speed in pps
julientiron 0:cba942f8172a 425 uint16_t GetMinSpeed(uint8_t shieldId); //Return the min speed in pps
julientiron 0:cba942f8172a 426 int32_t GetPosition(uint8_t shieldId); //Return the ABS_POSITION (32b signed)
julientiron 0:cba942f8172a 427 void GoHome(uint8_t shieldId); //Move to the home position
julientiron 0:cba942f8172a 428 void GoMark(uint8_t shieldId); //Move to the Mark position
julientiron 0:cba942f8172a 429 void GoTo(uint8_t shieldId, int32_t targetPosition); //Go to the specified position
julientiron 0:cba942f8172a 430 void HardStop(uint8_t shieldId); //Stop the motor and disable the power bridge
julientiron 0:cba942f8172a 431 void Move(uint8_t shieldId, //Move the motor of the specified number of steps
julientiron 0:cba942f8172a 432 dir_t direction,
julientiron 0:cba942f8172a 433 uint32_t stepCount);
julientiron 0:cba942f8172a 434 void ResetAllShields(void); //Reset all Easyspin shields
julientiron 0:cba942f8172a 435 void Run(uint8_t shieldId, dir_t direction); //Run the motor
julientiron 0:cba942f8172a 436 bool SetAcceleration(uint8_t shieldId,uint16_t newAcc); //Set the acceleration in pps^2
julientiron 0:cba942f8172a 437 bool SetDeceleration(uint8_t shieldId,uint16_t newDec); //Set the deceleration in pps^2
julientiron 0:cba942f8172a 438 void SetHome(uint8_t shieldId); //Set current position to be the home position
julientiron 0:cba942f8172a 439 void SetMark(uint8_t shieldId); //Set current position to be the Markposition
julientiron 0:cba942f8172a 440 bool SetMaxSpeed(uint8_t shieldId,uint16_t newMaxSpeed); //Set the max speed in pps
julientiron 0:cba942f8172a 441 bool SetMinSpeed(uint8_t shieldId,uint16_t newMinSpeed); //Set the min speed in pps
julientiron 0:cba942f8172a 442 bool SoftStop(uint8_t shieldId); //Progressively stops the motor
julientiron 0:cba942f8172a 443 void WaitWhileActive(uint8_t shieldId); //Wait for the shield state becomes Inactive
julientiron 1:9efe863db15e 444 void Turn(rot_t rotation, uint16_t angle); //Turn left or right with the specified angle
julientiron 1:9efe863db15e 445 void Move_cm(dir_t direction, uint16_t distance); //Go forward or backward with the specified distance
julientiron 0:cba942f8172a 446 ///@}
julientiron 0:cba942f8172a 447
julientiron 0:cba942f8172a 448 /// @defgroup group2 Easyspin control functions
julientiron 0:cba942f8172a 449 ///@{
julientiron 0:cba942f8172a 450 void CmdDisable(uint8_t shieldId); //Send the Easyspin_DISABLE command
julientiron 0:cba942f8172a 451 void CmdEnable(uint8_t shieldId); //Send the Easyspin_ENABLE command
julientiron 0:cba942f8172a 452 uint32_t CmdGetParam(uint8_t shieldId, //Send the Easyspin_GET_PARAM command
julientiron 0:cba942f8172a 453 Easyspin_Registers_t param);
julientiron 0:cba942f8172a 454 uint16_t CmdGetStatus(uint8_t shieldId); // Send the Easyspin_GET_STATUS command
julientiron 0:cba942f8172a 455 void CmdNop(uint8_t shieldId); //Send the Easyspin_NOP command
julientiron 0:cba942f8172a 456 void CmdSetParam(uint8_t shieldId, //Send the Easyspin_SET_PARAM command
julientiron 0:cba942f8172a 457 Easyspin_Registers_t param,
julientiron 0:cba942f8172a 458 uint32_t value);
julientiron 0:cba942f8172a 459 uint16_t ReadStatusRegister(uint8_t shieldId); // Read the Easyspin_STATUS register without
julientiron 0:cba942f8172a 460 // clearing the flags
julientiron 0:cba942f8172a 461 void Reset(void); //Set the Easyspin reset pin
julientiron 0:cba942f8172a 462 void ReleaseReset(void); //Release the Easyspin reset pin
julientiron 0:cba942f8172a 463 void SelectStepMode(uint8_t shieldId, // Step mode selection
julientiron 0:cba942f8172a 464 Easyspin_STEP_SEL_t stepMod);
julientiron 0:cba942f8172a 465 void SetDirection(uint8_t shieldId, //Set the Easyspin direction pin
julientiron 0:cba942f8172a 466 dir_t direction);
julientiron 0:cba942f8172a 467 ///@}
julientiron 0:cba942f8172a 468
julientiron 0:cba942f8172a 469 /// @defgroup group4 Functions for timer ISRs only
julientiron 0:cba942f8172a 470 /// @brief To be used inside the library by the timer ISRs only
julientiron 0:cba942f8172a 471 /// Must not be used elsewhere.
julientiron 0:cba942f8172a 472 ///@{
julientiron 0:cba942f8172a 473 static class Easyspin *GetInstancePtr(void);
julientiron 0:cba942f8172a 474 void StepClockHandler(uint8_t shieldId);
julientiron 0:cba942f8172a 475 ///@}
julientiron 0:cba942f8172a 476
julientiron 0:cba942f8172a 477 private:
julientiron 0:cba942f8172a 478 void ApplySpeed(uint8_t pwmId, uint16_t newSpeed);
julientiron 0:cba942f8172a 479 void ComputeSpeedProfile(uint8_t shieldId, uint32_t nbSteps);
julientiron 0:cba942f8172a 480 int32_t ConvertPosition(uint32_t abs_position_reg);
julientiron 0:cba942f8172a 481 static void FlagInterruptHandler(void);
julientiron 0:cba942f8172a 482 void SendCommand(uint8_t shieldId, uint8_t param);
julientiron 0:cba942f8172a 483 void SetRegisterToPredefinedValues(uint8_t shieldId);
julientiron 0:cba942f8172a 484 void WriteBytes(uint8_t *pByteToTransmit, uint8_t *pReceivedByte);
julientiron 0:cba942f8172a 485 void PwmInit(uint8_t pwmId);
julientiron 0:cba942f8172a 486 void Pwm1SetFreq(uint16_t newFreq);
julientiron 0:cba942f8172a 487 void Pwm2SetFreq(uint16_t newFreq);
julientiron 0:cba942f8172a 488 void Pwm3SetFreq(uint16_t newFreq);
julientiron 0:cba942f8172a 489 void PwmStop(uint8_t pwmId);
julientiron 0:cba942f8172a 490 void SetShieldParamsToPredefinedValues(void);
julientiron 0:cba942f8172a 491 void StartMovement(uint8_t shieldId);
julientiron 0:cba942f8172a 492 uint8_t Tval_Current_to_Par(double Tval);
julientiron 0:cba942f8172a 493 uint8_t Tmin_Time_to_Par(double Tmin);
julientiron 1:9efe863db15e 494 void tick1();
julientiron 1:9efe863db15e 495 void tick2();
julientiron 0:cba942f8172a 496
julientiron 0:cba942f8172a 497 // variable members
julientiron 0:cba942f8172a 498 DigitalOut dir1;
julientiron 0:cba942f8172a 499 DigitalOut dir2;
julientiron 0:cba942f8172a 500 DigitalOut dir3;
julientiron 1:9efe863db15e 501 DigitalOut pwm1;
julientiron 1:9efe863db15e 502 DigitalOut pwm2;
julientiron 1:9efe863db15e 503 DigitalOut pwm3;
julientiron 0:cba942f8172a 504 DigitalOut reset;
julientiron 0:cba942f8172a 505 DigitalOut CS;
julientiron 1:9efe863db15e 506 Ticker ticker1;
julientiron 1:9efe863db15e 507 Ticker ticker2;
julientiron 1:9efe863db15e 508 Ticker ticker3;
julientiron 0:cba942f8172a 509 InterruptIn flag;
julientiron 0:cba942f8172a 510 SPI spi;
julientiron 0:cba942f8172a 511 shieldParams_t shieldPrm[MAX_NUMBER_OF_SHIELDS];
julientiron 0:cba942f8172a 512 static volatile class Easyspin *instancePtr;
julientiron 0:cba942f8172a 513 static volatile void(*flagInterruptCallback)(void);
julientiron 0:cba942f8172a 514 static volatile bool isrFlag;
julientiron 0:cba942f8172a 515 static volatile bool spiPreemtionByIsr;
julientiron 0:cba942f8172a 516 static volatile uint8_t numberOfShields;
julientiron 0:cba942f8172a 517 static const uint16_t prescalerArrayTimer0_1[PRESCALER_ARRAY_TIMER0_1_SIZE];
julientiron 0:cba942f8172a 518 static const uint16_t prescalerArrayTimer2[PRESCALER_ARRAY_TIMER2_SIZE];
julientiron 0:cba942f8172a 519 static uint8_t spiTxBursts[Easyspin_CMD_ARG_MAX_NB_BYTES][MAX_NUMBER_OF_SHIELDS];
julientiron 0:cba942f8172a 520 static uint8_t spiRxBursts[Easyspin_CMD_ARG_MAX_NB_BYTES][MAX_NUMBER_OF_SHIELDS];
julientiron 0:cba942f8172a 521 };
julientiron 0:cba942f8172a 522
julientiron 0:cba942f8172a 523 #ifdef _DEBUG_Easyspin
julientiron 0:cba942f8172a 524 uint16_t GetFreeRam (void);
julientiron 0:cba942f8172a 525 #endif
julientiron 0:cba942f8172a 526
julientiron 0:cba942f8172a 527 #endif /* #ifndef __Easyspin_H_INCLUDED */