ST / X_NUCLEO_IHM01A1

Dependencies:   X_NUCLEO_COMMON ST_INTERFACES

Dependents:   Stepper_Matlab_Control SunTracker_BLE Stepper_Matlab_Control MemsMotorControl ... more

Fork of X_NUCLEO_IHM01A1 by ST Expansion SW Team

Motor Control Library

Introduction

Library to handle the X-NUCLEO-IHM01A1 Motor Control Expansion Board based on the the L6474 component.

Daisy-Chain Configuration

This board can be stacked up to three times so that the L6474 components will be connected in daisy-chain configuration. For this purpose, some resistors must be correctly connected on the boards as depicted here below:

/media/uploads/Davidroid/daisychaintable.png

Platform compatibility

  • NUCLEO boards have been tested with the default configuration provided by the HelloWorld_IHM01A1 example.
  • LPCXpresso11U68 board has been tested with the following patch:
    • to connect with a wire from the LPCX’s D4 pin to the IHM01A1’s D9 pin;
    • to initialize the pwm PinName variable with D4 rather than D9.
  • FRDM-K64F board has been tested with the following patch:
    • to connect with a wire from the FRDM’s D4 pin to the IHM01A1’s D8 pin;
    • to initialize the standby_reset PinName variable with D4 rather than D8.

Example Applications

