Library to handle the X_NUCLEO_IHM02A1 Motor Control Expansion Board based on the L6470 component.

Dependencies:   X_NUCLEO_COMMON ST_INTERFACES

Dependents:   HelloWorld_IHM02A1 ConcorsoFinal HelloWorld_IHM02A1_mbedOS HelloWorld_IHM02A1-Serialinterpreter ... more

Fork of X_NUCLEO_IHM02A1 by ST Expansion SW Team

Motor Control Library

Introduction

Library to handle the X-NUCLEO-IHM02A1 Motor Control Expansion Board based on the the L6470 component.

Daisy-Chain Configuration

The two L6470 components mounted on this board are connected in daisy-chain configuration. This board can be stacked up to four times so that the eight L6470 components will be connected two-by-two in daisy-chain configuration.

Concerning the SSEL pin of the SPI communication, each expansion board must be in one of the following configuration:

  • SB_23 resistor connected only: SSEL on pin A2;
  • SB_7 resistor connected only: SSEL on pin D2;
  • SB_8 resistor connected only: SSEL on pin D10;
  • SB_9 resistor connected only: SSEL on pin D5.

Arduino Connector Compatibility Warning

X-NUCLEO-IHM02A1 is Arduino compatible with one exception: instead of using D13 pin to drive the SPI clock, it uses D3 pin, hence the default configuration for this library is with the SPI clock on D3 pin.

To be fully Arduino compatible the following patch is required:

  • to remove the SB34 resistor;
  • to solder the SB12 resistor.

Alternatively, you can route the Nucleo board’s D13 pin directly to the expansion board’s D3 pin with a wire. In case you patch your expansion board or route the pin, the SPI clock will be driven on D13 pin rather than on D3 pin, and you have also to initialize the sclk PinName variable with D13 rather than D3. This patch is known to be required, for example, on the following boards: NUCLEO-F103RB, NUCLEO-F302RB, NUCLEO-F411RE, and NUCLEO-F429ZI.

If you use D13 pin for the SPI clock, please be aware that on STM32 Nucleo boards you may not drive the LED, otherwise you will get a conflict: the LED on STM32 Nucleo boards is connected to the D13 pin.

Example Applications

Committer:
Davidroid
Date:
Fri Nov 20 18:07:45 2015 +0000
Revision:
0:92706998571a
Child:
1:b78dab6d2c58
Library to handle the X_NUCLEO_IHM02A1 Motor Control Expansion Board based on the the L6470 component.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Davidroid 0:92706998571a 1 /**
Davidroid 0:92706998571a 2 ******************************************************************************
Davidroid 0:92706998571a 3 * @file L6470.c
Davidroid 0:92706998571a 4 * @date 01/10/2014 12:00:00
Davidroid 0:92706998571a 5 * @brief This file provides set of firmware functions to manage the
Davidroid 0:92706998571a 6 * L6470.
Davidroid 0:92706998571a 7 ******************************************************************************
Davidroid 0:92706998571a 8 *
Davidroid 0:92706998571a 9 * COPYRIGHT(c) 2014 STMicroelectronics
Davidroid 0:92706998571a 10 *
Davidroid 0:92706998571a 11 * Redistribution and use in source and binary forms, with or without modification,
Davidroid 0:92706998571a 12 * are permitted provided that the following conditions are met:
Davidroid 0:92706998571a 13 * 1. Redistributions of source code must retain the above copyright notice,
Davidroid 0:92706998571a 14 * this list of conditions and the following disclaimer.
Davidroid 0:92706998571a 15 * 2. Redistributions in binary form must reproduce the above copyright notice,
Davidroid 0:92706998571a 16 * this list of conditions and the following disclaimer in the documentation
Davidroid 0:92706998571a 17 * and/or other materials provided with the distribution.
Davidroid 0:92706998571a 18 * 3. Neither the name of STMicroelectronics nor the names of its contributors
Davidroid 0:92706998571a 19 * may be used to endorse or promote products derived from this software
Davidroid 0:92706998571a 20 * without specific prior written permission.
Davidroid 0:92706998571a 21 *
Davidroid 0:92706998571a 22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
Davidroid 0:92706998571a 23 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
Davidroid 0:92706998571a 24 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
Davidroid 0:92706998571a 25 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
Davidroid 0:92706998571a 26 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
Davidroid 0:92706998571a 27 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
Davidroid 0:92706998571a 28 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
Davidroid 0:92706998571a 29 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
Davidroid 0:92706998571a 30 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
Davidroid 0:92706998571a 31 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Davidroid 0:92706998571a 32 *
Davidroid 0:92706998571a 33 ******************************************************************************
Davidroid 0:92706998571a 34 */
Davidroid 0:92706998571a 35
Davidroid 0:92706998571a 36
Davidroid 0:92706998571a 37 /* Generated with Stm32CubeTOO -----------------------------------------------*/
Davidroid 0:92706998571a 38
Davidroid 0:92706998571a 39
Davidroid 0:92706998571a 40 /* Revision ------------------------------------------------------------------*/
Davidroid 0:92706998571a 41 /*
Davidroid 0:92706998571a 42 Repository: http://svn.x-nucleodev.codex.cro.st.com/svnroot/X-NucleoDev
Davidroid 0:92706998571a 43 Branch/Trunk/Tag: trunk
Davidroid 0:92706998571a 44 Based on: X-CUBE-SPN2/trunk/Drivers/BSP/Components/L6470/L6470.h
Davidroid 0:92706998571a 45 Revision: 0
Davidroid 0:92706998571a 46 */
Davidroid 0:92706998571a 47
Davidroid 0:92706998571a 48
Davidroid 0:92706998571a 49 /* Define to prevent recursive inclusion -------------------------------------*/
Davidroid 0:92706998571a 50
Davidroid 0:92706998571a 51 #ifndef __L6470_CLASS_H
Davidroid 0:92706998571a 52 #define __L6470_CLASS_H
Davidroid 0:92706998571a 53
Davidroid 0:92706998571a 54
Davidroid 0:92706998571a 55 /* Includes ------------------------------------------------------------------*/
Davidroid 0:92706998571a 56
Davidroid 0:92706998571a 57 /* ACTION 1 ------------------------------------------------------------------*
Davidroid 0:92706998571a 58 * Include here platform specific header files. *
Davidroid 0:92706998571a 59 *----------------------------------------------------------------------------*/
Davidroid 0:92706998571a 60 #include "mbed.h"
Davidroid 0:92706998571a 61 #include "DevSPI.h"
Davidroid 0:92706998571a 62 /* ACTION 2 ------------------------------------------------------------------*
Davidroid 0:92706998571a 63 * Include here component specific header files. *
Davidroid 0:92706998571a 64 *----------------------------------------------------------------------------*/
Davidroid 0:92706998571a 65 #include "l6470.h"
Davidroid 0:92706998571a 66 /* ACTION 3 ------------------------------------------------------------------*
Davidroid 0:92706998571a 67 * Include here interface specific header files. *
Davidroid 0:92706998571a 68 * *
Davidroid 0:92706998571a 69 * Example: *
Davidroid 0:92706998571a 70 * #include "../Interfaces/Humidity_class.h" *
Davidroid 0:92706998571a 71 * #include "../Interfaces/Temperature_class.h" *
Davidroid 0:92706998571a 72 *----------------------------------------------------------------------------*/
Davidroid 0:92706998571a 73 #include "../Interfaces/StepperMotor_class.h"
Davidroid 0:92706998571a 74
Davidroid 0:92706998571a 75
Davidroid 0:92706998571a 76 /* Classes -------------------------------------------------------------------*/
Davidroid 0:92706998571a 77
Davidroid 0:92706998571a 78 /** Class representing a L6470 component.
Davidroid 0:92706998571a 79 */
Davidroid 0:92706998571a 80 class L6470 : public StepperMotor
Davidroid 0:92706998571a 81 {
Davidroid 0:92706998571a 82 public:
Davidroid 0:92706998571a 83
Davidroid 0:92706998571a 84 /*** Constructor and Destructor Methods ***/
Davidroid 0:92706998571a 85
Davidroid 0:92706998571a 86 /**
Davidroid 0:92706998571a 87 * @brief Constructor.
Davidroid 0:92706998571a 88 * @param flag_irq pin name of the FLAG pin of the component.
Davidroid 0:92706998571a 89 * @param standby_reset pin name of the STBY\RST pin of the component.
Davidroid 0:92706998571a 90 * @param ssel pin name of the SSEL pin of the SPI device to be used for communication.
Davidroid 0:92706998571a 91 * @param spi SPI device to be used for communication.
Davidroid 0:92706998571a 92 */
Davidroid 0:92706998571a 93 L6470(PinName flag_irq, PinName standby_reset, PinName ssel, DevSPI &spi) : StepperMotor(), flag_irq(flag_irq), standby_reset(standby_reset), ssel(ssel), dev_spi(spi)
Davidroid 0:92706998571a 94 {
Davidroid 0:92706998571a 95 /* ACTION 4 ----------------------------------------------------------*
Davidroid 0:92706998571a 96 * Initialize here the component's member variables, one variable per *
Davidroid 0:92706998571a 97 * line. *
Davidroid 0:92706998571a 98 * *
Davidroid 0:92706998571a 99 * Example: *
Davidroid 0:92706998571a 100 * T0_out = 0; *
Davidroid 0:92706998571a 101 * T1_out = 0; *
Davidroid 0:92706998571a 102 * T0_degC = 0; *
Davidroid 0:92706998571a 103 * T1_degC = 0; *
Davidroid 0:92706998571a 104 *--------------------------------------------------------------------*/
Davidroid 0:92706998571a 105 L6470_Register = &_L6470_Register[0];
Davidroid 0:92706998571a 106 L6470_ApplicationCommand = &_L6470_ApplicationCommand[0];
Davidroid 0:92706998571a 107 L6470_Direction = &_L6470_Direction[0];
Davidroid 0:92706998571a 108 L6470_ACT = &_L6470_ACT[0];
Davidroid 0:92706998571a 109 pL6470_StatusRegister = &L6470_StatusRegister;
Davidroid 0:92706998571a 110 L6470_Id = number_of_devices++;
Davidroid 0:92706998571a 111 L6470_DaisyChain_HalfPrepared = ZERO_F;
Davidroid 0:92706998571a 112 memset(L6470_AppCmdPkg, 0, L6470DAISYCHAINSIZE * sizeof(sL6470_AppCmdPkg_t));
Davidroid 0:92706998571a 113 memset(L6470_DaisyChainSpiTxStruct, 0, L6470MAXSPICMDBYTESIZE * L6470DAISYCHAINSIZE * sizeof(uint8_t));
Davidroid 0:92706998571a 114 memset(L6470_DaisyChainSpiRxStruct, 0, L6470MAXSPICMDBYTESIZE * L6470DAISYCHAINSIZE * sizeof(uint8_t));
Davidroid 0:92706998571a 115 }
Davidroid 0:92706998571a 116
Davidroid 0:92706998571a 117 /**
Davidroid 0:92706998571a 118 * @brief Destructor.
Davidroid 0:92706998571a 119 */
Davidroid 0:92706998571a 120 virtual ~L6470(void) {}
Davidroid 0:92706998571a 121
Davidroid 0:92706998571a 122
Davidroid 0:92706998571a 123 /*** Public Component Related Methods ***/
Davidroid 0:92706998571a 124
Davidroid 0:92706998571a 125 /* ACTION 5 --------------------------------------------------------------*
Davidroid 0:92706998571a 126 * Implement here the component's public methods, as wrappers of the C *
Davidroid 0:92706998571a 127 * component's functions. *
Davidroid 0:92706998571a 128 * They should be: *
Davidroid 0:92706998571a 129 * + Methods with the same name of the C component's virtual table's *
Davidroid 0:92706998571a 130 * functions (1); *
Davidroid 0:92706998571a 131 * + Methods with the same name of the C component's extended virtual *
Davidroid 0:92706998571a 132 * table's functions, if any (2). *
Davidroid 0:92706998571a 133 * *
Davidroid 0:92706998571a 134 * Example: *
Davidroid 0:92706998571a 135 * virtual int GetValue(float *pData) //(1) *
Davidroid 0:92706998571a 136 * { *
Davidroid 0:92706998571a 137 * return COMPONENT_GetValue(float *pfData); *
Davidroid 0:92706998571a 138 * } *
Davidroid 0:92706998571a 139 * *
Davidroid 0:92706998571a 140 * virtual int EnableFeature(void) //(2) *
Davidroid 0:92706998571a 141 * { *
Davidroid 0:92706998571a 142 * return COMPONENT_EnableFeature(); *
Davidroid 0:92706998571a 143 * } *
Davidroid 0:92706998571a 144 *------------------------------------------------------------------------*/
Davidroid 0:92706998571a 145 virtual int Init(void *init)
Davidroid 0:92706998571a 146 {
Davidroid 0:92706998571a 147 return (int) L6470_Config((MICROSTEPPING_MOTOR_InitTypeDef *) init);
Davidroid 0:92706998571a 148 }
Davidroid 0:92706998571a 149
Davidroid 0:92706998571a 150 virtual int ReadID(uint8_t *id)
Davidroid 0:92706998571a 151 {
Davidroid 0:92706998571a 152 return (int) 0;
Davidroid 0:92706998571a 153 }
Davidroid 0:92706998571a 154
Davidroid 0:92706998571a 155 virtual unsigned int GetStatus(void)
Davidroid 0:92706998571a 156 {
Davidroid 0:92706998571a 157 return (unsigned int) L6470_GetStatus();
Davidroid 0:92706998571a 158 }
Davidroid 0:92706998571a 159
Davidroid 0:92706998571a 160 virtual unsigned int GetParameter(unsigned int parameter)
Davidroid 0:92706998571a 161 {
Davidroid 0:92706998571a 162 return (unsigned int) L6470_GetParam((eL6470_RegId_t) parameter);
Davidroid 0:92706998571a 163 }
Davidroid 0:92706998571a 164
Davidroid 0:92706998571a 165 virtual signed int GetPosition(void)
Davidroid 0:92706998571a 166 {
Davidroid 0:92706998571a 167 return (signed int) L6470_GetParam((eL6470_RegId_t) L6470_ABS_POS_ID);
Davidroid 0:92706998571a 168 }
Davidroid 0:92706998571a 169
Davidroid 0:92706998571a 170 virtual signed int GetMark(void)
Davidroid 0:92706998571a 171 {
Davidroid 0:92706998571a 172 return (signed int) L6470_GetParam((eL6470_RegId_t) L6470_MARK_ID);
Davidroid 0:92706998571a 173 }
Davidroid 0:92706998571a 174
Davidroid 0:92706998571a 175 virtual unsigned int GetSpeed(void)
Davidroid 0:92706998571a 176 {
Davidroid 0:92706998571a 177 return (unsigned int) L6470_GetParam((eL6470_RegId_t) L6470_SPEED_ID);
Davidroid 0:92706998571a 178 }
Davidroid 0:92706998571a 179
Davidroid 0:92706998571a 180 virtual unsigned int GetMaxSpeed(void)
Davidroid 0:92706998571a 181 {
Davidroid 0:92706998571a 182 return (unsigned int) L6470_GetParam((eL6470_RegId_t) L6470_MAX_SPEED_ID);
Davidroid 0:92706998571a 183 }
Davidroid 0:92706998571a 184
Davidroid 0:92706998571a 185 virtual unsigned int GetMinSpeed(void)
Davidroid 0:92706998571a 186 {
Davidroid 0:92706998571a 187 return (unsigned int) L6470_GetParam((eL6470_RegId_t) L6470_MIN_SPEED_ID);
Davidroid 0:92706998571a 188 }
Davidroid 0:92706998571a 189
Davidroid 0:92706998571a 190 virtual unsigned int GetAcceleration(void)
Davidroid 0:92706998571a 191 {
Davidroid 0:92706998571a 192 return (unsigned int) L6470_GetParam((eL6470_RegId_t) L6470_ACC_ID);
Davidroid 0:92706998571a 193 }
Davidroid 0:92706998571a 194
Davidroid 0:92706998571a 195 virtual unsigned int GetDeceleration(void)
Davidroid 0:92706998571a 196 {
Davidroid 0:92706998571a 197 return (unsigned int) L6470_GetParam((eL6470_RegId_t) L6470_DEC_ID);
Davidroid 0:92706998571a 198 }
Davidroid 0:92706998571a 199
Davidroid 0:92706998571a 200 virtual direction_t GetDirection(void)
Davidroid 0:92706998571a 201 {
Davidroid 0:92706998571a 202 return (direction_t) (L6470_CheckStatusRegisterFlag((eL6470_StatusRegisterFlagId_t) DIR_ID) == 1 ? StepperMotor::FWD : StepperMotor::BWD);
Davidroid 0:92706998571a 203 }
Davidroid 0:92706998571a 204
Davidroid 0:92706998571a 205 virtual void SetParameter(unsigned int parameter, unsigned int value)
Davidroid 0:92706998571a 206 {
Davidroid 0:92706998571a 207 L6470_SetParam((eL6470_RegId_t) parameter, (uint32_t) value);
Davidroid 0:92706998571a 208 }
Davidroid 0:92706998571a 209
Davidroid 0:92706998571a 210 virtual void SetHome(void)
Davidroid 0:92706998571a 211 {
Davidroid 0:92706998571a 212 L6470_ResetPos();
Davidroid 0:92706998571a 213 //L6470_SetParam((eL6470_RegId_t) L6470_ABS_POS_ID, (uint32_t) 0);
Davidroid 0:92706998571a 214 }
Davidroid 0:92706998571a 215
Davidroid 0:92706998571a 216 virtual void SetMark(void)
Davidroid 0:92706998571a 217 {
Davidroid 0:92706998571a 218 L6470_SetParam((eL6470_RegId_t) L6470_MARK_ID, (uint32_t) L6470_GetParam((eL6470_RegId_t) L6470_ABS_POS_ID));
Davidroid 0:92706998571a 219 //L6470_SetParam((eL6470_RegId_t) L6470_MARK_ID, (uint32_t) 0);
Davidroid 0:92706998571a 220 }
Davidroid 0:92706998571a 221
Davidroid 0:92706998571a 222 virtual void SetMaxSpeed(unsigned int speed)
Davidroid 0:92706998571a 223 {
Davidroid 0:92706998571a 224 L6470_SetParam((eL6470_RegId_t) L6470_MAX_SPEED_ID, (uint32_t) speed);
Davidroid 0:92706998571a 225 }
Davidroid 0:92706998571a 226
Davidroid 0:92706998571a 227 virtual void SetMinSpeed(unsigned int speed)
Davidroid 0:92706998571a 228 {
Davidroid 0:92706998571a 229 L6470_SetParam((eL6470_RegId_t) L6470_MIN_SPEED_ID, (uint32_t) speed);
Davidroid 0:92706998571a 230 }
Davidroid 0:92706998571a 231
Davidroid 0:92706998571a 232 virtual void SetAcceleration(unsigned int acceleration)
Davidroid 0:92706998571a 233 {
Davidroid 0:92706998571a 234 L6470_SetParam((eL6470_RegId_t) L6470_ACC_ID, (uint32_t) acceleration);
Davidroid 0:92706998571a 235 }
Davidroid 0:92706998571a 236
Davidroid 0:92706998571a 237 virtual void SetDeceleration(unsigned int deceleration)
Davidroid 0:92706998571a 238 {
Davidroid 0:92706998571a 239 L6470_SetParam((eL6470_RegId_t) L6470_DEC_ID, (uint32_t) deceleration);
Davidroid 0:92706998571a 240 }
Davidroid 0:92706998571a 241
Davidroid 0:92706998571a 242 virtual void GoTo(signed int position)
Davidroid 0:92706998571a 243 {
Davidroid 0:92706998571a 244 L6470_GoTo((uint32_t) position);
Davidroid 0:92706998571a 245 }
Davidroid 0:92706998571a 246
Davidroid 0:92706998571a 247 virtual void GoTo(signed int position, direction_t direction)
Davidroid 0:92706998571a 248 {
Davidroid 0:92706998571a 249 L6470_GoToDir((eL6470_DirId_t) (direction == StepperMotor::FWD ? L6470_DIR_FWD_ID : L6470_DIR_REV_ID), (signed int) position);
Davidroid 0:92706998571a 250 }
Davidroid 0:92706998571a 251
Davidroid 0:92706998571a 252 virtual void GoHome(void)
Davidroid 0:92706998571a 253 {
Davidroid 0:92706998571a 254 L6470_GoHome();
Davidroid 0:92706998571a 255 }
Davidroid 0:92706998571a 256
Davidroid 0:92706998571a 257 virtual void GoMark(void)
Davidroid 0:92706998571a 258 {
Davidroid 0:92706998571a 259 L6470_GoMark();
Davidroid 0:92706998571a 260 }
Davidroid 0:92706998571a 261
Davidroid 0:92706998571a 262 virtual void GoUntil(eL6470_ActId_t L6470_ActId, direction_t direction, unsigned int speed)
Davidroid 0:92706998571a 263 {
Davidroid 0:92706998571a 264 L6470_GoUntil((eL6470_ActId_t) L6470_ActId, (eL6470_DirId_t) (direction == StepperMotor::FWD ? L6470_DIR_FWD_ID : L6470_DIR_REV_ID), (unsigned int) speed);
Davidroid 0:92706998571a 265 }
Davidroid 0:92706998571a 266
Davidroid 0:92706998571a 267 virtual void Run(direction_t direction)
Davidroid 0:92706998571a 268 {
Davidroid 0:92706998571a 269 L6470_Run((eL6470_DirId_t) (direction == StepperMotor::FWD ? L6470_DIR_FWD_ID : L6470_DIR_REV_ID), (unsigned int) L6470_GetParam((eL6470_RegId_t) L6470_MAX_SPEED_ID));
Davidroid 0:92706998571a 270 }
Davidroid 0:92706998571a 271
Davidroid 0:92706998571a 272 virtual void Run(direction_t direction, unsigned int speed)
Davidroid 0:92706998571a 273 {
Davidroid 0:92706998571a 274 L6470_Run((eL6470_DirId_t) (direction == StepperMotor::FWD ? L6470_DIR_FWD_ID : L6470_DIR_REV_ID), (unsigned int) speed);
Davidroid 0:92706998571a 275 }
Davidroid 0:92706998571a 276
Davidroid 0:92706998571a 277 virtual void Move(direction_t direction, unsigned int steps)
Davidroid 0:92706998571a 278 {
Davidroid 0:92706998571a 279 L6470_Move((eL6470_DirId_t) (direction == StepperMotor::FWD ? L6470_DIR_FWD_ID : L6470_DIR_REV_ID), (unsigned int) steps);
Davidroid 0:92706998571a 280 }
Davidroid 0:92706998571a 281
Davidroid 0:92706998571a 282 virtual void SoftStop(void)
Davidroid 0:92706998571a 283 {
Davidroid 0:92706998571a 284 L6470_SoftStop();
Davidroid 0:92706998571a 285 }
Davidroid 0:92706998571a 286
Davidroid 0:92706998571a 287 virtual void HardStop(void)
Davidroid 0:92706998571a 288 {
Davidroid 0:92706998571a 289 L6470_HardStop();
Davidroid 0:92706998571a 290 }
Davidroid 0:92706998571a 291
Davidroid 0:92706998571a 292 virtual void WaitWhileActive(void)
Davidroid 0:92706998571a 293 {
Davidroid 0:92706998571a 294 while (L6470_CheckStatusRegisterFlag(BUSY_ID) == 0);
Davidroid 0:92706998571a 295 }
Davidroid 0:92706998571a 296
Davidroid 0:92706998571a 297 virtual void SoftHiZ(void)
Davidroid 0:92706998571a 298 {
Davidroid 0:92706998571a 299 L6470_SoftHiZ();
Davidroid 0:92706998571a 300 }
Davidroid 0:92706998571a 301
Davidroid 0:92706998571a 302 virtual void HardHiZ(void)
Davidroid 0:92706998571a 303 {
Davidroid 0:92706998571a 304 L6470_HardHiZ();
Davidroid 0:92706998571a 305 }
Davidroid 0:92706998571a 306
Davidroid 0:92706998571a 307 virtual void StepClock(direction_t direction)
Davidroid 0:92706998571a 308 {
Davidroid 0:92706998571a 309 L6470_StepClock((eL6470_DirId_t) (direction == StepperMotor::FWD ? L6470_DIR_FWD_ID : L6470_DIR_REV_ID));
Davidroid 0:92706998571a 310 }
Davidroid 0:92706998571a 311
Davidroid 0:92706998571a 312 virtual void ReleaseSW(eL6470_ActId_t L6470_ActId, direction_t direction)
Davidroid 0:92706998571a 313 {
Davidroid 0:92706998571a 314 L6470_ReleaseSW((eL6470_ActId_t) L6470_ActId, (eL6470_DirId_t) (direction == StepperMotor::FWD ? L6470_DIR_FWD_ID : L6470_DIR_REV_ID));
Davidroid 0:92706998571a 315 }
Davidroid 0:92706998571a 316
Davidroid 0:92706998571a 317 virtual void ResetDevice(void)
Davidroid 0:92706998571a 318 {
Davidroid 0:92706998571a 319 L6470_ResetDevice();
Davidroid 0:92706998571a 320 }
Davidroid 0:92706998571a 321
Davidroid 0:92706998571a 322 virtual void PrepareGetStatus(void)
Davidroid 0:92706998571a 323 {
Davidroid 0:92706998571a 324 L6470_PrepareGetStatus();
Davidroid 0:92706998571a 325 }
Davidroid 0:92706998571a 326
Davidroid 0:92706998571a 327 virtual void PrepareGetParameter(unsigned int parameter)
Davidroid 0:92706998571a 328 {
Davidroid 0:92706998571a 329 L6470_PrepareGetParam((eL6470_RegId_t) parameter);
Davidroid 0:92706998571a 330 }
Davidroid 0:92706998571a 331
Davidroid 0:92706998571a 332 virtual void PrepareGetPosition(void)
Davidroid 0:92706998571a 333 {
Davidroid 0:92706998571a 334 L6470_PrepareGetParam((eL6470_RegId_t) L6470_ABS_POS_ID);
Davidroid 0:92706998571a 335 }
Davidroid 0:92706998571a 336
Davidroid 0:92706998571a 337 virtual void PrepareGetMark(void)
Davidroid 0:92706998571a 338 {
Davidroid 0:92706998571a 339 L6470_PrepareGetParam((eL6470_RegId_t) L6470_MARK_ID);
Davidroid 0:92706998571a 340 }
Davidroid 0:92706998571a 341
Davidroid 0:92706998571a 342 virtual void PrepareGetSpeed(void)
Davidroid 0:92706998571a 343 {
Davidroid 0:92706998571a 344 L6470_GetParam((eL6470_RegId_t) L6470_SPEED_ID);
Davidroid 0:92706998571a 345 }
Davidroid 0:92706998571a 346
Davidroid 0:92706998571a 347 virtual void PrepareGetMaxSpeed(void)
Davidroid 0:92706998571a 348 {
Davidroid 0:92706998571a 349 L6470_PrepareGetParam((eL6470_RegId_t) L6470_MAX_SPEED_ID);
Davidroid 0:92706998571a 350 }
Davidroid 0:92706998571a 351
Davidroid 0:92706998571a 352 virtual void PrepareGetMinSpeed(void)
Davidroid 0:92706998571a 353 {
Davidroid 0:92706998571a 354 L6470_PrepareGetParam((eL6470_RegId_t) L6470_MIN_SPEED_ID);
Davidroid 0:92706998571a 355 }
Davidroid 0:92706998571a 356
Davidroid 0:92706998571a 357 virtual void PrepareGetAcceleration(void)
Davidroid 0:92706998571a 358 {
Davidroid 0:92706998571a 359 L6470_PrepareGetParam((eL6470_RegId_t) L6470_ACC_ID);
Davidroid 0:92706998571a 360 }
Davidroid 0:92706998571a 361
Davidroid 0:92706998571a 362 virtual void PrepareGetDeceleration(void)
Davidroid 0:92706998571a 363 {
Davidroid 0:92706998571a 364 L6470_PrepareGetParam((eL6470_RegId_t) L6470_DEC_ID);
Davidroid 0:92706998571a 365 }
Davidroid 0:92706998571a 366
Davidroid 0:92706998571a 367 virtual direction_t PrepareGetDirection(void)
Davidroid 0:92706998571a 368 {
Davidroid 0:92706998571a 369 return (direction_t) (L6470_CheckStatusRegisterFlag((eL6470_StatusRegisterFlagId_t) DIR_ID) == 1 ? StepperMotor::FWD : StepperMotor::BWD);
Davidroid 0:92706998571a 370 }
Davidroid 0:92706998571a 371
Davidroid 0:92706998571a 372 virtual void PrepareSetParameter(unsigned int parameter, unsigned int value)
Davidroid 0:92706998571a 373 {
Davidroid 0:92706998571a 374 L6470_PrepareSetParam((eL6470_RegId_t) parameter, (uint32_t) value);
Davidroid 0:92706998571a 375 }
Davidroid 0:92706998571a 376
Davidroid 0:92706998571a 377 virtual void PrepareSetHome(void)
Davidroid 0:92706998571a 378 {
Davidroid 0:92706998571a 379 L6470_PrepareResetPos();
Davidroid 0:92706998571a 380 //L6470_SetParam((eL6470_RegId_t) L6470_ABS_POS_ID, (uint32_t) 0);
Davidroid 0:92706998571a 381 }
Davidroid 0:92706998571a 382
Davidroid 0:92706998571a 383 virtual void PrepareSetMark(void)
Davidroid 0:92706998571a 384 {
Davidroid 0:92706998571a 385 uint32_t mark = L6470_GetParam((eL6470_RegId_t) L6470_ABS_POS_ID);
Davidroid 0:92706998571a 386 L6470_PrepareSetParam((eL6470_RegId_t) L6470_MARK_ID, mark);
Davidroid 0:92706998571a 387 }
Davidroid 0:92706998571a 388
Davidroid 0:92706998571a 389 virtual void PrepareSetMaxSpeed(unsigned int speed)
Davidroid 0:92706998571a 390 {
Davidroid 0:92706998571a 391 L6470_PrepareSetParam((eL6470_RegId_t) L6470_MAX_SPEED_ID, (uint32_t) speed);
Davidroid 0:92706998571a 392 }
Davidroid 0:92706998571a 393
Davidroid 0:92706998571a 394 virtual void PrepareSetMinSpeed(unsigned int speed)
Davidroid 0:92706998571a 395 {
Davidroid 0:92706998571a 396 L6470_PrepareSetParam((eL6470_RegId_t) L6470_MIN_SPEED_ID, (uint32_t) speed);
Davidroid 0:92706998571a 397 }
Davidroid 0:92706998571a 398
Davidroid 0:92706998571a 399 virtual void PrepareSetAcceleration(unsigned int acceleration)
Davidroid 0:92706998571a 400 {
Davidroid 0:92706998571a 401 L6470_PrepareSetParam((eL6470_RegId_t) L6470_ACC_ID, (uint32_t) acceleration);
Davidroid 0:92706998571a 402 }
Davidroid 0:92706998571a 403
Davidroid 0:92706998571a 404 virtual void PrepareSetDeceleration(unsigned int deceleration)
Davidroid 0:92706998571a 405 {
Davidroid 0:92706998571a 406 L6470_PrepareSetParam((eL6470_RegId_t) L6470_DEC_ID, (uint32_t) deceleration);
Davidroid 0:92706998571a 407 }
Davidroid 0:92706998571a 408
Davidroid 0:92706998571a 409 virtual void PrepareGoTo(signed int position)
Davidroid 0:92706998571a 410 {
Davidroid 0:92706998571a 411 L6470_PrepareGoTo((uint32_t) position);
Davidroid 0:92706998571a 412 }
Davidroid 0:92706998571a 413
Davidroid 0:92706998571a 414 virtual void PrepareGoTo(signed int position, direction_t direction)
Davidroid 0:92706998571a 415 {
Davidroid 0:92706998571a 416 L6470_PrepareGoToDir((eL6470_DirId_t) (direction == StepperMotor::FWD ? L6470_DIR_FWD_ID : L6470_DIR_REV_ID), (signed int) position);
Davidroid 0:92706998571a 417 }
Davidroid 0:92706998571a 418
Davidroid 0:92706998571a 419 virtual void PrepareGoHome(void)
Davidroid 0:92706998571a 420 {
Davidroid 0:92706998571a 421 L6470_PrepareGoHome();
Davidroid 0:92706998571a 422 }
Davidroid 0:92706998571a 423
Davidroid 0:92706998571a 424 virtual void PrepareGoMark(void)
Davidroid 0:92706998571a 425 {
Davidroid 0:92706998571a 426 L6470_PrepareGoMark();
Davidroid 0:92706998571a 427 }
Davidroid 0:92706998571a 428
Davidroid 0:92706998571a 429 virtual void PrepareGoUntil(eL6470_ActId_t L6470_ActId, direction_t direction, unsigned int speed)
Davidroid 0:92706998571a 430 {
Davidroid 0:92706998571a 431 L6470_PrepareGoUntil((eL6470_ActId_t) L6470_ActId, (eL6470_DirId_t) (direction == StepperMotor::FWD ? L6470_DIR_FWD_ID : L6470_DIR_REV_ID), (unsigned int) speed);
Davidroid 0:92706998571a 432 }
Davidroid 0:92706998571a 433
Davidroid 0:92706998571a 434 virtual void PrepareRun(direction_t direction)
Davidroid 0:92706998571a 435 {
Davidroid 0:92706998571a 436 L6470_PrepareRun((eL6470_DirId_t) (direction == StepperMotor::FWD ? L6470_DIR_FWD_ID : L6470_DIR_REV_ID), (unsigned int) L6470_GetParam((eL6470_RegId_t) L6470_MAX_SPEED_ID));
Davidroid 0:92706998571a 437 }
Davidroid 0:92706998571a 438
Davidroid 0:92706998571a 439 virtual void PrepareRun(direction_t direction, unsigned int speed)
Davidroid 0:92706998571a 440 {
Davidroid 0:92706998571a 441 L6470_PrepareRun((eL6470_DirId_t) (direction == StepperMotor::FWD ? L6470_DIR_FWD_ID : L6470_DIR_REV_ID), (unsigned int) speed);
Davidroid 0:92706998571a 442 }
Davidroid 0:92706998571a 443
Davidroid 0:92706998571a 444 virtual void PrepareMove(direction_t direction, unsigned int steps)
Davidroid 0:92706998571a 445 {
Davidroid 0:92706998571a 446 L6470_PrepareMove((eL6470_DirId_t) (direction == StepperMotor::FWD ? L6470_DIR_FWD_ID : L6470_DIR_REV_ID), (unsigned int) steps);
Davidroid 0:92706998571a 447 }
Davidroid 0:92706998571a 448
Davidroid 0:92706998571a 449 virtual void PrepareSoftStop(void)
Davidroid 0:92706998571a 450 {
Davidroid 0:92706998571a 451 L6470_PrepareSoftStop();
Davidroid 0:92706998571a 452 }
Davidroid 0:92706998571a 453
Davidroid 0:92706998571a 454 virtual void PrepareHardStop(void)
Davidroid 0:92706998571a 455 {
Davidroid 0:92706998571a 456 L6470_PrepareHardStop();
Davidroid 0:92706998571a 457 }
Davidroid 0:92706998571a 458
Davidroid 0:92706998571a 459 virtual void PrepareSoftHiZ(void)
Davidroid 0:92706998571a 460 {
Davidroid 0:92706998571a 461 L6470_PrepareSoftHiZ();
Davidroid 0:92706998571a 462 }
Davidroid 0:92706998571a 463
Davidroid 0:92706998571a 464 virtual void PrepareHardHiZ(void)
Davidroid 0:92706998571a 465 {
Davidroid 0:92706998571a 466 L6470_PrepareHardHiZ();
Davidroid 0:92706998571a 467 }
Davidroid 0:92706998571a 468
Davidroid 0:92706998571a 469 virtual void PrepareStepClock(direction_t direction)
Davidroid 0:92706998571a 470 {
Davidroid 0:92706998571a 471 L6470_StepClock((eL6470_DirId_t) (direction == StepperMotor::FWD ? L6470_DIR_FWD_ID : L6470_DIR_REV_ID));
Davidroid 0:92706998571a 472 }
Davidroid 0:92706998571a 473
Davidroid 0:92706998571a 474 virtual void PrepareReleaseSW(eL6470_ActId_t L6470_ActId, direction_t direction)
Davidroid 0:92706998571a 475 {
Davidroid 0:92706998571a 476 L6470_ReleaseSW((eL6470_ActId_t) L6470_ActId, (eL6470_DirId_t) (direction == StepperMotor::FWD ? L6470_DIR_FWD_ID : L6470_DIR_REV_ID));
Davidroid 0:92706998571a 477 }
Davidroid 0:92706998571a 478
Davidroid 0:92706998571a 479 virtual void PrepareResetDevice(void)
Davidroid 0:92706998571a 480 {
Davidroid 0:92706998571a 481 L6470_ResetDevice();
Davidroid 0:92706998571a 482 }
Davidroid 0:92706998571a 483
Davidroid 0:92706998571a 484 virtual uint8_t* PerformAction(void)
Davidroid 0:92706998571a 485 {
Davidroid 0:92706998571a 486 return (uint8_t*) L6470_PerformPreparedApplicationCommand();
Davidroid 0:92706998571a 487 }
Davidroid 0:92706998571a 488
Davidroid 0:92706998571a 489
Davidroid 0:92706998571a 490 /*** Public Interrupt Related Methods ***/
Davidroid 0:92706998571a 491
Davidroid 0:92706998571a 492 /* ACTION 6 --------------------------------------------------------------*
Davidroid 0:92706998571a 493 * Implement here interrupt related methods, if any. *
Davidroid 0:92706998571a 494 * Note that interrupt handling is platform dependent, e.g.: *
Davidroid 0:92706998571a 495 * + mbed: *
Davidroid 0:92706998571a 496 * InterruptIn feature_irq(pin); //Interrupt object. *
Davidroid 0:92706998571a 497 * feature_irq.rise(callback); //Attach a callback. *
Davidroid 0:92706998571a 498 * feature_irq.mode(PullNone); //Set interrupt mode. *
Davidroid 0:92706998571a 499 * feature_irq.enable_irq(); //Enable interrupt. *
Davidroid 0:92706998571a 500 * feature_irq.disable_irq(); //Disable interrupt. *
Davidroid 0:92706998571a 501 * + Arduino: *
Davidroid 0:92706998571a 502 * attachInterrupt(pin, callback, RISING); //Attach a callback. *
Davidroid 0:92706998571a 503 * detachInterrupt(pin); //Detach a callback. *
Davidroid 0:92706998571a 504 * *
Davidroid 0:92706998571a 505 * Example (mbed): *
Davidroid 0:92706998571a 506 * void AttachFeatureIRQ(void (*fptr) (void)) *
Davidroid 0:92706998571a 507 * { *
Davidroid 0:92706998571a 508 * feature_irq.rise(fptr); *
Davidroid 0:92706998571a 509 * } *
Davidroid 0:92706998571a 510 * *
Davidroid 0:92706998571a 511 * void EnableFeatureIRQ(void) *
Davidroid 0:92706998571a 512 * { *
Davidroid 0:92706998571a 513 * feature_irq.enable_irq(); *
Davidroid 0:92706998571a 514 * } *
Davidroid 0:92706998571a 515 * *
Davidroid 0:92706998571a 516 * void DisableFeatureIRQ(void) *
Davidroid 0:92706998571a 517 * { *
Davidroid 0:92706998571a 518 * feature_irq.disable_irq(); *
Davidroid 0:92706998571a 519 * } *
Davidroid 0:92706998571a 520 *------------------------------------------------------------------------*/
Davidroid 0:92706998571a 521 /**
Davidroid 0:92706998571a 522 * @brief Attaching a FLAG interrupt handler.
Davidroid 0:92706998571a 523 * @param fptr an interrupt handler.
Davidroid 0:92706998571a 524 * @retval None.
Davidroid 0:92706998571a 525 */
Davidroid 0:92706998571a 526 void AttachFlagIRQ(void (*fptr)(void))
Davidroid 0:92706998571a 527 {
Davidroid 0:92706998571a 528 flag_irq.rise(fptr);
Davidroid 0:92706998571a 529 }
Davidroid 0:92706998571a 530
Davidroid 0:92706998571a 531 /**
Davidroid 0:92706998571a 532 * @brief Enabling FLAG interrupt handling.
Davidroid 0:92706998571a 533 * @param None.
Davidroid 0:92706998571a 534 * @retval None.
Davidroid 0:92706998571a 535 */
Davidroid 0:92706998571a 536 void EnableFlagIRQ(void)
Davidroid 0:92706998571a 537 {
Davidroid 0:92706998571a 538 flag_irq.enable_irq();
Davidroid 0:92706998571a 539 }
Davidroid 0:92706998571a 540
Davidroid 0:92706998571a 541 /**
Davidroid 0:92706998571a 542 * @brief Disabling FLAG interrupt handling.
Davidroid 0:92706998571a 543 * @param None.
Davidroid 0:92706998571a 544 * @retval None.
Davidroid 0:92706998571a 545 */
Davidroid 0:92706998571a 546 void DisableFlagIRQ(void)
Davidroid 0:92706998571a 547 {
Davidroid 0:92706998571a 548 flag_irq.disable_irq();
Davidroid 0:92706998571a 549 }
Davidroid 0:92706998571a 550
Davidroid 0:92706998571a 551
Davidroid 0:92706998571a 552 protected:
Davidroid 0:92706998571a 553
Davidroid 0:92706998571a 554 /*** Protected Component Related Methods ***/
Davidroid 0:92706998571a 555
Davidroid 0:92706998571a 556 /* ACTION 7 --------------------------------------------------------------*
Davidroid 0:92706998571a 557 * Declare here the component's specific methods. *
Davidroid 0:92706998571a 558 * They should be: *
Davidroid 0:92706998571a 559 * + Methods with the same name of the C component's virtual table's *
Davidroid 0:92706998571a 560 * functions (1); *
Davidroid 0:92706998571a 561 * + Methods with the same name of the C component's extended virtual *
Davidroid 0:92706998571a 562 * table's functions, if any (2); *
Davidroid 0:92706998571a 563 * + Helper methods, if any, like functions declared in the component's *
Davidroid 0:92706998571a 564 * source files but not pointed by the component's virtual table (3). *
Davidroid 0:92706998571a 565 * *
Davidroid 0:92706998571a 566 * Example: *
Davidroid 0:92706998571a 567 * DrvStatusTypeDef COMPONENT_GetValue(float* pfData); //(1) *
Davidroid 0:92706998571a 568 * DrvStatusTypeDef COMPONENT_EnableFeature(void); //(2) *
Davidroid 0:92706998571a 569 * DrvStatusTypeDef COMPONENT_ComputeAverage(void); //(3) *
Davidroid 0:92706998571a 570 *------------------------------------------------------------------------*/
Davidroid 0:92706998571a 571 int32_t L6470_AbsPos_2_Position(uint32_t AbsPos);
Davidroid 0:92706998571a 572 uint32_t L6470_Position_2_AbsPos(int32_t Position);
Davidroid 0:92706998571a 573 float L6470_Speed_2_Step_s(uint32_t Speed);
Davidroid 0:92706998571a 574 uint32_t L6470_Step_s_2_Speed(float Step_s);
Davidroid 0:92706998571a 575 float L6470_Acc_2_Step_s2(uint16_t Acc);
Davidroid 0:92706998571a 576 uint16_t L6470_Step_s2_2_Acc(float Step_s2);
Davidroid 0:92706998571a 577 float L6470_Dec_2_Step_s2(uint16_t Dec);
Davidroid 0:92706998571a 578 uint16_t L6470_Step_s2_2_Dec(float Step_s2);
Davidroid 0:92706998571a 579 float L6470_MaxSpeed_2_Step_s(uint16_t MaxSpeed);
Davidroid 0:92706998571a 580 uint16_t L6470_Step_s_2_MaxSpeed(float Step_s);
Davidroid 0:92706998571a 581 float L6470_MinSpeed_2_Step_s(uint16_t MinSpeed);
Davidroid 0:92706998571a 582 uint16_t L6470_Step_s_2_MinSpeed(float Step_s);
Davidroid 0:92706998571a 583 float L6470_FsSpd_2_Step_s(uint16_t FsSpd);
Davidroid 0:92706998571a 584 uint16_t L6470_Step_s_2_FsSpd(float Step_s);
Davidroid 0:92706998571a 585 float L6470_IntSpeed_2_Step_s(uint16_t IntSpeed);
Davidroid 0:92706998571a 586 uint16_t L6470_Step_s_2_IntSpeed(float Step_s);
Davidroid 0:92706998571a 587 float L6470_StSlp_2_s_Step(uint8_t StSlp);
Davidroid 0:92706998571a 588 uint8_t L6470_s_Step_2_StSlp(float s_Step);
Davidroid 0:92706998571a 589 float L6470_FnSlpAcc_2_s_Step(uint8_t FnSlpAcc);
Davidroid 0:92706998571a 590 uint8_t L6470_s_Step_2_FnSlpAcc(float s_Step);
Davidroid 0:92706998571a 591 float L6470_FnSlpDec_2_s_Step(uint8_t FnSlpDec);
Davidroid 0:92706998571a 592 uint8_t L6470_s_Step_2_FnSlpDec(float s_Step);
Davidroid 0:92706998571a 593 float L6470_OcdTh_2_mA(uint8_t OcdTh);
Davidroid 0:92706998571a 594 uint8_t L6470_mA_2_OcdTh(float mA);
Davidroid 0:92706998571a 595 float L6470_StallTh_2_mA(uint8_t StallTh);
Davidroid 0:92706998571a 596 uint8_t L6470_mA_2_StallTh(float mA);
Davidroid 0:92706998571a 597 DrvStatusTypeDef L6470_Config(MICROSTEPPING_MOTOR_InitTypeDef *MotorParameterData);
Davidroid 0:92706998571a 598 void L6470_SetParam(eL6470_RegId_t L6470_RegId, uint32_t Value);
Davidroid 0:92706998571a 599 uint32_t L6470_GetParam(eL6470_RegId_t L6470_RegId);
Davidroid 0:92706998571a 600 void L6470_Run(eL6470_DirId_t L6470_DirId, uint32_t Speed);
Davidroid 0:92706998571a 601 void L6470_StepClock(eL6470_DirId_t L6470_DirId);
Davidroid 0:92706998571a 602 void L6470_Move(eL6470_DirId_t L6470_DirId, uint32_t N_Step);
Davidroid 0:92706998571a 603 void L6470_GoTo(uint32_t AbsPos);
Davidroid 0:92706998571a 604 void L6470_GoToDir(eL6470_DirId_t L6470_DirId, uint32_t AbsPos);
Davidroid 0:92706998571a 605 void L6470_GoUntil(eL6470_ActId_t L6470_ActId, eL6470_DirId_t L6470_DirId, uint32_t Speed);
Davidroid 0:92706998571a 606 void L6470_ReleaseSW(eL6470_ActId_t L6470_ActId, eL6470_DirId_t L6470_DirId);
Davidroid 0:92706998571a 607 void L6470_GoHome(void);
Davidroid 0:92706998571a 608 void L6470_GoMark(void);
Davidroid 0:92706998571a 609 void L6470_ResetPos(void);
Davidroid 0:92706998571a 610 void L6470_ResetDevice(void);
Davidroid 0:92706998571a 611 void L6470_SoftStop(void);
Davidroid 0:92706998571a 612 void L6470_HardStop(void);
Davidroid 0:92706998571a 613 void L6470_SoftHiZ(void);
Davidroid 0:92706998571a 614 void L6470_HardHiZ(void);
Davidroid 0:92706998571a 615 uint16_t L6470_GetStatus(void);
Davidroid 0:92706998571a 616 void L6470_PrepareSetParam(eL6470_RegId_t L6470_RegId, uint32_t Value);
Davidroid 0:92706998571a 617 void L6470_PrepareGetParam(eL6470_RegId_t L6470_RegId);
Davidroid 0:92706998571a 618 void L6470_PrepareRun(eL6470_DirId_t L6470_DirId, uint32_t Speed);
Davidroid 0:92706998571a 619 void L6470_PrepareStepClock(eL6470_DirId_t L6470_DirId);
Davidroid 0:92706998571a 620 void L6470_PrepareMove(eL6470_DirId_t L6470_DirId, uint32_t N_Step);
Davidroid 0:92706998571a 621 void L6470_PrepareGoTo(uint32_t AbsPos);
Davidroid 0:92706998571a 622 void L6470_PrepareGoToDir(eL6470_DirId_t L6470_DirId, uint32_t AbsPos);
Davidroid 0:92706998571a 623 void L6470_PrepareGoUntil(eL6470_ActId_t L6470_ActId, eL6470_DirId_t L6470_DirId, uint32_t Speed);
Davidroid 0:92706998571a 624 void L6470_PrepareReleaseSW(eL6470_ActId_t L6470_ActId, eL6470_DirId_t L6470_DirId);
Davidroid 0:92706998571a 625 void L6470_PrepareGoHome(void);
Davidroid 0:92706998571a 626 void L6470_PrepareGoMark(void);
Davidroid 0:92706998571a 627 void L6470_PrepareResetPos(void);
Davidroid 0:92706998571a 628 void L6470_PrepareResetDevice(void);
Davidroid 0:92706998571a 629 void L6470_PrepareSoftStop(void);
Davidroid 0:92706998571a 630 void L6470_PrepareHardStop(void);
Davidroid 0:92706998571a 631 void L6470_PrepareSoftHiZ(void);
Davidroid 0:92706998571a 632 void L6470_PrepareHardHiZ(void);
Davidroid 0:92706998571a 633 void L6470_PrepareGetStatus(void);
Davidroid 0:92706998571a 634 uint8_t* L6470_PerformPreparedApplicationCommand(void);
Davidroid 0:92706998571a 635 void L6470_DaisyChainCommand(uint8_t* pL6470_DaisyChainSpiTxStruct, uint8_t* pL6470_DaisyChainSpiRxStruct);
Davidroid 0:92706998571a 636 uint32_t L6470_ExtractReturnedData(uint8_t* pL6470_DaisyChainSpiRxStruct, uint8_t LengthByte);
Davidroid 0:92706998571a 637 uint8_t L6470_CheckStatusRegisterFlag(uint8_t L6470_StatusRegisterFlagId);
Davidroid 0:92706998571a 638 uint8_t* L6470_GetRegisterName(uint8_t id);
Davidroid 0:92706998571a 639 void L6470_ResetAppCmdPkg(sL6470_AppCmdPkg_t* pL6470_AppCmdPkg);
Davidroid 0:92706998571a 640 void L6470_FillAppCmdPkg(sL6470_AppCmdPkg_t* pL6470_AppCmdPkg, eL6470_AppCmdId_t L6470_AppCmdId, uint32_t p1, uint32_t p2, uint32_t p3);
Davidroid 0:92706998571a 641 void L6470_PrepareAppCmdPkg(sL6470_AppCmdPkg_t* pL6470_AppCmdPkg, eL6470_AppCmdId_t L6470_AppCmdId, uint32_t p1, uint32_t p2, uint32_t p3);
Davidroid 0:92706998571a 642 void L6470_PrepareDaisyChainCommand(sL6470_AppCmdPkg_t* pL6470_AppCmdPkg, uint8_t* pL6470_DaisyChainSpiTxStruct);
Davidroid 0:92706998571a 643
Davidroid 0:92706998571a 644
Davidroid 0:92706998571a 645 /*** Component's I/O Methods ***/
Davidroid 0:92706998571a 646
Davidroid 0:92706998571a 647 /**
Davidroid 0:92706998571a 648 * @brief Utility function to read data from L6470.
Davidroid 0:92706998571a 649 * @param[out] pBuffer pointer to the buffer to read data into.
Davidroid 0:92706998571a 650 * @param[in] NumBytesToRead number of bytes to read.
Davidroid 0:92706998571a 651 * @retval COMPONENT_OK in case of success, COMPONENT_ERROR otherwise.
Davidroid 0:92706998571a 652 */
Davidroid 0:92706998571a 653 DrvStatusTypeDef Read(uint8_t* pBuffer, uint16_t NumBytesToRead)
Davidroid 0:92706998571a 654 {
Davidroid 0:92706998571a 655 if (dev_spi.spi_read(pBuffer, ssel, NumBytesToRead) != 0)
Davidroid 0:92706998571a 656 return COMPONENT_ERROR;
Davidroid 0:92706998571a 657 return COMPONENT_OK;
Davidroid 0:92706998571a 658 }
Davidroid 0:92706998571a 659
Davidroid 0:92706998571a 660 /**
Davidroid 0:92706998571a 661 * @brief Utility function to write data to L6470.
Davidroid 0:92706998571a 662 * @param[in] pBuffer pointer to the buffer of data to send.
Davidroid 0:92706998571a 663 * @param[in] NumBytesToWrite number of bytes to write.
Davidroid 0:92706998571a 664 * @retval COMPONENT_OK in case of success, COMPONENT_ERROR otherwise.
Davidroid 0:92706998571a 665 */
Davidroid 0:92706998571a 666 DrvStatusTypeDef Write(uint8_t* pBuffer, uint16_t NumBytesToWrite)
Davidroid 0:92706998571a 667 {
Davidroid 0:92706998571a 668 if (dev_spi.spi_write(pBuffer, ssel, NumBytesToWrite) != 0)
Davidroid 0:92706998571a 669 return COMPONENT_ERROR;
Davidroid 0:92706998571a 670 return COMPONENT_OK;
Davidroid 0:92706998571a 671 }
Davidroid 0:92706998571a 672
Davidroid 0:92706998571a 673 /**
Davidroid 0:92706998571a 674 * @brief Utility function to read and write data from/to L6470 at the same time.
Davidroid 0:92706998571a 675 * @param[out] pBufferToRead pointer to the buffer to read data into.
Davidroid 0:92706998571a 676 * @param[in] pBufferToWrite pointer to the buffer of data to send.
Davidroid 0:92706998571a 677 * @param[in] NumBytes number of bytes to read and write.
Davidroid 0:92706998571a 678 * @retval COMPONENT_OK in case of success, COMPONENT_ERROR otherwise.
Davidroid 0:92706998571a 679 */
Davidroid 0:92706998571a 680 DrvStatusTypeDef ReadWrite(uint8_t* pBufferToRead, uint8_t* pBufferToWrite, uint16_t NumBytes)
Davidroid 0:92706998571a 681 {
Davidroid 0:92706998571a 682 if (dev_spi.spi_read_write(pBufferToRead, pBufferToWrite, ssel, NumBytes) != 0)
Davidroid 0:92706998571a 683 return COMPONENT_ERROR;
Davidroid 0:92706998571a 684 return COMPONENT_OK;
Davidroid 0:92706998571a 685 }
Davidroid 0:92706998571a 686
Davidroid 0:92706998571a 687 /* ACTION 8 --------------------------------------------------------------*
Davidroid 0:92706998571a 688 * Implement here other I/O methods beyond those already implemented *
Davidroid 0:92706998571a 689 * above, which are declared extern within the component's header file. *
Davidroid 0:92706998571a 690 *------------------------------------------------------------------------*/
Davidroid 0:92706998571a 691 /*
Davidroid 0:92706998571a 692 * Puts the device in standby mode.
Davidroid 0:92706998571a 693 */
Davidroid 0:92706998571a 694 void L6470_ENABLE(void)
Davidroid 0:92706998571a 695 {
Davidroid 0:92706998571a 696 /* TO BE IMPLEMENTED BY USING TARGET PLATFORM'S APIs. */
Davidroid 0:92706998571a 697 standby_reset = 1;
Davidroid 0:92706998571a 698 }
Davidroid 0:92706998571a 699
Davidroid 0:92706998571a 700 /*
Davidroid 0:92706998571a 701 * Puts the device in reset mode.
Davidroid 0:92706998571a 702 */
Davidroid 0:92706998571a 703 void L6470_DISABLE(void)
Davidroid 0:92706998571a 704 {
Davidroid 0:92706998571a 705 /* TO BE IMPLEMENTED BY USING TARGET PLATFORM'S APIs. */
Davidroid 0:92706998571a 706 standby_reset = 0;
Davidroid 0:92706998571a 707 }
Davidroid 0:92706998571a 708
Davidroid 0:92706998571a 709 /*
Davidroid 0:92706998571a 710 * Write and read bytes to/from the component through the SPI at the same time.
Davidroid 0:92706998571a 711 */
Davidroid 0:92706998571a 712 void L6470_SPI_Communication(uint8_t *pTxData, uint8_t *pRxData, uint16_t Size, uint32_t Timeout)
Davidroid 0:92706998571a 713 {
Davidroid 0:92706998571a 714 /* TO BE IMPLEMENTED BY USING TARGET PLATFORM'S APIs. */
Davidroid 0:92706998571a 715 ReadWrite(pRxData, pTxData, Size);
Davidroid 0:92706998571a 716 }
Davidroid 0:92706998571a 717
Davidroid 0:92706998571a 718
Davidroid 0:92706998571a 719 /*** Component's Instance Variables ***/
Davidroid 0:92706998571a 720
Davidroid 0:92706998571a 721 /* Identity */
Davidroid 0:92706998571a 722 uint8_t who_am_i;
Davidroid 0:92706998571a 723
Davidroid 0:92706998571a 724 /* ACTION 9 --------------------------------------------------------------*
Davidroid 0:92706998571a 725 * There should be only a unique identifier for each component, which *
Davidroid 0:92706998571a 726 * should be the "who_am_i" parameter, hence this parameter is optional. *
Davidroid 0:92706998571a 727 *------------------------------------------------------------------------*/
Davidroid 0:92706998571a 728 /* Type. */
Davidroid 0:92706998571a 729 uint8_t type;
Davidroid 0:92706998571a 730
Davidroid 0:92706998571a 731 /* Flag Interrupt. */
Davidroid 0:92706998571a 732 InterruptIn flag_irq;
Davidroid 0:92706998571a 733
Davidroid 0:92706998571a 734 /* Standby/reset pin. */
Davidroid 0:92706998571a 735 DigitalOut standby_reset;
Davidroid 0:92706998571a 736
Davidroid 0:92706998571a 737 /* Configuration. */
Davidroid 0:92706998571a 738 DigitalOut ssel;
Davidroid 0:92706998571a 739
Davidroid 0:92706998571a 740 /* IO Device. */
Davidroid 0:92706998571a 741 DevSPI &dev_spi;
Davidroid 0:92706998571a 742
Davidroid 0:92706998571a 743 /* Interrupts. */
Davidroid 0:92706998571a 744 /* ACTION 10 -------------------------------------------------------------*
Davidroid 0:92706998571a 745 * Put here interrupt related objects, if needed. *
Davidroid 0:92706998571a 746 * Note that interrupt handling is platform dependent, see *
Davidroid 0:92706998571a 747 * "Interrupt Related Methods" above. *
Davidroid 0:92706998571a 748 * *
Davidroid 0:92706998571a 749 * Example: *
Davidroid 0:92706998571a 750 * + mbed: *
Davidroid 0:92706998571a 751 * InterruptIn feature_int; *
Davidroid 0:92706998571a 752 *------------------------------------------------------------------------*/
Davidroid 0:92706998571a 753
Davidroid 0:92706998571a 754 /* Data. */
Davidroid 0:92706998571a 755 /* ACTION 11 -------------------------------------------------------------*
Davidroid 0:92706998571a 756 * Declare here the component's data, one variable per line. *
Davidroid 0:92706998571a 757 * *
Davidroid 0:92706998571a 758 * Example: *
Davidroid 0:92706998571a 759 * int T0_out; *
Davidroid 0:92706998571a 760 * int T1_out; *
Davidroid 0:92706998571a 761 * float T0_degC; *
Davidroid 0:92706998571a 762 * float T1_degC; *
Davidroid 0:92706998571a 763 *------------------------------------------------------------------------*/
Davidroid 0:92706998571a 764 uint8_t L6470_Id;
Davidroid 0:92706998571a 765 const sL6470_Register_t *L6470_Register;
Davidroid 0:92706998571a 766 const sL6470_ApplicationCommand_t *L6470_ApplicationCommand;
Davidroid 0:92706998571a 767 const sL6470_Direction_t *L6470_Direction;
Davidroid 0:92706998571a 768 const sL6470_ACT_t *L6470_ACT;
Davidroid 0:92706998571a 769 sL6470_StatusRegister_t L6470_StatusRegister;
Davidroid 0:92706998571a 770 sL6470_StatusRegister_t *pL6470_StatusRegister;
Davidroid 0:92706998571a 771 StepperMotorRegister_t StepperMotorRegister;
Davidroid 0:92706998571a 772
Davidroid 0:92706998571a 773 /* Static data. */
Davidroid 0:92706998571a 774 static uint8_t number_of_devices;
Davidroid 0:92706998571a 775 static const sL6470_Register_t _L6470_Register[L6470REGIDSIZE];
Davidroid 0:92706998571a 776 static const sL6470_ApplicationCommand_t _L6470_ApplicationCommand[L6470APPCMDIDSIZE];
Davidroid 0:92706998571a 777 static const sL6470_Direction_t _L6470_Direction[L6470DIRIDSIZE];
Davidroid 0:92706998571a 778 static const sL6470_ACT_t _L6470_ACT[L6470ACTIDSIZE];
Davidroid 0:92706998571a 779 static eFlagStatus_t L6470_DaisyChain_HalfPrepared;
Davidroid 0:92706998571a 780 static sL6470_AppCmdPkg_t L6470_AppCmdPkg[L6470DAISYCHAINSIZE];
Davidroid 0:92706998571a 781 static uint8_t L6470_DaisyChainSpiTxStruct[L6470MAXSPICMDBYTESIZE][L6470DAISYCHAINSIZE];
Davidroid 0:92706998571a 782 static uint8_t L6470_DaisyChainSpiRxStruct[L6470MAXSPICMDBYTESIZE][L6470DAISYCHAINSIZE];
Davidroid 0:92706998571a 783 };
Davidroid 0:92706998571a 784
Davidroid 0:92706998571a 785 #endif // __L6470_CLASS_H
Davidroid 0:92706998571a 786
Davidroid 0:92706998571a 787 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/