Committer:
Davidroid
Date:
Tue Feb 28 16:12:31 2017 +0000
Revision:
32:6e5198e46287
Parent:
30:a05820cfdba9
Fitting mbed coding style.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Davidroid 0:2887415a46cd 1 /**
Davidroid 10:c3824af0caf4 2 ******************************************************************************
Davidroid 10:c3824af0caf4 3 * @file l6474_class.h
Davidroid 20:a8e81b65f0af 4 * @author Davide Aliprandi, STMicroelectronics
Davidroid 10:c3824af0caf4 5 * @version V1.0.0
Davidroid 10:c3824af0caf4 6 * @date October 14th, 2015
Davidroid 10:c3824af0caf4 7 * @brief This file contains the class of an L6474 Motor Control component.
Davidroid 10:c3824af0caf4 8 ******************************************************************************
Davidroid 10:c3824af0caf4 9 * @attention
Davidroid 10:c3824af0caf4 10 *
Davidroid 10:c3824af0caf4 11 * <h2><center>&copy; COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
Davidroid 10:c3824af0caf4 12 *
Davidroid 10:c3824af0caf4 13 * Redistribution and use in source and binary forms, with or without modification,
Davidroid 10:c3824af0caf4 14 * are permitted provided that the following conditions are met:
Davidroid 10:c3824af0caf4 15 * 1. Redistributions of source code must retain the above copyright notice,
Davidroid 10:c3824af0caf4 16 * this list of conditions and the following disclaimer.
Davidroid 10:c3824af0caf4 17 * 2. Redistributions in binary form must reproduce the above copyright notice,
Davidroid 10:c3824af0caf4 18 * this list of conditions and the following disclaimer in the documentation
Davidroid 10:c3824af0caf4 19 * and/or other materials provided with the distribution.
Davidroid 10:c3824af0caf4 20 * 3. Neither the name of STMicroelectronics nor the names of its contributors
Davidroid 10:c3824af0caf4 21 * may be used to endorse or promote products derived from this software
Davidroid 10:c3824af0caf4 22 * without specific prior written permission.
Davidroid 10:c3824af0caf4 23 *
Davidroid 10:c3824af0caf4 24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
Davidroid 10:c3824af0caf4 25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
Davidroid 10:c3824af0caf4 26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
Davidroid 10:c3824af0caf4 27 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
Davidroid 10:c3824af0caf4 28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
Davidroid 10:c3824af0caf4 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
Davidroid 10:c3824af0caf4 30 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
Davidroid 10:c3824af0caf4 31 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
Davidroid 10:c3824af0caf4 32 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
Davidroid 10:c3824af0caf4 33 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Davidroid 10:c3824af0caf4 34 *
Davidroid 10:c3824af0caf4 35 ******************************************************************************
Davidroid 10:c3824af0caf4 36 */
Davidroid 0:2887415a46cd 37
Davidroid 0:2887415a46cd 38
Davidroid 23:58264db10a17 39 /* Generated with STM32CubeTOO -----------------------------------------------*/
Davidroid 0:2887415a46cd 40
Davidroid 0:2887415a46cd 41
Davidroid 0:2887415a46cd 42 /* Revision ------------------------------------------------------------------*/
Davidroid 0:2887415a46cd 43 /*
Davidroid 0:2887415a46cd 44 Repository: http://svn.x-nucleodev.codex.cro.st.com/svnroot/X-NucleoDev
Davidroid 0:2887415a46cd 45 Branch/Trunk/Tag: trunk
Davidroid 0:2887415a46cd 46 Based on: X-CUBE-SPN1/trunk/Drivers/BSP/Components/l6474/l6474.h
Davidroid 0:2887415a46cd 47 Revision: 0
Davidroid 0:2887415a46cd 48 */
Davidroid 0:2887415a46cd 49
Davidroid 0:2887415a46cd 50
Davidroid 0:2887415a46cd 51 /* Define to prevent recursive inclusion -------------------------------------*/
Davidroid 0:2887415a46cd 52
Davidroid 0:2887415a46cd 53 #ifndef __L6474_CLASS_H
Davidroid 0:2887415a46cd 54 #define __L6474_CLASS_H
Davidroid 0:2887415a46cd 55
Davidroid 0:2887415a46cd 56
Davidroid 0:2887415a46cd 57 /* Includes ------------------------------------------------------------------*/
Davidroid 0:2887415a46cd 58
Davidroid 0:2887415a46cd 59 /* ACTION 1 ------------------------------------------------------------------*
Davidroid 0:2887415a46cd 60 * Include here platform specific header files. *
Davidroid 0:2887415a46cd 61 *----------------------------------------------------------------------------*/
Davidroid 0:2887415a46cd 62 #include "mbed.h"
Davidroid 0:2887415a46cd 63 #include "DevSPI.h"
Davidroid 0:2887415a46cd 64 /* ACTION 2 ------------------------------------------------------------------*
Davidroid 0:2887415a46cd 65 * Include here component specific header files. *
Davidroid 0:2887415a46cd 66 *----------------------------------------------------------------------------*/
Davidroid 0:2887415a46cd 67 #include "l6474.h"
Davidroid 0:2887415a46cd 68 /* ACTION 3 ------------------------------------------------------------------*
Davidroid 0:2887415a46cd 69 * Include here interface specific header files. *
Davidroid 0:2887415a46cd 70 * *
Davidroid 0:2887415a46cd 71 * Example: *
Davidroid 28:f6093f7cdc09 72 * #include "HumiditySensor.h" *
Davidroid 28:f6093f7cdc09 73 * #include "TemperatureSensor.h" *
Davidroid 0:2887415a46cd 74 *----------------------------------------------------------------------------*/
Davidroid 28:f6093f7cdc09 75 #include "StepperMotor.h"
Davidroid 0:2887415a46cd 76
Davidroid 0:2887415a46cd 77
Davidroid 0:2887415a46cd 78 /* Classes -------------------------------------------------------------------*/
Davidroid 0:2887415a46cd 79
Davidroid 10:c3824af0caf4 80 /**
Davidroid 10:c3824af0caf4 81 * @brief Class representing an L6474 component.
Davidroid 0:2887415a46cd 82 */
Davidroid 4:83a1eb397a65 83 class L6474 : public StepperMotor
Davidroid 0:2887415a46cd 84 {
Davidroid 0:2887415a46cd 85 public:
Davidroid 0:2887415a46cd 86
Davidroid 0:2887415a46cd 87 /*** Constructor and Destructor Methods ***/
Davidroid 0:2887415a46cd 88
Davidroid 0:2887415a46cd 89 /**
Davidroid 0:2887415a46cd 90 * @brief Constructor.
Davidroid 7:f7e0c3621f77 91 * @param flag_irq pin name of the FLAG pin of the component.
Davidroid 4:83a1eb397a65 92 * @param standby_reset pin name of the STBY\RST pin of the component.
Davidroid 4:83a1eb397a65 93 * @param direction pin name of the DIR pin of the component.
Davidroid 4:83a1eb397a65 94 * @param pwm pin name of the PWM pin of the component.
Davidroid 4:83a1eb397a65 95 * @param ssel pin name of the SSEL pin of the SPI device to be used for communication.
Davidroid 4:83a1eb397a65 96 * @param spi SPI device to be used for communication.
Davidroid 0:2887415a46cd 97 */
Davidroid 7:f7e0c3621f77 98 L6474(PinName flag_irq, PinName standby_reset, PinName direction, PinName pwm, PinName ssel, DevSPI &spi) : StepperMotor(), flag_irq(flag_irq), standby_reset(standby_reset), direction(direction), pwm(pwm), ssel(ssel), dev_spi(spi)
Davidroid 0:2887415a46cd 99 {
Davidroid 17:35b9ca8c4bd6 100 /* Checking stackability. */
Davidroid 32:6e5198e46287 101 if (!(number_of_devices < MAX_NUMBER_OF_DEVICES)) {
Davidroid 17:35b9ca8c4bd6 102 error("Instantiation of the L6474 component failed: it can be stacked up to %d times.\r\n", MAX_NUMBER_OF_DEVICES);
Davidroid 32:6e5198e46287 103 }
Davidroid 17:35b9ca8c4bd6 104
Davidroid 0:2887415a46cd 105 /* ACTION 4 ----------------------------------------------------------*
Davidroid 0:2887415a46cd 106 * Initialize here the component's member variables, one variable per *
Davidroid 0:2887415a46cd 107 * line. *
Davidroid 0:2887415a46cd 108 * *
Davidroid 0:2887415a46cd 109 * Example: *
Davidroid 15:40470df81d9a 110 * measure = 0; *
Davidroid 15:40470df81d9a 111 * instance_id = number_of_instances++; *
Davidroid 0:2887415a46cd 112 *--------------------------------------------------------------------*/
Davidroid 18:2d6ab2b93685 113 error_handler_callback = 0;
Davidroid 18:2d6ab2b93685 114 device_instance = number_of_devices++;
Davidroid 18:2d6ab2b93685 115 memset(spi_tx_bursts, 0, L6474_CMD_ARG_MAX_NB_BYTES * MAX_NUMBER_OF_DEVICES * sizeof(uint8_t));
Davidroid 18:2d6ab2b93685 116 memset(spi_rx_bursts, 0, L6474_CMD_ARG_MAX_NB_BYTES * MAX_NUMBER_OF_DEVICES * sizeof(uint8_t));
Davidroid 0:2887415a46cd 117 }
Davidroid 0:2887415a46cd 118
Davidroid 0:2887415a46cd 119 /**
Davidroid 0:2887415a46cd 120 * @brief Destructor.
Davidroid 0:2887415a46cd 121 */
Davidroid 0:2887415a46cd 122 virtual ~L6474(void) {}
Davidroid 0:2887415a46cd 123
Davidroid 0:2887415a46cd 124
Davidroid 0:2887415a46cd 125 /*** Public Component Related Methods ***/
Davidroid 0:2887415a46cd 126
Davidroid 0:2887415a46cd 127 /* ACTION 5 --------------------------------------------------------------*
Davidroid 0:2887415a46cd 128 * Implement here the component's public methods, as wrappers of the C *
Davidroid 0:2887415a46cd 129 * component's functions. *
Davidroid 0:2887415a46cd 130 * They should be: *
Davidroid 0:2887415a46cd 131 * + Methods with the same name of the C component's virtual table's *
Davidroid 0:2887415a46cd 132 * functions (1); *
Davidroid 0:2887415a46cd 133 * + Methods with the same name of the C component's extended virtual *
Davidroid 0:2887415a46cd 134 * table's functions, if any (2). *
Davidroid 0:2887415a46cd 135 * *
Davidroid 0:2887415a46cd 136 * Example: *
Davidroid 0:2887415a46cd 137 * virtual int GetValue(float *pData) //(1) *
Davidroid 0:2887415a46cd 138 * { *
Davidroid 0:2887415a46cd 139 * return COMPONENT_GetValue(float *pfData); *
Davidroid 0:2887415a46cd 140 * } *
Davidroid 0:2887415a46cd 141 * *
Davidroid 0:2887415a46cd 142 * virtual int EnableFeature(void) //(2) *
Davidroid 0:2887415a46cd 143 * { *
Davidroid 0:2887415a46cd 144 * return COMPONENT_EnableFeature(); *
Davidroid 0:2887415a46cd 145 * } *
Davidroid 0:2887415a46cd 146 *------------------------------------------------------------------------*/
Davidroid 7:f7e0c3621f77 147 /**
Davidroid 12:9f4b9540ff3e 148 * @brief Initializing the component in 1/16 Microstepping mode.
Davidroid 8:42e0b00b1e4d 149 * @param init Pointer to device specific initalization structure.
Davidroid 7:f7e0c3621f77 150 * @retval "0" in case of success, an error code otherwise.
Davidroid 7:f7e0c3621f77 151 */
Davidroid 16:bec7dd79f328 152 virtual int Init(void *init = NULL)
Davidroid 0:2887415a46cd 153 {
Davidroid 21:83138e702683 154 return (int) L6474_Init((void *) init);
Davidroid 0:2887415a46cd 155 }
Davidroid 0:2887415a46cd 156
Davidroid 7:f7e0c3621f77 157 /**
Davidroid 7:f7e0c3621f77 158 * @brief Getting the ID of the component.
Davidroid 8:42e0b00b1e4d 159 * @param id Pointer to an allocated variable to store the ID into.
Davidroid 7:f7e0c3621f77 160 * @retval "0" in case of success, an error code otherwise.
Davidroid 7:f7e0c3621f77 161 */
Davidroid 17:35b9ca8c4bd6 162 virtual int ReadID(uint8_t *id = NULL)
Davidroid 0:2887415a46cd 163 {
Davidroid 0:2887415a46cd 164 return (int) L6474_ReadID((uint8_t *) id);
Davidroid 0:2887415a46cd 165 }
Davidroid 0:2887415a46cd 166
Davidroid 7:f7e0c3621f77 167 /**
Davidroid 7:f7e0c3621f77 168 * @brief Getting the value of the Status Register.
Davidroid 7:f7e0c3621f77 169 * @param None.
Davidroid 7:f7e0c3621f77 170 * @retval None.
Davidroid 25:1c3146315f16 171 * @note The Status Register's flags are cleared, contrary to the
Davidroid 25:1c3146315f16 172 * ReadStatusRegister() method.
Davidroid 7:f7e0c3621f77 173 */
Davidroid 4:83a1eb397a65 174 virtual unsigned int GetStatus(void)
Davidroid 0:2887415a46cd 175 {
Davidroid 4:83a1eb397a65 176 return (unsigned int) L6474_CmdGetStatus();
Davidroid 0:2887415a46cd 177 }
Davidroid 0:2887415a46cd 178
Davidroid 26:fd83fecf1ef5 179 /**
Davidroid 7:f7e0c3621f77 180 * @brief Getting a parameter.
Davidroid 25:1c3146315f16 181 * @param parameter A parameter's register address.
Davidroid 8:42e0b00b1e4d 182 * @retval The parameter's value.
Davidroid 25:1c3146315f16 183 * @note The Status Register's flags are cleared, contrary to the
Davidroid 25:1c3146315f16 184 * ReadStatusRegister() method.
Davidroid 25:1c3146315f16 185 * The parameter can be one of the following:
Davidroid 7:f7e0c3621f77 186 * + L6474_ABS_POS
Davidroid 7:f7e0c3621f77 187 * + L6474_EL_POS
Davidroid 7:f7e0c3621f77 188 * + L6474_MARK
Davidroid 7:f7e0c3621f77 189 * + L6474_RESERVED_REG01
Davidroid 7:f7e0c3621f77 190 * + L6474_RESERVED_REG02
Davidroid 7:f7e0c3621f77 191 * + L6474_RESERVED_REG03
Davidroid 7:f7e0c3621f77 192 * + L6474_RESERVED_REG04
Davidroid 7:f7e0c3621f77 193 * + L6474_RESERVED_REG05
Davidroid 7:f7e0c3621f77 194 * + L6474_RESERVED_REG06
Davidroid 18:2d6ab2b93685 195 * + L6474_TVAL : value in mA
Davidroid 7:f7e0c3621f77 196 * + L6474_RESERVED_REG07
Davidroid 7:f7e0c3621f77 197 * + L6474_RESERVED_REG08
Davidroid 7:f7e0c3621f77 198 * + L6474_RESERVED_REG09
Davidroid 7:f7e0c3621f77 199 * + L6474_RESERVED_REG10
Davidroid 7:f7e0c3621f77 200 * + L6474_T_FAST
Davidroid 18:2d6ab2b93685 201 * + L6474_TON_MIN : value in us
Davidroid 18:2d6ab2b93685 202 * + L6474_TOFF_MIN : value in us
Davidroid 7:f7e0c3621f77 203 * + L6474_RESERVED_REG11
Davidroid 7:f7e0c3621f77 204 * + L6474_ADC_OUT
Davidroid 7:f7e0c3621f77 205 * + L6474_OCD_TH
Davidroid 7:f7e0c3621f77 206 * + L6474_RESERVED_REG12
Davidroid 7:f7e0c3621f77 207 * + L6474_STEP_MODE
Davidroid 7:f7e0c3621f77 208 * + L6474_ALARM_EN
Davidroid 7:f7e0c3621f77 209 * + L6474_CONFIG
Davidroid 7:f7e0c3621f77 210 * + L6474_STATUS
Davidroid 7:f7e0c3621f77 211 * + L6474_RESERVED_REG13
Davidroid 7:f7e0c3621f77 212 * + L6474_RESERVED_REG14
Davidroid 7:f7e0c3621f77 213 * + L6474_INEXISTENT_REG
Davidroid 7:f7e0c3621f77 214 */
Davidroid 18:2d6ab2b93685 215 virtual float GetParameter(unsigned int parameter)
Davidroid 0:2887415a46cd 216 {
Davidroid 18:2d6ab2b93685 217 unsigned int register_value = (unsigned int) L6474_CmdGetParam((L6474_Registers_t) parameter);
Davidroid 18:2d6ab2b93685 218 float value;
Davidroid 18:2d6ab2b93685 219
Davidroid 32:6e5198e46287 220 switch ((L6474_Registers_t) parameter) {
Davidroid 18:2d6ab2b93685 221 case L6474_TVAL:
Davidroid 18:2d6ab2b93685 222 value = L6474_Par_to_Tval_Current((float) register_value);
Davidroid 18:2d6ab2b93685 223 break;
Davidroid 18:2d6ab2b93685 224 case L6474_TON_MIN:
Davidroid 18:2d6ab2b93685 225 case L6474_TOFF_MIN:
Davidroid 18:2d6ab2b93685 226 value = L6474_Par_to_Tmin_Time((float) register_value);
Davidroid 18:2d6ab2b93685 227 break;
Davidroid 18:2d6ab2b93685 228 default:
Davidroid 18:2d6ab2b93685 229 value = (float) register_value;
Davidroid 18:2d6ab2b93685 230 break;
Davidroid 18:2d6ab2b93685 231 }
Davidroid 18:2d6ab2b93685 232
Davidroid 18:2d6ab2b93685 233 return value;
Davidroid 4:83a1eb397a65 234 }
Davidroid 4:83a1eb397a65 235
Davidroid 8:42e0b00b1e4d 236 /**
Davidroid 8:42e0b00b1e4d 237 * @brief Getting the position.
Davidroid 8:42e0b00b1e4d 238 * @param None.
Davidroid 8:42e0b00b1e4d 239 * @retval The position.
Davidroid 8:42e0b00b1e4d 240 */
Davidroid 4:83a1eb397a65 241 virtual signed int GetPosition(void)
Davidroid 4:83a1eb397a65 242 {
Davidroid 4:83a1eb397a65 243 return (signed int) L6474_GetPosition();
Davidroid 0:2887415a46cd 244 }
Davidroid 0:2887415a46cd 245
Davidroid 8:42e0b00b1e4d 246 /**
Davidroid 8:42e0b00b1e4d 247 * @brief Getting the marked position.
Davidroid 8:42e0b00b1e4d 248 * @param None.
Davidroid 8:42e0b00b1e4d 249 * @retval The marked position.
Davidroid 8:42e0b00b1e4d 250 */
Davidroid 4:83a1eb397a65 251 virtual signed int GetMark(void)
Davidroid 0:2887415a46cd 252 {
Davidroid 4:83a1eb397a65 253 return (signed int) L6474_GetMark();
Davidroid 4:83a1eb397a65 254 }
Davidroid 8:42e0b00b1e4d 255
Davidroid 8:42e0b00b1e4d 256 /**
Davidroid 8:42e0b00b1e4d 257 * @brief Getting the current speed in pps.
Davidroid 8:42e0b00b1e4d 258 * @param None.
Davidroid 8:42e0b00b1e4d 259 * @retval The current speed in pps.
Davidroid 8:42e0b00b1e4d 260 */
Davidroid 4:83a1eb397a65 261 virtual unsigned int GetSpeed(void)
Davidroid 0:2887415a46cd 262 {
Davidroid 4:83a1eb397a65 263 return (unsigned int) L6474_GetCurrentSpeed();
Davidroid 0:2887415a46cd 264 }
Davidroid 0:2887415a46cd 265
Davidroid 8:42e0b00b1e4d 266 /**
Davidroid 8:42e0b00b1e4d 267 * @brief Getting the maximum speed in pps.
Davidroid 8:42e0b00b1e4d 268 * @param None.
Davidroid 8:42e0b00b1e4d 269 * @retval The maximum speed in pps.
Davidroid 8:42e0b00b1e4d 270 */
Davidroid 4:83a1eb397a65 271 virtual unsigned int GetMaxSpeed(void)
Davidroid 4:83a1eb397a65 272 {
Davidroid 4:83a1eb397a65 273 return (unsigned int) L6474_GetMaxSpeed();
Davidroid 4:83a1eb397a65 274 }
Davidroid 4:83a1eb397a65 275
Davidroid 8:42e0b00b1e4d 276 /**
Davidroid 8:42e0b00b1e4d 277 * @brief Getting the minimum speed in pps.
Davidroid 8:42e0b00b1e4d 278 * @param None.
Davidroid 8:42e0b00b1e4d 279 * @retval The minimum speed in pps.
Davidroid 8:42e0b00b1e4d 280 */
Davidroid 4:83a1eb397a65 281 virtual unsigned int GetMinSpeed(void)
Davidroid 0:2887415a46cd 282 {
Davidroid 4:83a1eb397a65 283 return (unsigned int) L6474_GetMinSpeed();
Davidroid 4:83a1eb397a65 284 }
Davidroid 4:83a1eb397a65 285
Davidroid 8:42e0b00b1e4d 286 /**
Davidroid 8:42e0b00b1e4d 287 * @brief Getting the acceleration in pps^2.
Davidroid 8:42e0b00b1e4d 288 * @param None.
Davidroid 8:42e0b00b1e4d 289 * @retval The acceleration in pps^2.
Davidroid 8:42e0b00b1e4d 290 */
Davidroid 4:83a1eb397a65 291 virtual unsigned int GetAcceleration(void)
Davidroid 4:83a1eb397a65 292 {
Davidroid 4:83a1eb397a65 293 return (unsigned int) L6474_GetAcceleration();
Davidroid 0:2887415a46cd 294 }
Davidroid 0:2887415a46cd 295
Davidroid 8:42e0b00b1e4d 296 /**
Davidroid 8:42e0b00b1e4d 297 * @brief Getting the deceleration in pps^2.
Davidroid 8:42e0b00b1e4d 298 * @param None.
Davidroid 8:42e0b00b1e4d 299 * @retval The deceleration in pps^2.
Davidroid 8:42e0b00b1e4d 300 */
Davidroid 4:83a1eb397a65 301 virtual unsigned int GetDeceleration(void)
Davidroid 0:2887415a46cd 302 {
Davidroid 4:83a1eb397a65 303 return (unsigned int) L6474_GetDeceleration();
Davidroid 0:2887415a46cd 304 }
Davidroid 0:2887415a46cd 305
Davidroid 8:42e0b00b1e4d 306 /**
Davidroid 8:42e0b00b1e4d 307 * @brief Getting the direction of rotation.
Davidroid 8:42e0b00b1e4d 308 * @param None.
Davidroid 8:42e0b00b1e4d 309 * @retval The direction of rotation.
Davidroid 8:42e0b00b1e4d 310 */
Davidroid 5:d3c78f12a78d 311 virtual direction_t GetDirection(void)
Davidroid 5:d3c78f12a78d 312 {
Davidroid 5:d3c78f12a78d 313 return (direction_t) (L6474_GetDirection() == FORWARD ? StepperMotor::FWD : StepperMotor::BWD);
Davidroid 5:d3c78f12a78d 314 }
Davidroid 5:d3c78f12a78d 315
Davidroid 26:fd83fecf1ef5 316 /**
Davidroid 25:1c3146315f16 317 * @brief Setting a parameter.
Davidroid 25:1c3146315f16 318 * @param parameter A parameter's register address.
Davidroid 25:1c3146315f16 319 * @param value The parameter's value.
Davidroid 25:1c3146315f16 320 * @retval None.
Davidroid 25:1c3146315f16 321 * @note The parameter can be one of the following:
Davidroid 7:f7e0c3621f77 322 * + L6474_ABS_POS
Davidroid 7:f7e0c3621f77 323 * + L6474_EL_POS
Davidroid 7:f7e0c3621f77 324 * + L6474_MARK
Davidroid 7:f7e0c3621f77 325 * + L6474_RESERVED_REG01
Davidroid 7:f7e0c3621f77 326 * + L6474_RESERVED_REG02
Davidroid 7:f7e0c3621f77 327 * + L6474_RESERVED_REG03
Davidroid 7:f7e0c3621f77 328 * + L6474_RESERVED_REG04
Davidroid 7:f7e0c3621f77 329 * + L6474_RESERVED_REG05
Davidroid 7:f7e0c3621f77 330 * + L6474_RESERVED_REG06
Davidroid 18:2d6ab2b93685 331 * + L6474_TVAL : value in mA
Davidroid 7:f7e0c3621f77 332 * + L6474_RESERVED_REG07
Davidroid 7:f7e0c3621f77 333 * + L6474_RESERVED_REG08
Davidroid 7:f7e0c3621f77 334 * + L6474_RESERVED_REG09
Davidroid 7:f7e0c3621f77 335 * + L6474_RESERVED_REG10
Davidroid 7:f7e0c3621f77 336 * + L6474_T_FAST
Davidroid 18:2d6ab2b93685 337 * + L6474_TON_MIN : value in us
Davidroid 18:2d6ab2b93685 338 * + L6474_TOFF_MIN : value in us
Davidroid 7:f7e0c3621f77 339 * + L6474_RESERVED_REG11
Davidroid 7:f7e0c3621f77 340 * + L6474_ADC_OUT
Davidroid 7:f7e0c3621f77 341 * + L6474_OCD_TH
Davidroid 7:f7e0c3621f77 342 * + L6474_RESERVED_REG12
Davidroid 7:f7e0c3621f77 343 * + L6474_STEP_MODE
Davidroid 7:f7e0c3621f77 344 * + L6474_ALARM_EN
Davidroid 7:f7e0c3621f77 345 * + L6474_CONFIG
Davidroid 7:f7e0c3621f77 346 * + L6474_STATUS
Davidroid 7:f7e0c3621f77 347 * + L6474_RESERVED_REG13
Davidroid 7:f7e0c3621f77 348 * + L6474_RESERVED_REG14
Davidroid 7:f7e0c3621f77 349 * + L6474_INEXISTENT_REG
Davidroid 25:1c3146315f16 350 * @warning Some registers can only be written in particular conditions (see L6474's datasheet).
Davidroid 25:1c3146315f16 351 * Any attempt to write one of those registers when the conditions are not satisfied
Davidroid 25:1c3146315f16 352 * causes the command to be ignored and the NOTPERF_CMD flag to rise at the end of the
Davidroid 25:1c3146315f16 353 * last argument byte. Any attempt to set an inexistent register (wrong address value)
Davidroid 25:1c3146315f16 354 * causes the command to be ignored and the WRONG_CMD flag to rise.
Davidroid 25:1c3146315f16 355 * For example, setting some parameters requires first to disable the power bridge;
Davidroid 25:1c3146315f16 356 * this can be done through the SoftHiZ() method.
Davidroid 25:1c3146315f16 357 * They are the following:
Davidroid 25:1c3146315f16 358 * + L6474_EL_POS
Davidroid 25:1c3146315f16 359 * + L6474_T_FAST
Davidroid 25:1c3146315f16 360 * + L6474_TON_MIN : value in us
Davidroid 25:1c3146315f16 361 * + L6474_TOFF_MIN : value in us
Davidroid 25:1c3146315f16 362 * + L6474_ADC_OUT
Davidroid 25:1c3146315f16 363 * + L6474_STEP_MODE
Davidroid 25:1c3146315f16 364 * + L6474_CONFIG
Davidroid 25:1c3146315f16 365 * + L6474_STATUS
Davidroid 7:f7e0c3621f77 366 */
Davidroid 18:2d6ab2b93685 367 virtual void SetParameter(unsigned int parameter, float value)
Davidroid 0:2887415a46cd 368 {
Davidroid 18:2d6ab2b93685 369 float register_value;
Davidroid 18:2d6ab2b93685 370
Davidroid 32:6e5198e46287 371 switch ((L6474_Registers_t) parameter) {
Davidroid 18:2d6ab2b93685 372 case L6474_TVAL:
Davidroid 18:2d6ab2b93685 373 register_value = L6474_Tval_Current_to_Par(value);
Davidroid 18:2d6ab2b93685 374 break;
Davidroid 18:2d6ab2b93685 375 case L6474_TON_MIN:
Davidroid 18:2d6ab2b93685 376 case L6474_TOFF_MIN:
Davidroid 18:2d6ab2b93685 377 register_value = L6474_Tmin_Time_to_Par(value);
Davidroid 18:2d6ab2b93685 378 break;
Davidroid 18:2d6ab2b93685 379 default:
Davidroid 18:2d6ab2b93685 380 register_value = value;
Davidroid 18:2d6ab2b93685 381 break;
Davidroid 18:2d6ab2b93685 382 }
Davidroid 18:2d6ab2b93685 383
Davidroid 18:2d6ab2b93685 384 L6474_CmdSetParam((L6474_Registers_t) parameter, (unsigned int) register_value);
Davidroid 0:2887415a46cd 385 }
Davidroid 0:2887415a46cd 386
Davidroid 8:42e0b00b1e4d 387 /**
Davidroid 8:42e0b00b1e4d 388 * @brief Setting the current position to be the home position.
Davidroid 8:42e0b00b1e4d 389 * @param None.
Davidroid 8:42e0b00b1e4d 390 * @retval None.
Davidroid 8:42e0b00b1e4d 391 */
Davidroid 4:83a1eb397a65 392 virtual void SetHome(void)
Davidroid 0:2887415a46cd 393 {
Davidroid 4:83a1eb397a65 394 L6474_SetHome();
Davidroid 4:83a1eb397a65 395 }
Davidroid 4:83a1eb397a65 396
Davidroid 8:42e0b00b1e4d 397 /**
Davidroid 8:42e0b00b1e4d 398 * @brief Setting the current position to be the marked position.
Davidroid 8:42e0b00b1e4d 399 * @param None.
Davidroid 8:42e0b00b1e4d 400 * @retval None.
Davidroid 8:42e0b00b1e4d 401 */
Davidroid 4:83a1eb397a65 402 virtual void SetMark(void)
Davidroid 4:83a1eb397a65 403 {
Davidroid 4:83a1eb397a65 404 L6474_SetMark();
Davidroid 0:2887415a46cd 405 }
Davidroid 0:2887415a46cd 406
Davidroid 8:42e0b00b1e4d 407 /**
Davidroid 8:42e0b00b1e4d 408 * @brief Setting the maximum speed in pps.
Davidroid 8:42e0b00b1e4d 409 * @param speed The maximum speed in pps.
Davidroid 25:1c3146315f16 410 * @retval "true" in case of success, "false" otherwise.
Davidroid 8:42e0b00b1e4d 411 */
Davidroid 25:1c3146315f16 412 virtual bool SetMaxSpeed(unsigned int speed)
Davidroid 4:83a1eb397a65 413 {
Davidroid 4:83a1eb397a65 414 L6474_SetMaxSpeed((unsigned int) speed);
Davidroid 25:1c3146315f16 415 return true;
Davidroid 0:2887415a46cd 416 }
Davidroid 0:2887415a46cd 417
Davidroid 8:42e0b00b1e4d 418 /**
Davidroid 8:42e0b00b1e4d 419 * @brief Setting the minimum speed in pps.
Davidroid 8:42e0b00b1e4d 420 * @param speed The minimum speed in pps.
Davidroid 25:1c3146315f16 421 * @retval "true" in case of success, "false" otherwise.
Davidroid 8:42e0b00b1e4d 422 */
Davidroid 25:1c3146315f16 423 virtual bool SetMinSpeed(unsigned int speed)
Davidroid 0:2887415a46cd 424 {
Davidroid 4:83a1eb397a65 425 L6474_SetMinSpeed((unsigned int) speed);
Davidroid 25:1c3146315f16 426 return true;
Davidroid 0:2887415a46cd 427 }
Davidroid 0:2887415a46cd 428
Davidroid 8:42e0b00b1e4d 429 /**
Davidroid 8:42e0b00b1e4d 430 * @brief Setting the acceleration in pps^2.
Davidroid 8:42e0b00b1e4d 431 * @param acceleration The acceleration in pps^2.
Davidroid 25:1c3146315f16 432 * @retval "true" in case of success, "false" otherwise.
Davidroid 8:42e0b00b1e4d 433 */
Davidroid 25:1c3146315f16 434 virtual bool SetAcceleration(unsigned int acceleration)
Davidroid 0:2887415a46cd 435 {
Davidroid 4:83a1eb397a65 436 L6474_SetAcceleration((unsigned int) acceleration);
Davidroid 25:1c3146315f16 437 return true;
Davidroid 0:2887415a46cd 438 }
Davidroid 0:2887415a46cd 439
Davidroid 8:42e0b00b1e4d 440 /**
Davidroid 8:42e0b00b1e4d 441 * @brief Setting the deceleration in pps^2.
Davidroid 8:42e0b00b1e4d 442 * @param deceleration The deceleration in pps^2.
Davidroid 25:1c3146315f16 443 * @retval "true" in case of success, "false" otherwise.
Davidroid 8:42e0b00b1e4d 444 */
Davidroid 25:1c3146315f16 445 virtual bool SetDeceleration(unsigned int deceleration)
Davidroid 0:2887415a46cd 446 {
Davidroid 4:83a1eb397a65 447 L6474_SetDeceleration((unsigned int) deceleration);
Davidroid 25:1c3146315f16 448 return true;
Davidroid 4:83a1eb397a65 449 }
Davidroid 4:83a1eb397a65 450
Davidroid 8:42e0b00b1e4d 451 /**
Davidroid 8:42e0b00b1e4d 452 * @brief Going to a specified position.
Davidroid 8:42e0b00b1e4d 453 * @param position The desired position.
Davidroid 8:42e0b00b1e4d 454 * @retval None.
Davidroid 8:42e0b00b1e4d 455 */
Davidroid 4:83a1eb397a65 456 virtual void GoTo(signed int position)
Davidroid 4:83a1eb397a65 457 {
Davidroid 4:83a1eb397a65 458 L6474_GoTo((signed int) position);
Davidroid 0:2887415a46cd 459 }
Davidroid 0:2887415a46cd 460
Davidroid 8:42e0b00b1e4d 461 /**
Davidroid 8:42e0b00b1e4d 462 * @brief Going to the home position.
Davidroid 8:42e0b00b1e4d 463 * @param None.
Davidroid 8:42e0b00b1e4d 464 * @retval None.
Davidroid 8:42e0b00b1e4d 465 */
Davidroid 0:2887415a46cd 466 virtual void GoHome(void)
Davidroid 0:2887415a46cd 467 {
Davidroid 0:2887415a46cd 468 L6474_GoHome();
Davidroid 0:2887415a46cd 469 }
Davidroid 0:2887415a46cd 470
Davidroid 8:42e0b00b1e4d 471 /**
Davidroid 8:42e0b00b1e4d 472 * @brief Going to the marked position.
Davidroid 8:42e0b00b1e4d 473 * @param None.
Davidroid 8:42e0b00b1e4d 474 * @retval None.
Davidroid 8:42e0b00b1e4d 475 */
Davidroid 0:2887415a46cd 476 virtual void GoMark(void)
Davidroid 0:2887415a46cd 477 {
Davidroid 0:2887415a46cd 478 L6474_GoMark();
Davidroid 0:2887415a46cd 479 }
Davidroid 0:2887415a46cd 480
Davidroid 8:42e0b00b1e4d 481 /**
Davidroid 8:42e0b00b1e4d 482 * @brief Running the motor towards a specified direction.
Davidroid 8:42e0b00b1e4d 483 * @param direction The direction of rotation.
Davidroid 8:42e0b00b1e4d 484 * @retval None.
Davidroid 8:42e0b00b1e4d 485 */
Davidroid 4:83a1eb397a65 486 virtual void Run(direction_t direction)
Davidroid 4:83a1eb397a65 487 {
Davidroid 5:d3c78f12a78d 488 L6474_Run((motorDir_t) (direction == StepperMotor::FWD ? FORWARD : BACKWARD));
Davidroid 4:83a1eb397a65 489 }
Davidroid 4:83a1eb397a65 490
Davidroid 8:42e0b00b1e4d 491 /**
Davidroid 8:42e0b00b1e4d 492 * @brief Moving the motor towards a specified direction for a certain number of steps.
Davidroid 8:42e0b00b1e4d 493 * @param direction The direction of rotation.
Davidroid 8:42e0b00b1e4d 494 * @param steps The desired number of steps.
Davidroid 8:42e0b00b1e4d 495 * @retval None.
Davidroid 8:42e0b00b1e4d 496 */
Davidroid 4:83a1eb397a65 497 virtual void Move(direction_t direction, unsigned int steps)
Davidroid 0:2887415a46cd 498 {
Davidroid 5:d3c78f12a78d 499 L6474_Move((motorDir_t) (direction == StepperMotor::FWD ? FORWARD : BACKWARD), (unsigned int) steps);
Davidroid 4:83a1eb397a65 500 }
Davidroid 4:83a1eb397a65 501
Davidroid 8:42e0b00b1e4d 502 /**
Davidroid 13:ba2728afe4c2 503 * @brief Stopping the motor through an immediate deceleration up to zero speed.
Davidroid 8:42e0b00b1e4d 504 * @param None.
Davidroid 8:42e0b00b1e4d 505 * @retval None.
Davidroid 8:42e0b00b1e4d 506 */
Davidroid 4:83a1eb397a65 507 virtual void SoftStop(void)
Davidroid 4:83a1eb397a65 508 {
Davidroid 4:83a1eb397a65 509 L6474_SoftStop();
Davidroid 0:2887415a46cd 510 }
Davidroid 0:2887415a46cd 511
Davidroid 8:42e0b00b1e4d 512 /**
Davidroid 13:ba2728afe4c2 513 * @brief Stopping the motor through an immediate infinite deceleration.
Davidroid 8:42e0b00b1e4d 514 * @param None.
Davidroid 8:42e0b00b1e4d 515 * @retval None.
Davidroid 8:42e0b00b1e4d 516 */
Davidroid 0:2887415a46cd 517 virtual void HardStop(void)
Davidroid 0:2887415a46cd 518 {
Davidroid 0:2887415a46cd 519 L6474_HardStop();
Davidroid 0:2887415a46cd 520 }
Davidroid 0:2887415a46cd 521
Davidroid 8:42e0b00b1e4d 522 /**
Davidroid 13:ba2728afe4c2 523 * @brief Disabling the power bridge after performing a deceleration to zero.
Davidroid 13:ba2728afe4c2 524 * @param None.
Davidroid 13:ba2728afe4c2 525 * @retval None.
Davidroid 13:ba2728afe4c2 526 */
Davidroid 13:ba2728afe4c2 527 virtual void SoftHiZ(void)
Davidroid 13:ba2728afe4c2 528 {
Davidroid 13:ba2728afe4c2 529 L6474_SoftStop();
Davidroid 13:ba2728afe4c2 530 L6474_CmdDisable();
Davidroid 13:ba2728afe4c2 531 }
Davidroid 13:ba2728afe4c2 532
Davidroid 13:ba2728afe4c2 533 /**
Davidroid 13:ba2728afe4c2 534 * @brief Disabling the power bridge immediately.
Davidroid 13:ba2728afe4c2 535 * @param None.
Davidroid 13:ba2728afe4c2 536 * @retval None.
Davidroid 13:ba2728afe4c2 537 */
Davidroid 13:ba2728afe4c2 538 virtual void HardHiZ(void)
Davidroid 13:ba2728afe4c2 539 {
Davidroid 13:ba2728afe4c2 540 L6474_HardStop();
Davidroid 13:ba2728afe4c2 541 L6474_CmdDisable();
Davidroid 13:ba2728afe4c2 542 }
Davidroid 13:ba2728afe4c2 543
Davidroid 13:ba2728afe4c2 544 /**
Davidroid 8:42e0b00b1e4d 545 * @brief Waiting while the motor is active.
Davidroid 8:42e0b00b1e4d 546 * @param None.
Davidroid 8:42e0b00b1e4d 547 * @retval None.
Davidroid 8:42e0b00b1e4d 548 */
Davidroid 7:f7e0c3621f77 549 virtual void WaitWhileActive(void)
Davidroid 7:f7e0c3621f77 550 {
Davidroid 7:f7e0c3621f77 551 L6474_WaitWhileActive();
Davidroid 7:f7e0c3621f77 552 }
Davidroid 7:f7e0c3621f77 553
Davidroid 7:f7e0c3621f77 554 /**
Davidroid 7:f7e0c3621f77 555 * @brief Getting the device state.
Davidroid 7:f7e0c3621f77 556 * @param None.
Davidroid 7:f7e0c3621f77 557 * @retval The device state.
Davidroid 7:f7e0c3621f77 558 * @note The device state can be one of the following:
Davidroid 7:f7e0c3621f77 559 * + ACCELERATING
Davidroid 7:f7e0c3621f77 560 * + DECELERATING
Davidroid 7:f7e0c3621f77 561 * + STEADY
Davidroid 7:f7e0c3621f77 562 * + INACTIVE
Davidroid 7:f7e0c3621f77 563 */
Davidroid 4:83a1eb397a65 564 virtual motorState_t GetDeviceState(void)
Davidroid 0:2887415a46cd 565 {
Davidroid 4:83a1eb397a65 566 return (motorState_t) L6474_GetDeviceState();
Davidroid 0:2887415a46cd 567 }
Davidroid 0:2887415a46cd 568
Davidroid 7:f7e0c3621f77 569 /**
Davidroid 7:f7e0c3621f77 570 * @brief Reading the Status Register.
Davidroid 7:f7e0c3621f77 571 * @param None.
Davidroid 7:f7e0c3621f77 572 * @retval None.
Davidroid 25:1c3146315f16 573 * @note The Status Register's flags are not cleared, contrary to the
Davidroid 25:1c3146315f16 574 * GetStatus() method.
Davidroid 7:f7e0c3621f77 575 */
Davidroid 0:2887415a46cd 576 virtual uint16_t ReadStatusRegister(void)
Davidroid 0:2887415a46cd 577 {
Davidroid 0:2887415a46cd 578 return (uint16_t) L6474_ReadStatusRegister();
Davidroid 0:2887415a46cd 579 }
Davidroid 0:2887415a46cd 580
Davidroid 7:f7e0c3621f77 581 /**
Davidroid 25:1c3146315f16 582 * @brief Setting the Step Mode.
Davidroid 25:1c3146315f16 583 * @param step_mode The Step Mode.
Davidroid 25:1c3146315f16 584 * @retval "true" in case of success, "false" otherwise.
Davidroid 25:1c3146315f16 585 * @warning Setting the step mode implies first disabling the power bridge through
Davidroid 25:1c3146315f16 586 * the SoftHiZ() method.
Davidroid 25:1c3146315f16 587 * @warning Every time step mode is changed, the values of the home
Davidroid 25:1c3146315f16 588 * and mark positions lose meaning and are reset.
Davidroid 7:f7e0c3621f77 589 */
Davidroid 25:1c3146315f16 590 virtual bool SetStepMode(step_mode_t step_mode)
Davidroid 0:2887415a46cd 591 {
Davidroid 32:6e5198e46287 592 if ((motorStepMode_t) step_mode > STEP_MODE_1_16) {
Davidroid 25:1c3146315f16 593 return false;
Davidroid 32:6e5198e46287 594 }
Davidroid 25:1c3146315f16 595
Davidroid 25:1c3146315f16 596 SoftHiZ();
Davidroid 7:f7e0c3621f77 597 L6474_SelectStepMode((motorStepMode_t) step_mode);
Davidroid 25:1c3146315f16 598 return true;
Davidroid 0:2887415a46cd 599 }
Davidroid 0:2887415a46cd 600
Davidroid 7:f7e0c3621f77 601 /**
Davidroid 7:f7e0c3621f77 602 * @brief Attaching an error handler.
Davidroid 8:42e0b00b1e4d 603 * @param fptr An error handler.
Davidroid 7:f7e0c3621f77 604 * @retval None.
Davidroid 7:f7e0c3621f77 605 */
Davidroid 7:f7e0c3621f77 606 virtual void AttachErrorHandler(void (*fptr)(uint16_t error))
Davidroid 4:83a1eb397a65 607 {
Davidroid 7:f7e0c3621f77 608 L6474_AttachErrorHandler((void (*)(uint16_t error)) fptr);
Davidroid 4:83a1eb397a65 609 }
Davidroid 4:83a1eb397a65 610
Davidroid 9:6f116ce8e314 611 /**
Davidroid 8:42e0b00b1e4d 612 * @brief Enabling the device.
Davidroid 8:42e0b00b1e4d 613 * @param None.
Davidroid 8:42e0b00b1e4d 614 * @retval None.
Davidroid 8:42e0b00b1e4d 615 */
Davidroid 8:42e0b00b1e4d 616 virtual void Enable(void)
Davidroid 8:42e0b00b1e4d 617 {
Davidroid 8:42e0b00b1e4d 618 L6474_CmdEnable();
Davidroid 8:42e0b00b1e4d 619 }
Davidroid 8:42e0b00b1e4d 620
Davidroid 9:6f116ce8e314 621 /**
Davidroid 8:42e0b00b1e4d 622 * @brief Disabling the device.
Davidroid 8:42e0b00b1e4d 623 * @param None.
Davidroid 8:42e0b00b1e4d 624 * @retval None.
Davidroid 8:42e0b00b1e4d 625 */
Davidroid 8:42e0b00b1e4d 626 virtual void Disable(void)
Davidroid 8:42e0b00b1e4d 627 {
Davidroid 8:42e0b00b1e4d 628 L6474_CmdDisable();
Davidroid 8:42e0b00b1e4d 629 }
Davidroid 8:42e0b00b1e4d 630
Davidroid 9:6f116ce8e314 631 /**
Davidroid 9:6f116ce8e314 632 * @brief Getting the version of the firmware.
Davidroid 9:6f116ce8e314 633 * @param None.
Davidroid 9:6f116ce8e314 634 * @retval The version of the firmware.
Davidroid 9:6f116ce8e314 635 */
Davidroid 9:6f116ce8e314 636 virtual uint8_t GetFwVersion(void)
Davidroid 9:6f116ce8e314 637 {
Davidroid 9:6f116ce8e314 638 return (uint8_t) L6474_GetFwVersion();
Davidroid 9:6f116ce8e314 639 }
Davidroid 9:6f116ce8e314 640
Davidroid 0:2887415a46cd 641
Davidroid 0:2887415a46cd 642 /*** Public Interrupt Related Methods ***/
Davidroid 0:2887415a46cd 643
Davidroid 0:2887415a46cd 644 /* ACTION 6 --------------------------------------------------------------*
Davidroid 0:2887415a46cd 645 * Implement here interrupt related methods, if any. *
Davidroid 0:2887415a46cd 646 * Note that interrupt handling is platform dependent, e.g.: *
Davidroid 0:2887415a46cd 647 * + mbed: *
Davidroid 7:f7e0c3621f77 648 * InterruptIn feature_irq(pin); //Interrupt object. *
Davidroid 7:f7e0c3621f77 649 * feature_irq.rise(callback); //Attach a callback. *
Davidroid 7:f7e0c3621f77 650 * feature_irq.mode(PullNone); //Set interrupt mode. *
Davidroid 7:f7e0c3621f77 651 * feature_irq.enable_irq(); //Enable interrupt. *
Davidroid 7:f7e0c3621f77 652 * feature_irq.disable_irq(); //Disable interrupt. *
Davidroid 0:2887415a46cd 653 * + Arduino: *
Davidroid 0:2887415a46cd 654 * attachInterrupt(pin, callback, RISING); //Attach a callback. *
Davidroid 0:2887415a46cd 655 * detachInterrupt(pin); //Detach a callback. *
Davidroid 0:2887415a46cd 656 * *
Davidroid 0:2887415a46cd 657 * Example (mbed): *
Davidroid 7:f7e0c3621f77 658 * void AttachFeatureIRQ(void (*fptr) (void)) *
Davidroid 0:2887415a46cd 659 * { *
Davidroid 7:f7e0c3621f77 660 * feature_irq.rise(fptr); *
Davidroid 7:f7e0c3621f77 661 * } *
Davidroid 7:f7e0c3621f77 662 * *
Davidroid 7:f7e0c3621f77 663 * void EnableFeatureIRQ(void) *
Davidroid 7:f7e0c3621f77 664 * { *
Davidroid 7:f7e0c3621f77 665 * feature_irq.enable_irq(); *
Davidroid 0:2887415a46cd 666 * } *
Davidroid 0:2887415a46cd 667 * *
Davidroid 7:f7e0c3621f77 668 * void DisableFeatureIRQ(void) *
Davidroid 0:2887415a46cd 669 * { *
Davidroid 7:f7e0c3621f77 670 * feature_irq.disable_irq(); *
Davidroid 0:2887415a46cd 671 * } *
Davidroid 0:2887415a46cd 672 *------------------------------------------------------------------------*/
Davidroid 7:f7e0c3621f77 673 /**
Davidroid 8:42e0b00b1e4d 674 * @brief Attaching an interrupt handler to the FLAG interrupt.
Davidroid 8:42e0b00b1e4d 675 * @param fptr An interrupt handler.
Davidroid 7:f7e0c3621f77 676 * @retval None.
Davidroid 7:f7e0c3621f77 677 */
Davidroid 7:f7e0c3621f77 678 void AttachFlagIRQ(void (*fptr)(void))
Davidroid 7:f7e0c3621f77 679 {
Davidroid 18:2d6ab2b93685 680 flag_irq.fall(fptr);
Davidroid 7:f7e0c3621f77 681 }
Davidroid 7:f7e0c3621f77 682
Davidroid 7:f7e0c3621f77 683 /**
Davidroid 8:42e0b00b1e4d 684 * @brief Enabling the FLAG interrupt handling.
Davidroid 7:f7e0c3621f77 685 * @param None.
Davidroid 7:f7e0c3621f77 686 * @retval None.
Davidroid 7:f7e0c3621f77 687 */
Davidroid 7:f7e0c3621f77 688 void EnableFlagIRQ(void)
Davidroid 7:f7e0c3621f77 689 {
Davidroid 7:f7e0c3621f77 690 flag_irq.enable_irq();
Davidroid 7:f7e0c3621f77 691 }
Davidroid 7:f7e0c3621f77 692
Davidroid 7:f7e0c3621f77 693 /**
Davidroid 8:42e0b00b1e4d 694 * @brief Disabling the FLAG interrupt handling.
Davidroid 7:f7e0c3621f77 695 * @param None.
Davidroid 7:f7e0c3621f77 696 * @retval None.
Davidroid 7:f7e0c3621f77 697 */
Davidroid 7:f7e0c3621f77 698 void DisableFlagIRQ(void)
Davidroid 7:f7e0c3621f77 699 {
Davidroid 7:f7e0c3621f77 700 flag_irq.disable_irq();
Davidroid 7:f7e0c3621f77 701 }
Davidroid 0:2887415a46cd 702
Davidroid 0:2887415a46cd 703
Davidroid 0:2887415a46cd 704 protected:
Davidroid 0:2887415a46cd 705
Davidroid 0:2887415a46cd 706 /*** Protected Component Related Methods ***/
Davidroid 0:2887415a46cd 707
Davidroid 0:2887415a46cd 708 /* ACTION 7 --------------------------------------------------------------*
Davidroid 0:2887415a46cd 709 * Declare here the component's specific methods. *
Davidroid 0:2887415a46cd 710 * They should be: *
Davidroid 0:2887415a46cd 711 * + Methods with the same name of the C component's virtual table's *
Davidroid 0:2887415a46cd 712 * functions (1); *
Davidroid 0:2887415a46cd 713 * + Methods with the same name of the C component's extended virtual *
Davidroid 0:2887415a46cd 714 * table's functions, if any (2); *
Davidroid 0:2887415a46cd 715 * + Helper methods, if any, like functions declared in the component's *
Davidroid 0:2887415a46cd 716 * source files but not pointed by the component's virtual table (3). *
Davidroid 0:2887415a46cd 717 * *
Davidroid 0:2887415a46cd 718 * Example: *
Davidroid 22:ed3a6990a6eb 719 * Status_t COMPONENT_GetValue(float *f); //(1) *
Davidroid 22:ed3a6990a6eb 720 * Status_t COMPONENT_EnableFeature(void); //(2) *
Davidroid 22:ed3a6990a6eb 721 * Status_t COMPONENT_ComputeAverage(void); //(3) *
Davidroid 0:2887415a46cd 722 *------------------------------------------------------------------------*/
Davidroid 7:f7e0c3621f77 723 void L6474_AttachErrorHandler(void (*callback)(uint16_t error));
Davidroid 22:ed3a6990a6eb 724 Status_t L6474_Init(void *init);
Davidroid 22:ed3a6990a6eb 725 Status_t L6474_ReadID(uint8_t *id);
Davidroid 7:f7e0c3621f77 726 uint16_t L6474_GetAcceleration(void);
Davidroid 7:f7e0c3621f77 727 uint16_t L6474_GetCurrentSpeed(void);
Davidroid 7:f7e0c3621f77 728 uint16_t L6474_GetDeceleration(void);
Davidroid 7:f7e0c3621f77 729 motorState_t L6474_GetDeviceState(void);
Davidroid 7:f7e0c3621f77 730 uint8_t L6474_GetFwVersion(void);
Davidroid 7:f7e0c3621f77 731 int32_t L6474_GetMark(void);
Davidroid 7:f7e0c3621f77 732 uint16_t L6474_GetMaxSpeed(void);
Davidroid 7:f7e0c3621f77 733 uint16_t L6474_GetMinSpeed(void);
Davidroid 7:f7e0c3621f77 734 int32_t L6474_GetPosition(void);
Davidroid 7:f7e0c3621f77 735 void L6474_GoHome(void);
Davidroid 7:f7e0c3621f77 736 void L6474_GoMark(void);
Davidroid 7:f7e0c3621f77 737 void L6474_GoTo(int32_t targetPosition);
Davidroid 7:f7e0c3621f77 738 void L6474_HardStop(void);
Davidroid 7:f7e0c3621f77 739 void L6474_Move(motorDir_t direction, uint32_t stepCount);
Davidroid 7:f7e0c3621f77 740 void L6474_Run(motorDir_t direction);
Davidroid 7:f7e0c3621f77 741 bool L6474_SetAcceleration(uint16_t newAcc);
Davidroid 7:f7e0c3621f77 742 bool L6474_SetDeceleration(uint16_t newDec);
Davidroid 7:f7e0c3621f77 743 void L6474_SetHome(void);
Davidroid 7:f7e0c3621f77 744 void L6474_SetMark(void);
Davidroid 7:f7e0c3621f77 745 bool L6474_SetMaxSpeed(uint16_t newMaxSpeed);
Davidroid 7:f7e0c3621f77 746 bool L6474_SetMinSpeed(uint16_t newMinSpeed);
Davidroid 7:f7e0c3621f77 747 bool L6474_SoftStop(void);
Davidroid 7:f7e0c3621f77 748 void L6474_WaitWhileActive(void);
Davidroid 7:f7e0c3621f77 749 void L6474_CmdDisable(void);
Davidroid 7:f7e0c3621f77 750 void L6474_CmdEnable(void);
Davidroid 7:f7e0c3621f77 751 uint32_t L6474_CmdGetParam(L6474_Registers_t parameter);
Davidroid 7:f7e0c3621f77 752 uint16_t L6474_CmdGetStatus(void);
Davidroid 7:f7e0c3621f77 753 void L6474_CmdNop(void);
Davidroid 7:f7e0c3621f77 754 void L6474_CmdSetParam(L6474_Registers_t parameter, uint32_t value);
Davidroid 7:f7e0c3621f77 755 uint16_t L6474_ReadStatusRegister(void);
Davidroid 7:f7e0c3621f77 756 void L6474_SelectStepMode(motorStepMode_t stepMod);
Davidroid 7:f7e0c3621f77 757 motorDir_t L6474_GetDirection(void);
Davidroid 7:f7e0c3621f77 758 void L6474_SetDirection(motorDir_t direction);
Davidroid 0:2887415a46cd 759 void L6474_ApplySpeed(uint16_t newSpeed);
Davidroid 0:2887415a46cd 760 void L6474_ComputeSpeedProfile(uint32_t nbSteps);
Davidroid 7:f7e0c3621f77 761 int32_t L6474_ConvertPosition(uint32_t abs_position_reg);
Davidroid 0:2887415a46cd 762 void L6474_ErrorHandler(uint16_t error);
Davidroid 0:2887415a46cd 763 void L6474_SendCommand(uint8_t param);
Davidroid 0:2887415a46cd 764 void L6474_SetRegisterToPredefinedValues(void);
Davidroid 22:ed3a6990a6eb 765 void L6474_SetRegisterToInitializationValues(L6474_Init_t *init);
Davidroid 7:f7e0c3621f77 766 void L6474_WriteBytes(uint8_t *pByteToTransmit, uint8_t *pReceivedByte);
Davidroid 0:2887415a46cd 767 void L6474_SetDeviceParamsToPredefinedValues(void);
Davidroid 0:2887415a46cd 768 void L6474_StartMovement(void);
Davidroid 7:f7e0c3621f77 769 void L6474_StepClockHandler(void);
Davidroid 18:2d6ab2b93685 770 float L6474_Tval_Current_to_Par(float current_mA);
Davidroid 18:2d6ab2b93685 771 float L6474_Par_to_Tval_Current(float Tval);
Davidroid 18:2d6ab2b93685 772 float L6474_Tmin_Time_to_Par(float ton_min_us);
Davidroid 18:2d6ab2b93685 773 float L6474_Par_to_Tmin_Time(float Tmin);
Davidroid 0:2887415a46cd 774
Davidroid 0:2887415a46cd 775
Davidroid 0:2887415a46cd 776 /*** Component's I/O Methods ***/
Davidroid 0:2887415a46cd 777
Davidroid 0:2887415a46cd 778 /**
Davidroid 0:2887415a46cd 779 * @brief Utility function to read data from L6474.
Davidroid 0:2887415a46cd 780 * @param[out] pBuffer pointer to the buffer to read data into.
Davidroid 0:2887415a46cd 781 * @param[in] NumBytesToRead number of bytes to read.
Davidroid 0:2887415a46cd 782 * @retval COMPONENT_OK in case of success, COMPONENT_ERROR otherwise.
Davidroid 0:2887415a46cd 783 */
Davidroid 22:ed3a6990a6eb 784 Status_t Read(uint8_t* pBuffer, uint16_t NumBytesToRead)
Davidroid 0:2887415a46cd 785 {
Davidroid 32:6e5198e46287 786 if (dev_spi.spi_read(pBuffer, ssel, NumBytesToRead) != 0) {
Davidroid 0:2887415a46cd 787 return COMPONENT_ERROR;
Davidroid 32:6e5198e46287 788 }
Davidroid 0:2887415a46cd 789 return COMPONENT_OK;
Davidroid 0:2887415a46cd 790 }
Davidroid 0:2887415a46cd 791
Davidroid 0:2887415a46cd 792 /**
Davidroid 0:2887415a46cd 793 * @brief Utility function to write data to L6474.
Davidroid 0:2887415a46cd 794 * @param[in] pBuffer pointer to the buffer of data to send.
Davidroid 0:2887415a46cd 795 * @param[in] NumBytesToWrite number of bytes to write.
Davidroid 0:2887415a46cd 796 * @retval COMPONENT_OK in case of success, COMPONENT_ERROR otherwise.
Davidroid 0:2887415a46cd 797 */
Davidroid 22:ed3a6990a6eb 798 Status_t Write(uint8_t* pBuffer, uint16_t NumBytesToWrite)
Davidroid 0:2887415a46cd 799 {
Davidroid 32:6e5198e46287 800 if (dev_spi.spi_write(pBuffer, ssel, NumBytesToWrite) != 0) {
Davidroid 0:2887415a46cd 801 return COMPONENT_ERROR;
Davidroid 32:6e5198e46287 802 }
Davidroid 0:2887415a46cd 803 return COMPONENT_OK;
Davidroid 0:2887415a46cd 804 }
Davidroid 0:2887415a46cd 805
Davidroid 0:2887415a46cd 806 /**
Davidroid 0:2887415a46cd 807 * @brief Utility function to read and write data from/to L6474 at the same time.
Davidroid 0:2887415a46cd 808 * @param[out] pBufferToRead pointer to the buffer to read data into.
Davidroid 0:2887415a46cd 809 * @param[in] pBufferToWrite pointer to the buffer of data to send.
Davidroid 0:2887415a46cd 810 * @param[in] NumBytes number of bytes to read and write.
Davidroid 0:2887415a46cd 811 * @retval COMPONENT_OK in case of success, COMPONENT_ERROR otherwise.
Davidroid 0:2887415a46cd 812 */
Davidroid 22:ed3a6990a6eb 813 Status_t ReadWrite(uint8_t* pBufferToRead, uint8_t* pBufferToWrite, uint16_t NumBytes)
Davidroid 0:2887415a46cd 814 {
Davidroid 32:6e5198e46287 815 if (dev_spi.spi_read_write(pBufferToRead, pBufferToWrite, ssel, NumBytes) != 0) {
Davidroid 0:2887415a46cd 816 return COMPONENT_ERROR;
Davidroid 32:6e5198e46287 817 }
Davidroid 0:2887415a46cd 818 return COMPONENT_OK;
Davidroid 0:2887415a46cd 819 }
Davidroid 0:2887415a46cd 820
Davidroid 0:2887415a46cd 821 /* ACTION 8 --------------------------------------------------------------*
Davidroid 0:2887415a46cd 822 * Implement here other I/O methods beyond those already implemented *
Davidroid 0:2887415a46cd 823 * above, which are declared extern within the component's header file. *
Davidroid 0:2887415a46cd 824 *------------------------------------------------------------------------*/
Davidroid 7:f7e0c3621f77 825 /**
Davidroid 7:f7e0c3621f77 826 * @brief Making the CPU wait.
Davidroid 7:f7e0c3621f77 827 * @param None.
Davidroid 7:f7e0c3621f77 828 * @retval None.
Davidroid 0:2887415a46cd 829 */
Davidroid 0:2887415a46cd 830 void L6474_Delay(uint32_t delay)
Davidroid 0:2887415a46cd 831 {
Davidroid 0:2887415a46cd 832 wait_ms(delay);
Davidroid 0:2887415a46cd 833 }
Davidroid 0:2887415a46cd 834
Davidroid 7:f7e0c3621f77 835 /**
Davidroid 7:f7e0c3621f77 836 * @brief Enabling interrupts.
Davidroid 7:f7e0c3621f77 837 * @param None.
Davidroid 7:f7e0c3621f77 838 * @retval None.
Davidroid 0:2887415a46cd 839 */
Davidroid 0:2887415a46cd 840 void L6474_EnableIrq(void)
Davidroid 0:2887415a46cd 841 {
Davidroid 0:2887415a46cd 842 __enable_irq();
Davidroid 0:2887415a46cd 843 }
Davidroid 0:2887415a46cd 844
Davidroid 7:f7e0c3621f77 845 /**
Davidroid 7:f7e0c3621f77 846 * @brief Disabling interrupts.
Davidroid 7:f7e0c3621f77 847 * @param None.
Davidroid 7:f7e0c3621f77 848 * @retval None.
Davidroid 0:2887415a46cd 849 */
Davidroid 0:2887415a46cd 850 void L6474_DisableIrq(void)
Davidroid 0:2887415a46cd 851 {
Davidroid 0:2887415a46cd 852 __disable_irq();
Davidroid 0:2887415a46cd 853 }
Davidroid 0:2887415a46cd 854
Davidroid 7:f7e0c3621f77 855 /**
Davidroid 7:f7e0c3621f77 856 * @brief Initialising the PWM.
Davidroid 7:f7e0c3621f77 857 * @param None.
Davidroid 7:f7e0c3621f77 858 * @retval None.
Davidroid 0:2887415a46cd 859 */
Davidroid 7:f7e0c3621f77 860 void L6474_PwmInit(void) {}
Davidroid 0:2887415a46cd 861
Davidroid 7:f7e0c3621f77 862 /**
Davidroid 20:a8e81b65f0af 863 * @brief Setting the frequency of PWM.
Davidroid 20:a8e81b65f0af 864 * The frequency controls directly the speed of the device.
Davidroid 20:a8e81b65f0af 865 * @param frequency the frequency of PWM.
Davidroid 20:a8e81b65f0af 866 * @retval None.
Davidroid 20:a8e81b65f0af 867 */
Davidroid 20:a8e81b65f0af 868 void L6474_PwmSetFreq(uint16_t frequency)
Davidroid 20:a8e81b65f0af 869 {
Davidroid 20:a8e81b65f0af 870 /* Computing the period of PWM. */
Davidroid 20:a8e81b65f0af 871 double period = 1.0f / frequency;
Davidroid 20:a8e81b65f0af 872
Davidroid 20:a8e81b65f0af 873 /* Setting the period and the duty-cycle of PWM. */
Davidroid 20:a8e81b65f0af 874 pwm.period(period);
Davidroid 20:a8e81b65f0af 875 pwm.write(0.5f);
Davidroid 20:a8e81b65f0af 876
Davidroid 20:a8e81b65f0af 877 /* Setting a callback with the same period of PWM's, to update the state machine. */
Davidroid 30:a05820cfdba9 878 ticker.attach(Callback<void()>(this, &L6474::L6474_StepClockHandler), period);
Davidroid 20:a8e81b65f0af 879 }
Davidroid 20:a8e81b65f0af 880
Davidroid 20:a8e81b65f0af 881 /**
Davidroid 7:f7e0c3621f77 882 * @brief Stopping the PWM.
Davidroid 7:f7e0c3621f77 883 * @param None.
Davidroid 7:f7e0c3621f77 884 * @retval None.
Davidroid 0:2887415a46cd 885 */
Davidroid 0:2887415a46cd 886 void L6474_PwmStop(void)
Davidroid 0:2887415a46cd 887 {
Davidroid 0:2887415a46cd 888 pwm.write(0.0f);
Davidroid 0:2887415a46cd 889 ticker.detach();
Davidroid 0:2887415a46cd 890 }
Davidroid 0:2887415a46cd 891
Davidroid 7:f7e0c3621f77 892 /**
Davidroid 7:f7e0c3621f77 893 * @brief Putting the device in standby mode.
Davidroid 7:f7e0c3621f77 894 * @param None.
Davidroid 7:f7e0c3621f77 895 * @retval None.
Davidroid 0:2887415a46cd 896 */
Davidroid 0:2887415a46cd 897 void L6474_ReleaseReset(void)
Davidroid 0:2887415a46cd 898 {
Davidroid 4:83a1eb397a65 899 standby_reset = 1;
Davidroid 0:2887415a46cd 900 }
Davidroid 0:2887415a46cd 901
Davidroid 7:f7e0c3621f77 902 /**
Davidroid 7:f7e0c3621f77 903 * @brief Putting the device in reset mode.
Davidroid 7:f7e0c3621f77 904 * @param None.
Davidroid 7:f7e0c3621f77 905 * @retval None.
Davidroid 0:2887415a46cd 906 */
Davidroid 0:2887415a46cd 907 void L6474_Reset(void)
Davidroid 0:2887415a46cd 908 {
Davidroid 4:83a1eb397a65 909 standby_reset = 0;
Davidroid 0:2887415a46cd 910 }
Davidroid 0:2887415a46cd 911
Davidroid 7:f7e0c3621f77 912 /**
Davidroid 7:f7e0c3621f77 913 * @brief Setting the direction of rotation.
Davidroid 7:f7e0c3621f77 914 * @param gpioState direction of rotation: "1" for forward, "0" for backward.
Davidroid 7:f7e0c3621f77 915 * @retval None.
Davidroid 0:2887415a46cd 916 */
Davidroid 0:2887415a46cd 917 void L6474_SetDirectionGpio(uint8_t gpioState)
Davidroid 0:2887415a46cd 918 {
Davidroid 0:2887415a46cd 919 direction = gpioState;
Davidroid 0:2887415a46cd 920 }
Davidroid 0:2887415a46cd 921
Davidroid 7:f7e0c3621f77 922 /**
Davidroid 7:f7e0c3621f77 923 * @brief Writing and reading bytes to/from the component through the SPI at the same time.
Davidroid 7:f7e0c3621f77 924 * @param[in] pByteToTransmit pointer to the buffer of data to send.
Davidroid 7:f7e0c3621f77 925 * @param[out] pReceivedByte pointer to the buffer to read data into.
Davidroid 7:f7e0c3621f77 926 * @retval "0" in case of success, "1" otherwise.
Davidroid 0:2887415a46cd 927 */
Davidroid 0:2887415a46cd 928 uint8_t L6474_SpiWriteBytes(uint8_t *pByteToTransmit, uint8_t *pReceivedByte)
Davidroid 0:2887415a46cd 929 {
Davidroid 18:2d6ab2b93685 930 return (uint8_t) (ReadWrite(pReceivedByte, pByteToTransmit, number_of_devices) == COMPONENT_OK ? 0 : 1);
Davidroid 0:2887415a46cd 931 }
Davidroid 0:2887415a46cd 932
Davidroid 0:2887415a46cd 933
Davidroid 0:2887415a46cd 934 /*** Component's Instance Variables ***/
Davidroid 0:2887415a46cd 935
Davidroid 0:2887415a46cd 936 /* ACTION 9 --------------------------------------------------------------*
Davidroid 10:c3824af0caf4 937 * Declare here interrupt related variables, if needed. *
Davidroid 10:c3824af0caf4 938 * Note that interrupt handling is platform dependent, see *
Davidroid 10:c3824af0caf4 939 * "Interrupt Related Methods" above. *
Davidroid 10:c3824af0caf4 940 * *
Davidroid 10:c3824af0caf4 941 * Example: *
Davidroid 10:c3824af0caf4 942 * + mbed: *
Davidroid 10:c3824af0caf4 943 * InterruptIn feature_irq; *
Davidroid 0:2887415a46cd 944 *------------------------------------------------------------------------*/
Davidroid 7:f7e0c3621f77 945 /* Flag Interrupt. */
Davidroid 7:f7e0c3621f77 946 InterruptIn flag_irq;
Davidroid 10:c3824af0caf4 947
Davidroid 10:c3824af0caf4 948 /* ACTION 10 -------------------------------------------------------------*
Davidroid 10:c3824af0caf4 949 * Declare here other pin related variables, if needed. *
Davidroid 10:c3824af0caf4 950 * *
Davidroid 10:c3824af0caf4 951 * Example: *
Davidroid 10:c3824af0caf4 952 * + mbed: *
Davidroid 10:c3824af0caf4 953 * DigitalOut standby_reset; *
Davidroid 10:c3824af0caf4 954 *------------------------------------------------------------------------*/
Davidroid 4:83a1eb397a65 955 /* Standby/reset pin. */
Davidroid 4:83a1eb397a65 956 DigitalOut standby_reset;
Davidroid 0:2887415a46cd 957
Davidroid 0:2887415a46cd 958 /* Direction of rotation pin. */
Davidroid 0:2887415a46cd 959 DigitalOut direction;
Davidroid 0:2887415a46cd 960
Davidroid 0:2887415a46cd 961 /* Pulse Width Modulation pin. */
Davidroid 0:2887415a46cd 962 PwmOut pwm;
Davidroid 0:2887415a46cd 963
Davidroid 10:c3824af0caf4 964 /* Timer to trigger the PWM callback at each PWM pulse. */
Davidroid 10:c3824af0caf4 965 Ticker ticker;
Davidroid 10:c3824af0caf4 966
Davidroid 10:c3824af0caf4 967 /* ACTION 11 -------------------------------------------------------------*
Davidroid 10:c3824af0caf4 968 * Declare here communication related variables, if needed. *
Davidroid 10:c3824af0caf4 969 * *
Davidroid 10:c3824af0caf4 970 * Example: *
Davidroid 10:c3824af0caf4 971 * + mbed: *
Davidroid 10:c3824af0caf4 972 * DigitalOut ssel; *
Davidroid 10:c3824af0caf4 973 * DevSPI &dev_spi; *
Davidroid 10:c3824af0caf4 974 *------------------------------------------------------------------------*/
Davidroid 4:83a1eb397a65 975 /* Configuration. */
Davidroid 4:83a1eb397a65 976 DigitalOut ssel;
Davidroid 0:2887415a46cd 977
Davidroid 0:2887415a46cd 978 /* IO Device. */
Davidroid 0:2887415a46cd 979 DevSPI &dev_spi;
Davidroid 0:2887415a46cd 980
Davidroid 10:c3824af0caf4 981 /* ACTION 12 -------------------------------------------------------------*
Davidroid 10:c3824af0caf4 982 * Declare here identity related variables, if needed. *
Davidroid 10:c3824af0caf4 983 * Note that there should be only a unique identifier for each component, *
Davidroid 10:c3824af0caf4 984 * which should be the "who_am_i" parameter. *
Davidroid 10:c3824af0caf4 985 *------------------------------------------------------------------------*/
Davidroid 10:c3824af0caf4 986 /* Identity */
Davidroid 10:c3824af0caf4 987 uint8_t who_am_i;
Davidroid 4:83a1eb397a65 988
Davidroid 10:c3824af0caf4 989 /* ACTION 13 -------------------------------------------------------------*
Davidroid 10:c3824af0caf4 990 * Declare here the component's static and non-static data, one variable *
Davidroid 10:c3824af0caf4 991 * per line. *
Davidroid 0:2887415a46cd 992 * *
Davidroid 0:2887415a46cd 993 * Example: *
Davidroid 10:c3824af0caf4 994 * float measure; *
Davidroid 10:c3824af0caf4 995 * int instance_id; *
Davidroid 10:c3824af0caf4 996 * static int number_of_instances; *
Davidroid 0:2887415a46cd 997 *------------------------------------------------------------------------*/
Davidroid 0:2887415a46cd 998 /* Data. */
Davidroid 18:2d6ab2b93685 999 void (*error_handler_callback)(uint16_t error);
Davidroid 18:2d6ab2b93685 1000 deviceParams_t device_prm;
Davidroid 18:2d6ab2b93685 1001 uint8_t device_instance;
Davidroid 7:f7e0c3621f77 1002
Davidroid 7:f7e0c3621f77 1003 /* Static data. */
Davidroid 18:2d6ab2b93685 1004 static uint8_t number_of_devices;
Davidroid 18:2d6ab2b93685 1005 static uint8_t spi_tx_bursts[L6474_CMD_ARG_MAX_NB_BYTES][MAX_NUMBER_OF_DEVICES];
Davidroid 18:2d6ab2b93685 1006 static uint8_t spi_rx_bursts[L6474_CMD_ARG_MAX_NB_BYTES][MAX_NUMBER_OF_DEVICES];
Davidroid 7:f7e0c3621f77 1007
Davidroid 7:f7e0c3621f77 1008
Davidroid 7:f7e0c3621f77 1009 public:
Davidroid 7:f7e0c3621f77 1010
Davidroid 7:f7e0c3621f77 1011 /* Static data. */
Davidroid 18:2d6ab2b93685 1012 static bool spi_preemtion_by_isr;
Davidroid 18:2d6ab2b93685 1013 static bool isr_flag;
Davidroid 0:2887415a46cd 1014 };
Davidroid 0:2887415a46cd 1015
Davidroid 0:2887415a46cd 1016 #endif // __L6474_CLASS_H
Davidroid 0:2887415a46cd 1017
Davidroid 0:2887415a46cd 1018 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/