Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of X_NUCLEO_IHM01A1 by
Components/l6474/l6474_class.h@0:2887415a46cd, 2015-10-14 (annotated)
- Committer:
- Davidroid
- Date:
- Wed Oct 14 15:12:18 2015 +0000
- Revision:
- 0:2887415a46cd
- Child:
- 1:b38ebb8ea286
Library to handle the X_NUCLEO_IHM01A1 Motor Control Expansion Board.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Davidroid | 0:2887415a46cd | 1 | /** |
Davidroid | 0:2887415a46cd | 2 | ****************************************************************************** |
Davidroid | 0:2887415a46cd | 3 | * @file l6474_class.h |
Davidroid | 0:2887415a46cd | 4 | * @author IPC Rennes |
Davidroid | 0:2887415a46cd | 5 | * @version V1.5.0 |
Davidroid | 0:2887415a46cd | 6 | * @date November 12, 2014 |
Davidroid | 0:2887415a46cd | 7 | * @brief L6474 driver (fully integrated microstepping motor driver) |
Davidroid | 0:2887415a46cd | 8 | * @note (C) COPYRIGHT 2014 STMicroelectronics |
Davidroid | 0:2887415a46cd | 9 | ****************************************************************************** |
Davidroid | 0:2887415a46cd | 10 | * @attention |
Davidroid | 0:2887415a46cd | 11 | * |
Davidroid | 0:2887415a46cd | 12 | * <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2> |
Davidroid | 0:2887415a46cd | 13 | * |
Davidroid | 0:2887415a46cd | 14 | * Redistribution and use in source and binary forms, with or without modification, |
Davidroid | 0:2887415a46cd | 15 | * are permitted provided that the following conditions are met: |
Davidroid | 0:2887415a46cd | 16 | * 1. Redistributions of source code must retain the above copyright notice, |
Davidroid | 0:2887415a46cd | 17 | * this list of conditions and the following disclaimer. |
Davidroid | 0:2887415a46cd | 18 | * 2. Redistributions in binary form must reproduce the above copyright notice, |
Davidroid | 0:2887415a46cd | 19 | * this list of conditions and the following disclaimer in the documentation |
Davidroid | 0:2887415a46cd | 20 | * and/or other materials provided with the distribution. |
Davidroid | 0:2887415a46cd | 21 | * 3. Neither the name of STMicroelectronics nor the names of its contributors |
Davidroid | 0:2887415a46cd | 22 | * may be used to endorse or promote products derived from this software |
Davidroid | 0:2887415a46cd | 23 | * without specific prior written permission. |
Davidroid | 0:2887415a46cd | 24 | * |
Davidroid | 0:2887415a46cd | 25 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
Davidroid | 0:2887415a46cd | 26 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
Davidroid | 0:2887415a46cd | 27 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
Davidroid | 0:2887415a46cd | 28 | * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE |
Davidroid | 0:2887415a46cd | 29 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
Davidroid | 0:2887415a46cd | 30 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR |
Davidroid | 0:2887415a46cd | 31 | * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER |
Davidroid | 0:2887415a46cd | 32 | * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, |
Davidroid | 0:2887415a46cd | 33 | * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
Davidroid | 0:2887415a46cd | 34 | * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
Davidroid | 0:2887415a46cd | 35 | * |
Davidroid | 0:2887415a46cd | 36 | ****************************************************************************** |
Davidroid | 0:2887415a46cd | 37 | */ |
Davidroid | 0:2887415a46cd | 38 | |
Davidroid | 0:2887415a46cd | 39 | |
Davidroid | 0:2887415a46cd | 40 | /* Generated with Stm32CubeTOO -----------------------------------------------*/ |
Davidroid | 0:2887415a46cd | 41 | |
Davidroid | 0:2887415a46cd | 42 | |
Davidroid | 0:2887415a46cd | 43 | /* Revision ------------------------------------------------------------------*/ |
Davidroid | 0:2887415a46cd | 44 | /* |
Davidroid | 0:2887415a46cd | 45 | Repository: http://svn.x-nucleodev.codex.cro.st.com/svnroot/X-NucleoDev |
Davidroid | 0:2887415a46cd | 46 | Branch/Trunk/Tag: trunk |
Davidroid | 0:2887415a46cd | 47 | Based on: X-CUBE-SPN1/trunk/Drivers/BSP/Components/l6474/l6474.h |
Davidroid | 0:2887415a46cd | 48 | Revision: 0 |
Davidroid | 0:2887415a46cd | 49 | */ |
Davidroid | 0:2887415a46cd | 50 | |
Davidroid | 0:2887415a46cd | 51 | |
Davidroid | 0:2887415a46cd | 52 | /* Define to prevent recursive inclusion -------------------------------------*/ |
Davidroid | 0:2887415a46cd | 53 | |
Davidroid | 0:2887415a46cd | 54 | #ifndef __L6474_CLASS_H |
Davidroid | 0:2887415a46cd | 55 | #define __L6474_CLASS_H |
Davidroid | 0:2887415a46cd | 56 | |
Davidroid | 0:2887415a46cd | 57 | |
Davidroid | 0:2887415a46cd | 58 | /* Includes ------------------------------------------------------------------*/ |
Davidroid | 0:2887415a46cd | 59 | |
Davidroid | 0:2887415a46cd | 60 | /* ACTION 1 ------------------------------------------------------------------* |
Davidroid | 0:2887415a46cd | 61 | * Include here platform specific header files. * |
Davidroid | 0:2887415a46cd | 62 | *----------------------------------------------------------------------------*/ |
Davidroid | 0:2887415a46cd | 63 | #include "mbed.h" |
Davidroid | 0:2887415a46cd | 64 | #include "DevSPI.h" |
Davidroid | 0:2887415a46cd | 65 | /* ACTION 2 ------------------------------------------------------------------* |
Davidroid | 0:2887415a46cd | 66 | * Include here component specific header files. * |
Davidroid | 0:2887415a46cd | 67 | *----------------------------------------------------------------------------*/ |
Davidroid | 0:2887415a46cd | 68 | #include "l6474.h" |
Davidroid | 0:2887415a46cd | 69 | /* ACTION 3 ------------------------------------------------------------------* |
Davidroid | 0:2887415a46cd | 70 | * Include here interface specific header files. * |
Davidroid | 0:2887415a46cd | 71 | * * |
Davidroid | 0:2887415a46cd | 72 | * Example: * |
Davidroid | 0:2887415a46cd | 73 | * #include "../Interfaces/Humidity_class.h" * |
Davidroid | 0:2887415a46cd | 74 | * #include "../Interfaces/Temperature_class.h" * |
Davidroid | 0:2887415a46cd | 75 | *----------------------------------------------------------------------------*/ |
Davidroid | 0:2887415a46cd | 76 | #include "../Interfaces/Motor_class.h" |
Davidroid | 0:2887415a46cd | 77 | |
Davidroid | 0:2887415a46cd | 78 | |
Davidroid | 0:2887415a46cd | 79 | /* Functions -----------------------------------------------------------------*/ |
Davidroid | 0:2887415a46cd | 80 | |
Davidroid | 0:2887415a46cd | 81 | extern void PWMCallback(void); |
Davidroid | 0:2887415a46cd | 82 | |
Davidroid | 0:2887415a46cd | 83 | |
Davidroid | 0:2887415a46cd | 84 | /* Classes -------------------------------------------------------------------*/ |
Davidroid | 0:2887415a46cd | 85 | |
Davidroid | 0:2887415a46cd | 86 | /** Class representing a L6474 component. |
Davidroid | 0:2887415a46cd | 87 | */ |
Davidroid | 0:2887415a46cd | 88 | class L6474 : public Motor |
Davidroid | 0:2887415a46cd | 89 | { |
Davidroid | 0:2887415a46cd | 90 | public: |
Davidroid | 0:2887415a46cd | 91 | |
Davidroid | 0:2887415a46cd | 92 | /*** Constructor and Destructor Methods ***/ |
Davidroid | 0:2887415a46cd | 93 | |
Davidroid | 0:2887415a46cd | 94 | /** |
Davidroid | 0:2887415a46cd | 95 | * @brief Constructor. |
Davidroid | 0:2887415a46cd | 96 | * @param reset pin name of the STBY\RST pin of the component. |
Davidroid | 0:2887415a46cd | 97 | * @param direction pin name of the DIR pin of the component. |
Davidroid | 0:2887415a46cd | 98 | * @param pwm pin name of the PWM pin of the component. |
Davidroid | 0:2887415a46cd | 99 | * @param ssel pin name of the SSEL pin of the SPI device to be used for communication. |
Davidroid | 0:2887415a46cd | 100 | * @param spi SPI device to be used for communication. |
Davidroid | 0:2887415a46cd | 101 | */ |
Davidroid | 0:2887415a46cd | 102 | L6474(PinName reset, PinName direction, PinName pwm, PinName ssel, DevSPI &spi) : Motor(), direction(direction), pwm(pwm), reset(reset), ssel(ssel), dev_spi(spi) |
Davidroid | 0:2887415a46cd | 103 | { |
Davidroid | 0:2887415a46cd | 104 | /* ACTION 4 ----------------------------------------------------------* |
Davidroid | 0:2887415a46cd | 105 | * Initialize here the component's member variables, one variable per * |
Davidroid | 0:2887415a46cd | 106 | * line. * |
Davidroid | 0:2887415a46cd | 107 | * * |
Davidroid | 0:2887415a46cd | 108 | * Example: * |
Davidroid | 0:2887415a46cd | 109 | * T0_out = 0; * |
Davidroid | 0:2887415a46cd | 110 | * T1_out = 0; * |
Davidroid | 0:2887415a46cd | 111 | * T0_degC = 0; * |
Davidroid | 0:2887415a46cd | 112 | * T1_degC = 0; * |
Davidroid | 0:2887415a46cd | 113 | *--------------------------------------------------------------------*/ |
Davidroid | 0:2887415a46cd | 114 | flagInterruptCallback = 0; |
Davidroid | 0:2887415a46cd | 115 | errorHandlerCallback = 0; |
Davidroid | 0:2887415a46cd | 116 | memset(spiTxBursts, 0, L6474_CMD_ARG_MAX_NB_BYTES); |
Davidroid | 0:2887415a46cd | 117 | memset(spiRxBursts, 0, L6474_CMD_ARG_MAX_NB_BYTES); |
Davidroid | 0:2887415a46cd | 118 | spiPreemtionByIsr = 0; |
Davidroid | 0:2887415a46cd | 119 | isrFlag = 0; |
Davidroid | 0:2887415a46cd | 120 | //devicePrm = 0; |
Davidroid | 0:2887415a46cd | 121 | deviceInstance = numberOfDevices; |
Davidroid | 0:2887415a46cd | 122 | numberOfDevices++; |
Davidroid | 0:2887415a46cd | 123 | } |
Davidroid | 0:2887415a46cd | 124 | |
Davidroid | 0:2887415a46cd | 125 | /** |
Davidroid | 0:2887415a46cd | 126 | * @brief Destructor. |
Davidroid | 0:2887415a46cd | 127 | */ |
Davidroid | 0:2887415a46cd | 128 | virtual ~L6474(void) {} |
Davidroid | 0:2887415a46cd | 129 | |
Davidroid | 0:2887415a46cd | 130 | |
Davidroid | 0:2887415a46cd | 131 | /*** Public Component Related Methods ***/ |
Davidroid | 0:2887415a46cd | 132 | |
Davidroid | 0:2887415a46cd | 133 | /* ACTION 5 --------------------------------------------------------------* |
Davidroid | 0:2887415a46cd | 134 | * Implement here the component's public methods, as wrappers of the C * |
Davidroid | 0:2887415a46cd | 135 | * component's functions. * |
Davidroid | 0:2887415a46cd | 136 | * They should be: * |
Davidroid | 0:2887415a46cd | 137 | * + Methods with the same name of the C component's virtual table's * |
Davidroid | 0:2887415a46cd | 138 | * functions (1); * |
Davidroid | 0:2887415a46cd | 139 | * + Methods with the same name of the C component's extended virtual * |
Davidroid | 0:2887415a46cd | 140 | * table's functions, if any (2). * |
Davidroid | 0:2887415a46cd | 141 | * * |
Davidroid | 0:2887415a46cd | 142 | * Example: * |
Davidroid | 0:2887415a46cd | 143 | * virtual int GetValue(float *pData) //(1) * |
Davidroid | 0:2887415a46cd | 144 | * { * |
Davidroid | 0:2887415a46cd | 145 | * return COMPONENT_GetValue(float *pfData); * |
Davidroid | 0:2887415a46cd | 146 | * } * |
Davidroid | 0:2887415a46cd | 147 | * * |
Davidroid | 0:2887415a46cd | 148 | * virtual int EnableFeature(void) //(2) * |
Davidroid | 0:2887415a46cd | 149 | * { * |
Davidroid | 0:2887415a46cd | 150 | * return COMPONENT_EnableFeature(); * |
Davidroid | 0:2887415a46cd | 151 | * } * |
Davidroid | 0:2887415a46cd | 152 | *------------------------------------------------------------------------*/ |
Davidroid | 0:2887415a46cd | 153 | virtual int Init(void *init) |
Davidroid | 0:2887415a46cd | 154 | { |
Davidroid | 0:2887415a46cd | 155 | return (int) L6474_Init((MOTOR_InitTypeDef *) init); |
Davidroid | 0:2887415a46cd | 156 | } |
Davidroid | 0:2887415a46cd | 157 | |
Davidroid | 0:2887415a46cd | 158 | virtual int ReadID(uint8_t *id) |
Davidroid | 0:2887415a46cd | 159 | { |
Davidroid | 0:2887415a46cd | 160 | return (int) L6474_ReadID((uint8_t *) id); |
Davidroid | 0:2887415a46cd | 161 | } |
Davidroid | 0:2887415a46cd | 162 | |
Davidroid | 0:2887415a46cd | 163 | virtual void AttachErrorHandler(void (*callback)(uint16_t error)) |
Davidroid | 0:2887415a46cd | 164 | { |
Davidroid | 0:2887415a46cd | 165 | L6474_AttachErrorHandler((void (*)(uint16_t error)) callback); |
Davidroid | 0:2887415a46cd | 166 | } |
Davidroid | 0:2887415a46cd | 167 | |
Davidroid | 0:2887415a46cd | 168 | virtual void AttachFlagInterrupt(void (*callback)(void)) |
Davidroid | 0:2887415a46cd | 169 | { |
Davidroid | 0:2887415a46cd | 170 | L6474_AttachFlagInterrupt((void (*)(void)) callback); |
Davidroid | 0:2887415a46cd | 171 | } |
Davidroid | 0:2887415a46cd | 172 | |
Davidroid | 0:2887415a46cd | 173 | virtual void FlagInterruptHandler(void) |
Davidroid | 0:2887415a46cd | 174 | { |
Davidroid | 0:2887415a46cd | 175 | L6474_FlagInterruptHandler(); |
Davidroid | 0:2887415a46cd | 176 | } |
Davidroid | 0:2887415a46cd | 177 | |
Davidroid | 0:2887415a46cd | 178 | virtual uint16_t GetAcceleration(void) |
Davidroid | 0:2887415a46cd | 179 | { |
Davidroid | 0:2887415a46cd | 180 | return (uint16_t) L6474_GetAcceleration(); |
Davidroid | 0:2887415a46cd | 181 | } |
Davidroid | 0:2887415a46cd | 182 | |
Davidroid | 0:2887415a46cd | 183 | virtual uint16_t GetCurrentSpeed(void) |
Davidroid | 0:2887415a46cd | 184 | { |
Davidroid | 0:2887415a46cd | 185 | return (uint16_t) L6474_GetCurrentSpeed(); |
Davidroid | 0:2887415a46cd | 186 | } |
Davidroid | 0:2887415a46cd | 187 | |
Davidroid | 0:2887415a46cd | 188 | virtual uint16_t GetDeceleration(void) |
Davidroid | 0:2887415a46cd | 189 | { |
Davidroid | 0:2887415a46cd | 190 | return (uint16_t) L6474_GetDeceleration(); |
Davidroid | 0:2887415a46cd | 191 | } |
Davidroid | 0:2887415a46cd | 192 | |
Davidroid | 0:2887415a46cd | 193 | virtual motorState_t GetDeviceState(void) |
Davidroid | 0:2887415a46cd | 194 | { |
Davidroid | 0:2887415a46cd | 195 | return (motorState_t) L6474_GetDeviceState(); |
Davidroid | 0:2887415a46cd | 196 | } |
Davidroid | 0:2887415a46cd | 197 | |
Davidroid | 0:2887415a46cd | 198 | virtual uint8_t GetFwVersion(void) |
Davidroid | 0:2887415a46cd | 199 | { |
Davidroid | 0:2887415a46cd | 200 | return (uint8_t) L6474_GetFwVersion(); |
Davidroid | 0:2887415a46cd | 201 | } |
Davidroid | 0:2887415a46cd | 202 | |
Davidroid | 0:2887415a46cd | 203 | virtual int32_t GetMark(void) |
Davidroid | 0:2887415a46cd | 204 | { |
Davidroid | 0:2887415a46cd | 205 | return (int32_t) L6474_GetMark(); |
Davidroid | 0:2887415a46cd | 206 | } |
Davidroid | 0:2887415a46cd | 207 | |
Davidroid | 0:2887415a46cd | 208 | virtual uint16_t GetMaxSpeed(void) |
Davidroid | 0:2887415a46cd | 209 | { |
Davidroid | 0:2887415a46cd | 210 | return (uint16_t) L6474_GetMaxSpeed(); |
Davidroid | 0:2887415a46cd | 211 | } |
Davidroid | 0:2887415a46cd | 212 | |
Davidroid | 0:2887415a46cd | 213 | virtual uint16_t GetMinSpeed(void) |
Davidroid | 0:2887415a46cd | 214 | { |
Davidroid | 0:2887415a46cd | 215 | return (uint16_t) L6474_GetMinSpeed(); |
Davidroid | 0:2887415a46cd | 216 | } |
Davidroid | 0:2887415a46cd | 217 | |
Davidroid | 0:2887415a46cd | 218 | virtual int32_t GetPosition(void) |
Davidroid | 0:2887415a46cd | 219 | { |
Davidroid | 0:2887415a46cd | 220 | return (int32_t) L6474_GetPosition(); |
Davidroid | 0:2887415a46cd | 221 | } |
Davidroid | 0:2887415a46cd | 222 | |
Davidroid | 0:2887415a46cd | 223 | virtual void GoHome(void) |
Davidroid | 0:2887415a46cd | 224 | { |
Davidroid | 0:2887415a46cd | 225 | L6474_GoHome(); |
Davidroid | 0:2887415a46cd | 226 | } |
Davidroid | 0:2887415a46cd | 227 | |
Davidroid | 0:2887415a46cd | 228 | virtual void GoMark(void) |
Davidroid | 0:2887415a46cd | 229 | { |
Davidroid | 0:2887415a46cd | 230 | L6474_GoMark(); |
Davidroid | 0:2887415a46cd | 231 | } |
Davidroid | 0:2887415a46cd | 232 | |
Davidroid | 0:2887415a46cd | 233 | virtual void GoTo(int32_t targetPosition) |
Davidroid | 0:2887415a46cd | 234 | { |
Davidroid | 0:2887415a46cd | 235 | L6474_GoTo((int32_t) targetPosition); |
Davidroid | 0:2887415a46cd | 236 | } |
Davidroid | 0:2887415a46cd | 237 | |
Davidroid | 0:2887415a46cd | 238 | virtual void HardStop(void) |
Davidroid | 0:2887415a46cd | 239 | { |
Davidroid | 0:2887415a46cd | 240 | L6474_HardStop(); |
Davidroid | 0:2887415a46cd | 241 | } |
Davidroid | 0:2887415a46cd | 242 | |
Davidroid | 0:2887415a46cd | 243 | virtual void Move(motorDir_t direction, uint32_t stepCount) |
Davidroid | 0:2887415a46cd | 244 | { |
Davidroid | 0:2887415a46cd | 245 | L6474_Move((motorDir_t) direction, (uint32_t) stepCount); |
Davidroid | 0:2887415a46cd | 246 | } |
Davidroid | 0:2887415a46cd | 247 | |
Davidroid | 0:2887415a46cd | 248 | virtual void Run(motorDir_t direction) |
Davidroid | 0:2887415a46cd | 249 | { |
Davidroid | 0:2887415a46cd | 250 | L6474_Run((motorDir_t) direction); |
Davidroid | 0:2887415a46cd | 251 | } |
Davidroid | 0:2887415a46cd | 252 | |
Davidroid | 0:2887415a46cd | 253 | virtual bool SetAcceleration(uint16_t newAcc) |
Davidroid | 0:2887415a46cd | 254 | { |
Davidroid | 0:2887415a46cd | 255 | return (bool) L6474_SetAcceleration((uint16_t) newAcc); |
Davidroid | 0:2887415a46cd | 256 | } |
Davidroid | 0:2887415a46cd | 257 | |
Davidroid | 0:2887415a46cd | 258 | virtual bool SetDeceleration(uint16_t newDec) |
Davidroid | 0:2887415a46cd | 259 | { |
Davidroid | 0:2887415a46cd | 260 | return (bool) L6474_SetDeceleration((uint16_t) newDec); |
Davidroid | 0:2887415a46cd | 261 | } |
Davidroid | 0:2887415a46cd | 262 | |
Davidroid | 0:2887415a46cd | 263 | virtual void SetHome(void) |
Davidroid | 0:2887415a46cd | 264 | { |
Davidroid | 0:2887415a46cd | 265 | L6474_SetHome(); |
Davidroid | 0:2887415a46cd | 266 | } |
Davidroid | 0:2887415a46cd | 267 | |
Davidroid | 0:2887415a46cd | 268 | virtual void SetMark(void) |
Davidroid | 0:2887415a46cd | 269 | { |
Davidroid | 0:2887415a46cd | 270 | L6474_SetMark(); |
Davidroid | 0:2887415a46cd | 271 | } |
Davidroid | 0:2887415a46cd | 272 | |
Davidroid | 0:2887415a46cd | 273 | virtual bool SetMaxSpeed(uint16_t newMaxSpeed) |
Davidroid | 0:2887415a46cd | 274 | { |
Davidroid | 0:2887415a46cd | 275 | return (bool) L6474_SetMaxSpeed((uint16_t) newMaxSpeed); |
Davidroid | 0:2887415a46cd | 276 | } |
Davidroid | 0:2887415a46cd | 277 | |
Davidroid | 0:2887415a46cd | 278 | virtual bool SetMinSpeed(uint16_t newMinSpeed) |
Davidroid | 0:2887415a46cd | 279 | { |
Davidroid | 0:2887415a46cd | 280 | return (bool) L6474_SetMinSpeed((uint16_t) newMinSpeed); |
Davidroid | 0:2887415a46cd | 281 | } |
Davidroid | 0:2887415a46cd | 282 | |
Davidroid | 0:2887415a46cd | 283 | virtual bool SoftStop(void) |
Davidroid | 0:2887415a46cd | 284 | { |
Davidroid | 0:2887415a46cd | 285 | return (bool) L6474_SoftStop(); |
Davidroid | 0:2887415a46cd | 286 | } |
Davidroid | 0:2887415a46cd | 287 | |
Davidroid | 0:2887415a46cd | 288 | virtual void StepClockHandler(void) |
Davidroid | 0:2887415a46cd | 289 | { |
Davidroid | 0:2887415a46cd | 290 | L6474_StepClockHandler(); |
Davidroid | 0:2887415a46cd | 291 | } |
Davidroid | 0:2887415a46cd | 292 | |
Davidroid | 0:2887415a46cd | 293 | virtual void CmdDisable(void) |
Davidroid | 0:2887415a46cd | 294 | { |
Davidroid | 0:2887415a46cd | 295 | L6474_CmdDisable(); |
Davidroid | 0:2887415a46cd | 296 | } |
Davidroid | 0:2887415a46cd | 297 | |
Davidroid | 0:2887415a46cd | 298 | virtual void CmdEnable(void) |
Davidroid | 0:2887415a46cd | 299 | { |
Davidroid | 0:2887415a46cd | 300 | L6474_CmdEnable(); |
Davidroid | 0:2887415a46cd | 301 | } |
Davidroid | 0:2887415a46cd | 302 | |
Davidroid | 0:2887415a46cd | 303 | virtual uint32_t CmdGetParam(uint32_t param) |
Davidroid | 0:2887415a46cd | 304 | { |
Davidroid | 0:2887415a46cd | 305 | return (uint32_t) L6474_CmdGetParam((uint32_t) param); |
Davidroid | 0:2887415a46cd | 306 | } |
Davidroid | 0:2887415a46cd | 307 | |
Davidroid | 0:2887415a46cd | 308 | virtual uint16_t CmdGetStatus(void) |
Davidroid | 0:2887415a46cd | 309 | { |
Davidroid | 0:2887415a46cd | 310 | return (uint16_t) L6474_CmdGetStatus(); |
Davidroid | 0:2887415a46cd | 311 | } |
Davidroid | 0:2887415a46cd | 312 | |
Davidroid | 0:2887415a46cd | 313 | virtual void CmdNop(void) |
Davidroid | 0:2887415a46cd | 314 | { |
Davidroid | 0:2887415a46cd | 315 | L6474_CmdNop(); |
Davidroid | 0:2887415a46cd | 316 | } |
Davidroid | 0:2887415a46cd | 317 | |
Davidroid | 0:2887415a46cd | 318 | virtual void CmdSetParam(uint32_t param, uint32_t value) |
Davidroid | 0:2887415a46cd | 319 | { |
Davidroid | 0:2887415a46cd | 320 | L6474_CmdSetParam((uint32_t) param, (uint32_t) value); |
Davidroid | 0:2887415a46cd | 321 | } |
Davidroid | 0:2887415a46cd | 322 | |
Davidroid | 0:2887415a46cd | 323 | virtual uint16_t ReadStatusRegister(void) |
Davidroid | 0:2887415a46cd | 324 | { |
Davidroid | 0:2887415a46cd | 325 | return (uint16_t) L6474_ReadStatusRegister(); |
Davidroid | 0:2887415a46cd | 326 | } |
Davidroid | 0:2887415a46cd | 327 | |
Davidroid | 0:2887415a46cd | 328 | virtual void ReleaseReset(void) |
Davidroid | 0:2887415a46cd | 329 | { |
Davidroid | 0:2887415a46cd | 330 | L6474_ReleaseReset(); |
Davidroid | 0:2887415a46cd | 331 | } |
Davidroid | 0:2887415a46cd | 332 | |
Davidroid | 0:2887415a46cd | 333 | virtual void Reset(void) |
Davidroid | 0:2887415a46cd | 334 | { |
Davidroid | 0:2887415a46cd | 335 | L6474_Reset(); |
Davidroid | 0:2887415a46cd | 336 | } |
Davidroid | 0:2887415a46cd | 337 | |
Davidroid | 0:2887415a46cd | 338 | virtual void SelectStepMode(motorStepMode_t stepMod) |
Davidroid | 0:2887415a46cd | 339 | { |
Davidroid | 0:2887415a46cd | 340 | L6474_SelectStepMode((motorStepMode_t) stepMod); |
Davidroid | 0:2887415a46cd | 341 | } |
Davidroid | 0:2887415a46cd | 342 | |
Davidroid | 0:2887415a46cd | 343 | virtual void SetDirection(motorDir_t direction) |
Davidroid | 0:2887415a46cd | 344 | { |
Davidroid | 0:2887415a46cd | 345 | L6474_SetDirection((motorDir_t) direction); |
Davidroid | 0:2887415a46cd | 346 | } |
Davidroid | 0:2887415a46cd | 347 | |
Davidroid | 0:2887415a46cd | 348 | virtual void ErrorHandler(uint16_t error) |
Davidroid | 0:2887415a46cd | 349 | { |
Davidroid | 0:2887415a46cd | 350 | L6474_ErrorHandler((uint16_t) error); |
Davidroid | 0:2887415a46cd | 351 | } |
Davidroid | 0:2887415a46cd | 352 | |
Davidroid | 0:2887415a46cd | 353 | |
Davidroid | 0:2887415a46cd | 354 | /*** Public Interrupt Related Methods ***/ |
Davidroid | 0:2887415a46cd | 355 | |
Davidroid | 0:2887415a46cd | 356 | /* ACTION 6 --------------------------------------------------------------* |
Davidroid | 0:2887415a46cd | 357 | * Implement here interrupt related methods, if any. * |
Davidroid | 0:2887415a46cd | 358 | * Note that interrupt handling is platform dependent, e.g.: * |
Davidroid | 0:2887415a46cd | 359 | * + mbed: * |
Davidroid | 0:2887415a46cd | 360 | * InterruptIn feature_int(pin); //Interrupt object. * |
Davidroid | 0:2887415a46cd | 361 | * feature_int.rise(callback); //Attach a callback. * |
Davidroid | 0:2887415a46cd | 362 | * feature_int.mode(PullNone); //Set interrupt mode. * |
Davidroid | 0:2887415a46cd | 363 | * feature_int.enable_irq(); //Enable interrupt. * |
Davidroid | 0:2887415a46cd | 364 | * feature_int.disable_irq(); //Disable interrupt. * |
Davidroid | 0:2887415a46cd | 365 | * + Arduino: * |
Davidroid | 0:2887415a46cd | 366 | * attachInterrupt(pin, callback, RISING); //Attach a callback. * |
Davidroid | 0:2887415a46cd | 367 | * detachInterrupt(pin); //Detach a callback. * |
Davidroid | 0:2887415a46cd | 368 | * * |
Davidroid | 0:2887415a46cd | 369 | * Example (mbed): * |
Davidroid | 0:2887415a46cd | 370 | * void Attach_Feature_IRQ(void (*fptr) (void)) * |
Davidroid | 0:2887415a46cd | 371 | * { * |
Davidroid | 0:2887415a46cd | 372 | * feature_int.rise(fptr); * |
Davidroid | 0:2887415a46cd | 373 | * } * |
Davidroid | 0:2887415a46cd | 374 | * * |
Davidroid | 0:2887415a46cd | 375 | * void Enable_Feature_IRQ(void) * |
Davidroid | 0:2887415a46cd | 376 | * { * |
Davidroid | 0:2887415a46cd | 377 | * feature_int.enable_irq(); * |
Davidroid | 0:2887415a46cd | 378 | * } * |
Davidroid | 0:2887415a46cd | 379 | * * |
Davidroid | 0:2887415a46cd | 380 | * void Disable_Feature_IRQ(void) * |
Davidroid | 0:2887415a46cd | 381 | * { * |
Davidroid | 0:2887415a46cd | 382 | * feature_int.disable_irq(); * |
Davidroid | 0:2887415a46cd | 383 | * } * |
Davidroid | 0:2887415a46cd | 384 | *------------------------------------------------------------------------*/ |
Davidroid | 0:2887415a46cd | 385 | |
Davidroid | 0:2887415a46cd | 386 | |
Davidroid | 0:2887415a46cd | 387 | protected: |
Davidroid | 0:2887415a46cd | 388 | |
Davidroid | 0:2887415a46cd | 389 | /*** Protected Component Related Methods ***/ |
Davidroid | 0:2887415a46cd | 390 | |
Davidroid | 0:2887415a46cd | 391 | /* ACTION 7 --------------------------------------------------------------* |
Davidroid | 0:2887415a46cd | 392 | * Declare here the component's specific methods. * |
Davidroid | 0:2887415a46cd | 393 | * They should be: * |
Davidroid | 0:2887415a46cd | 394 | * + Methods with the same name of the C component's virtual table's * |
Davidroid | 0:2887415a46cd | 395 | * functions (1); * |
Davidroid | 0:2887415a46cd | 396 | * + Methods with the same name of the C component's extended virtual * |
Davidroid | 0:2887415a46cd | 397 | * table's functions, if any (2); * |
Davidroid | 0:2887415a46cd | 398 | * + Helper methods, if any, like functions declared in the component's * |
Davidroid | 0:2887415a46cd | 399 | * source files but not pointed by the component's virtual table (3). * |
Davidroid | 0:2887415a46cd | 400 | * * |
Davidroid | 0:2887415a46cd | 401 | * Example: * |
Davidroid | 0:2887415a46cd | 402 | * DrvStatusTypeDef COMPONENT_GetValue(float* pfData); //(1) * |
Davidroid | 0:2887415a46cd | 403 | * DrvStatusTypeDef COMPONENT_EnableFeature(void); //(2) * |
Davidroid | 0:2887415a46cd | 404 | * DrvStatusTypeDef COMPONENT_ComputeAverage(void); //(3) * |
Davidroid | 0:2887415a46cd | 405 | *------------------------------------------------------------------------*/ |
Davidroid | 0:2887415a46cd | 406 | void L6474_AttachErrorHandler(void (*callback)(uint16_t error)); //Attach a user callback to the error handler |
Davidroid | 0:2887415a46cd | 407 | void L6474_AttachFlagInterrupt(void (*callback)(void)); //Attach a user callback to the flag Interrupt |
Davidroid | 0:2887415a46cd | 408 | DrvStatusTypeDef L6474_Init(MOTOR_InitTypeDef *init); //Start the L6474 library |
Davidroid | 0:2887415a46cd | 409 | DrvStatusTypeDef L6474_ReadID(uint8_t *id); //Read Id to get driver instance |
Davidroid | 0:2887415a46cd | 410 | uint16_t L6474_GetAcceleration(void); //Return the acceleration in pps^2 |
Davidroid | 0:2887415a46cd | 411 | uint16_t L6474_GetCurrentSpeed(void); //Return the current speed in pps |
Davidroid | 0:2887415a46cd | 412 | uint16_t L6474_GetDeceleration(void); //Return the deceleration in pps^2 |
Davidroid | 0:2887415a46cd | 413 | motorState_t L6474_GetDeviceState(void); //Return the device state |
Davidroid | 0:2887415a46cd | 414 | uint8_t L6474_GetFwVersion(void); //Return the FW version |
Davidroid | 0:2887415a46cd | 415 | int32_t L6474_GetMark(void); //Return the mark position |
Davidroid | 0:2887415a46cd | 416 | uint16_t L6474_GetMaxSpeed(void); //Return the max speed in pps |
Davidroid | 0:2887415a46cd | 417 | uint16_t L6474_GetMinSpeed(void); //Return the min speed in pps |
Davidroid | 0:2887415a46cd | 418 | int32_t L6474_GetPosition(void); //Return the ABS_POSITION (32b signed) |
Davidroid | 0:2887415a46cd | 419 | void L6474_GoHome(void); //Move to the home position |
Davidroid | 0:2887415a46cd | 420 | void L6474_GoMark(void); //Move to the Mark position |
Davidroid | 0:2887415a46cd | 421 | void L6474_GoTo(int32_t targetPosition); //Go to the specified position |
Davidroid | 0:2887415a46cd | 422 | void L6474_HardStop(void); //Stop the motor and disable the power bridge |
Davidroid | 0:2887415a46cd | 423 | void L6474_Move(motorDir_t direction, uint32_t stepCount); //Move the motor of the specified number of steps |
Davidroid | 0:2887415a46cd | 424 | void L6474_Run(motorDir_t direction); //Run the motor |
Davidroid | 0:2887415a46cd | 425 | bool L6474_SetAcceleration(uint16_t newAcc); //Set the acceleration in pps^2 |
Davidroid | 0:2887415a46cd | 426 | bool L6474_SetDeceleration(uint16_t newDec); //Set the deceleration in pps^2 |
Davidroid | 0:2887415a46cd | 427 | void L6474_SetHome(void); //Set current position to be the home position |
Davidroid | 0:2887415a46cd | 428 | void L6474_SetMark(void); //Set current position to be the Markposition |
Davidroid | 0:2887415a46cd | 429 | bool L6474_SetMaxSpeed(uint16_t newMaxSpeed); //Set the max speed in pps |
Davidroid | 0:2887415a46cd | 430 | bool L6474_SetMinSpeed(uint16_t newMinSpeed); //Set the min speed in pps |
Davidroid | 0:2887415a46cd | 431 | bool L6474_SoftStop(void); //Progressively stops the motor |
Davidroid | 0:2887415a46cd | 432 | void L6474_CmdDisable(void); //Send the L6474_DISABLE command |
Davidroid | 0:2887415a46cd | 433 | void L6474_CmdEnable(void); //Send the L6474_ENABLE command |
Davidroid | 0:2887415a46cd | 434 | uint32_t L6474_CmdGetParam(uint32_t param); //Send the L6474_GET_PARAM command |
Davidroid | 0:2887415a46cd | 435 | uint16_t L6474_CmdGetStatus(void); //Send the L6474_GET_STATUS command |
Davidroid | 0:2887415a46cd | 436 | void L6474_CmdNop(void); //Send the L6474_NOP command |
Davidroid | 0:2887415a46cd | 437 | void L6474_CmdSetParam(uint32_t param, uint32_t value); //Send the L6474_SET_PARAM command |
Davidroid | 0:2887415a46cd | 438 | uint16_t L6474_ReadStatusRegister(void); //Read the L6474_STATUS register without clearing the flags |
Davidroid | 0:2887415a46cd | 439 | void L6474_SelectStepMode(motorStepMode_t stepMod); //Step mode selection |
Davidroid | 0:2887415a46cd | 440 | void L6474_SetDirection(motorDir_t direction); //Set the L6474 direction pin |
Davidroid | 0:2887415a46cd | 441 | void L6474_ApplySpeed(uint16_t newSpeed); |
Davidroid | 0:2887415a46cd | 442 | void L6474_ComputeSpeedProfile(uint32_t nbSteps); |
Davidroid | 0:2887415a46cd | 443 | int32_t L6474_ConvertPosition(uint32_t abs_position_reg); |
Davidroid | 0:2887415a46cd | 444 | void L6474_ErrorHandler(uint16_t error); |
Davidroid | 0:2887415a46cd | 445 | void L6474_FlagInterruptHandler(void); |
Davidroid | 0:2887415a46cd | 446 | void L6474_SendCommand(uint8_t param); |
Davidroid | 0:2887415a46cd | 447 | void L6474_SetRegisterToPredefinedValues(void); |
Davidroid | 0:2887415a46cd | 448 | void L6474_WriteBytes(uint8_t *pByteToTransmit, uint8_t *pReceivedByte); |
Davidroid | 0:2887415a46cd | 449 | void L6474_SetDeviceParamsToPredefinedValues(void); |
Davidroid | 0:2887415a46cd | 450 | void L6474_StartMovement(void); |
Davidroid | 0:2887415a46cd | 451 | void L6474_StepClockHandler(void); |
Davidroid | 0:2887415a46cd | 452 | uint8_t L6474_Tval_Current_to_Par(double Tval); |
Davidroid | 0:2887415a46cd | 453 | uint8_t L6474_Tmin_Time_to_Par(double Tmin); |
Davidroid | 0:2887415a46cd | 454 | |
Davidroid | 0:2887415a46cd | 455 | |
Davidroid | 0:2887415a46cd | 456 | /*** Component's I/O Methods ***/ |
Davidroid | 0:2887415a46cd | 457 | |
Davidroid | 0:2887415a46cd | 458 | /** |
Davidroid | 0:2887415a46cd | 459 | * @brief Utility function to read data from L6474. |
Davidroid | 0:2887415a46cd | 460 | * @param[out] pBuffer pointer to the buffer to read data into. |
Davidroid | 0:2887415a46cd | 461 | * @param[in] NumBytesToRead number of bytes to read. |
Davidroid | 0:2887415a46cd | 462 | * @retval COMPONENT_OK in case of success, COMPONENT_ERROR otherwise. |
Davidroid | 0:2887415a46cd | 463 | */ |
Davidroid | 0:2887415a46cd | 464 | DrvStatusTypeDef Read(uint8_t* pBuffer, uint16_t NumBytesToRead) |
Davidroid | 0:2887415a46cd | 465 | { |
Davidroid | 0:2887415a46cd | 466 | if (dev_spi.spi_read(pBuffer, ssel, NumBytesToRead) != 0) |
Davidroid | 0:2887415a46cd | 467 | return COMPONENT_ERROR; |
Davidroid | 0:2887415a46cd | 468 | return COMPONENT_OK; |
Davidroid | 0:2887415a46cd | 469 | } |
Davidroid | 0:2887415a46cd | 470 | |
Davidroid | 0:2887415a46cd | 471 | /** |
Davidroid | 0:2887415a46cd | 472 | * @brief Utility function to write data to L6474. |
Davidroid | 0:2887415a46cd | 473 | * @param[in] pBuffer pointer to the buffer of data to send. |
Davidroid | 0:2887415a46cd | 474 | * @param[in] NumBytesToWrite number of bytes to write. |
Davidroid | 0:2887415a46cd | 475 | * @retval COMPONENT_OK in case of success, COMPONENT_ERROR otherwise. |
Davidroid | 0:2887415a46cd | 476 | */ |
Davidroid | 0:2887415a46cd | 477 | DrvStatusTypeDef Write(uint8_t* pBuffer, uint16_t NumBytesToWrite) |
Davidroid | 0:2887415a46cd | 478 | { |
Davidroid | 0:2887415a46cd | 479 | if (dev_spi.spi_write(pBuffer, ssel, NumBytesToWrite) != 0) |
Davidroid | 0:2887415a46cd | 480 | return COMPONENT_ERROR; |
Davidroid | 0:2887415a46cd | 481 | return COMPONENT_OK; |
Davidroid | 0:2887415a46cd | 482 | } |
Davidroid | 0:2887415a46cd | 483 | |
Davidroid | 0:2887415a46cd | 484 | /** |
Davidroid | 0:2887415a46cd | 485 | * @brief Utility function to read and write data from/to L6474 at the same time. |
Davidroid | 0:2887415a46cd | 486 | * @param[out] pBufferToRead pointer to the buffer to read data into. |
Davidroid | 0:2887415a46cd | 487 | * @param[in] pBufferToWrite pointer to the buffer of data to send. |
Davidroid | 0:2887415a46cd | 488 | * @param[in] NumBytes number of bytes to read and write. |
Davidroid | 0:2887415a46cd | 489 | * @retval COMPONENT_OK in case of success, COMPONENT_ERROR otherwise. |
Davidroid | 0:2887415a46cd | 490 | */ |
Davidroid | 0:2887415a46cd | 491 | DrvStatusTypeDef ReadWrite(uint8_t* pBufferToRead, uint8_t* pBufferToWrite, uint16_t NumBytes) |
Davidroid | 0:2887415a46cd | 492 | { |
Davidroid | 0:2887415a46cd | 493 | if (dev_spi.spi_read_write(pBufferToRead, pBufferToWrite, ssel, NumBytes) != 0) |
Davidroid | 0:2887415a46cd | 494 | return COMPONENT_ERROR; |
Davidroid | 0:2887415a46cd | 495 | return COMPONENT_OK; |
Davidroid | 0:2887415a46cd | 496 | } |
Davidroid | 0:2887415a46cd | 497 | |
Davidroid | 0:2887415a46cd | 498 | /* ACTION 8 --------------------------------------------------------------* |
Davidroid | 0:2887415a46cd | 499 | * Implement here other I/O methods beyond those already implemented * |
Davidroid | 0:2887415a46cd | 500 | * above, which are declared extern within the component's header file. * |
Davidroid | 0:2887415a46cd | 501 | *------------------------------------------------------------------------*/ |
Davidroid | 0:2887415a46cd | 502 | /* |
Davidroid | 0:2887415a46cd | 503 | * System call to make the CPU wait. |
Davidroid | 0:2887415a46cd | 504 | */ |
Davidroid | 0:2887415a46cd | 505 | void L6474_Delay(uint32_t delay) |
Davidroid | 0:2887415a46cd | 506 | { |
Davidroid | 0:2887415a46cd | 507 | /* TO BE IMPLEMENTED BY USING TARGET PLATFORM'S APIs */ |
Davidroid | 0:2887415a46cd | 508 | wait_ms(delay); |
Davidroid | 0:2887415a46cd | 509 | } |
Davidroid | 0:2887415a46cd | 510 | |
Davidroid | 0:2887415a46cd | 511 | /* |
Davidroid | 0:2887415a46cd | 512 | * System call to enable interrupts. |
Davidroid | 0:2887415a46cd | 513 | */ |
Davidroid | 0:2887415a46cd | 514 | void L6474_EnableIrq(void) |
Davidroid | 0:2887415a46cd | 515 | { |
Davidroid | 0:2887415a46cd | 516 | /* TO BE IMPLEMENTED BY USING TARGET PLATFORM'S APIs */ |
Davidroid | 0:2887415a46cd | 517 | __enable_irq(); |
Davidroid | 0:2887415a46cd | 518 | } |
Davidroid | 0:2887415a46cd | 519 | |
Davidroid | 0:2887415a46cd | 520 | /* |
Davidroid | 0:2887415a46cd | 521 | * System call to disable interrupts. |
Davidroid | 0:2887415a46cd | 522 | */ |
Davidroid | 0:2887415a46cd | 523 | void L6474_DisableIrq(void) |
Davidroid | 0:2887415a46cd | 524 | { |
Davidroid | 0:2887415a46cd | 525 | /* TO BE IMPLEMENTED BY USING TARGET PLATFORM'S APIs */ |
Davidroid | 0:2887415a46cd | 526 | __disable_irq(); |
Davidroid | 0:2887415a46cd | 527 | } |
Davidroid | 0:2887415a46cd | 528 | |
Davidroid | 0:2887415a46cd | 529 | /* |
Davidroid | 0:2887415a46cd | 530 | * Sets the frequency of PWM. |
Davidroid | 0:2887415a46cd | 531 | * The frequency is directly the current speed of the device. |
Davidroid | 0:2887415a46cd | 532 | */ |
Davidroid | 0:2887415a46cd | 533 | void L6474_PwmSetFreq(uint16_t newFreq) |
Davidroid | 0:2887415a46cd | 534 | { |
Davidroid | 0:2887415a46cd | 535 | /* TO BE IMPLEMENTED BY USING TARGET PLATFORM'S APIs */ |
Davidroid | 0:2887415a46cd | 536 | double period = 1.0f / newFreq; |
Davidroid | 0:2887415a46cd | 537 | pwm.period(period); |
Davidroid | 0:2887415a46cd | 538 | pwm.write(0.5f); |
Davidroid | 0:2887415a46cd | 539 | ticker.attach(&PWMCallback, period); |
Davidroid | 0:2887415a46cd | 540 | } |
Davidroid | 0:2887415a46cd | 541 | |
Davidroid | 0:2887415a46cd | 542 | /* |
Davidroid | 0:2887415a46cd | 543 | * Initialises the PWM uses by the specified device. |
Davidroid | 0:2887415a46cd | 544 | * + Device 0 uses PWM1 based on timer 1; |
Davidroid | 0:2887415a46cd | 545 | * + Device 1 uses PWM2 based on timer 2; |
Davidroid | 0:2887415a46cd | 546 | * + Device 2 uses PWM3 based on timer 3. |
Davidroid | 0:2887415a46cd | 547 | */ |
Davidroid | 0:2887415a46cd | 548 | void L6474_PwmInit(void) |
Davidroid | 0:2887415a46cd | 549 | { |
Davidroid | 0:2887415a46cd | 550 | /* TO BE IMPLEMENTED BY USING TARGET PLATFORM'S APIs */ |
Davidroid | 0:2887415a46cd | 551 | } |
Davidroid | 0:2887415a46cd | 552 | |
Davidroid | 0:2887415a46cd | 553 | /* |
Davidroid | 0:2887415a46cd | 554 | * Stops the PWM. |
Davidroid | 0:2887415a46cd | 555 | */ |
Davidroid | 0:2887415a46cd | 556 | void L6474_PwmStop(void) |
Davidroid | 0:2887415a46cd | 557 | { |
Davidroid | 0:2887415a46cd | 558 | /* TO BE IMPLEMENTED BY USING TARGET PLATFORM'S APIs */ |
Davidroid | 0:2887415a46cd | 559 | pwm.write(0.0f); |
Davidroid | 0:2887415a46cd | 560 | ticker.detach(); |
Davidroid | 0:2887415a46cd | 561 | } |
Davidroid | 0:2887415a46cd | 562 | |
Davidroid | 0:2887415a46cd | 563 | /* |
Davidroid | 0:2887415a46cd | 564 | * Setting the standby/reset pin to high. |
Davidroid | 0:2887415a46cd | 565 | */ |
Davidroid | 0:2887415a46cd | 566 | void L6474_ReleaseReset(void) |
Davidroid | 0:2887415a46cd | 567 | { |
Davidroid | 0:2887415a46cd | 568 | reset = 1; |
Davidroid | 0:2887415a46cd | 569 | } |
Davidroid | 0:2887415a46cd | 570 | |
Davidroid | 0:2887415a46cd | 571 | /* |
Davidroid | 0:2887415a46cd | 572 | * Resetting the standby/reset pin to put the device in standby mode. |
Davidroid | 0:2887415a46cd | 573 | */ |
Davidroid | 0:2887415a46cd | 574 | void L6474_Reset(void) |
Davidroid | 0:2887415a46cd | 575 | { |
Davidroid | 0:2887415a46cd | 576 | reset = 0; |
Davidroid | 0:2887415a46cd | 577 | } |
Davidroid | 0:2887415a46cd | 578 | |
Davidroid | 0:2887415a46cd | 579 | /* |
Davidroid | 0:2887415a46cd | 580 | * Set the direction of rotation. |
Davidroid | 0:2887415a46cd | 581 | */ |
Davidroid | 0:2887415a46cd | 582 | void L6474_SetDirectionGpio(uint8_t gpioState) |
Davidroid | 0:2887415a46cd | 583 | { |
Davidroid | 0:2887415a46cd | 584 | direction = gpioState; |
Davidroid | 0:2887415a46cd | 585 | } |
Davidroid | 0:2887415a46cd | 586 | |
Davidroid | 0:2887415a46cd | 587 | /* |
Davidroid | 0:2887415a46cd | 588 | * Write and read bytes to/from the component through the SPI at the same time. |
Davidroid | 0:2887415a46cd | 589 | */ |
Davidroid | 0:2887415a46cd | 590 | uint8_t L6474_SpiWriteBytes(uint8_t *pByteToTransmit, uint8_t *pReceivedByte) |
Davidroid | 0:2887415a46cd | 591 | { |
Davidroid | 0:2887415a46cd | 592 | return (uint8_t) ReadWrite(pReceivedByte, pByteToTransmit, numberOfDevices); |
Davidroid | 0:2887415a46cd | 593 | } |
Davidroid | 0:2887415a46cd | 594 | |
Davidroid | 0:2887415a46cd | 595 | |
Davidroid | 0:2887415a46cd | 596 | /*** Component's Instance Variables ***/ |
Davidroid | 0:2887415a46cd | 597 | |
Davidroid | 0:2887415a46cd | 598 | /* Identity */ |
Davidroid | 0:2887415a46cd | 599 | uint8_t who_am_i; |
Davidroid | 0:2887415a46cd | 600 | |
Davidroid | 0:2887415a46cd | 601 | /* ACTION 9 --------------------------------------------------------------* |
Davidroid | 0:2887415a46cd | 602 | * There should be only a unique identifier for each component, which * |
Davidroid | 0:2887415a46cd | 603 | * should be the "who_am_i" parameter, hence this parameter is optional. * |
Davidroid | 0:2887415a46cd | 604 | *------------------------------------------------------------------------*/ |
Davidroid | 0:2887415a46cd | 605 | /* Type. */ |
Davidroid | 0:2887415a46cd | 606 | uint8_t type; |
Davidroid | 0:2887415a46cd | 607 | |
Davidroid | 0:2887415a46cd | 608 | /* Configuration. */ |
Davidroid | 0:2887415a46cd | 609 | DigitalOut ssel; |
Davidroid | 0:2887415a46cd | 610 | |
Davidroid | 0:2887415a46cd | 611 | /* Standby and reset pin. */ |
Davidroid | 0:2887415a46cd | 612 | DigitalOut reset; |
Davidroid | 0:2887415a46cd | 613 | |
Davidroid | 0:2887415a46cd | 614 | /* Direction of rotation pin. */ |
Davidroid | 0:2887415a46cd | 615 | DigitalOut direction; |
Davidroid | 0:2887415a46cd | 616 | |
Davidroid | 0:2887415a46cd | 617 | /* Pulse Width Modulation pin. */ |
Davidroid | 0:2887415a46cd | 618 | PwmOut pwm; |
Davidroid | 0:2887415a46cd | 619 | |
Davidroid | 0:2887415a46cd | 620 | /* Timer to trigger the PWM callback at each PWM pulse. */ |
Davidroid | 0:2887415a46cd | 621 | Ticker ticker; |
Davidroid | 0:2887415a46cd | 622 | |
Davidroid | 0:2887415a46cd | 623 | /* IO Device. */ |
Davidroid | 0:2887415a46cd | 624 | DevSPI &dev_spi; |
Davidroid | 0:2887415a46cd | 625 | |
Davidroid | 0:2887415a46cd | 626 | /* Interrupts. */ |
Davidroid | 0:2887415a46cd | 627 | /* ACTION 10 -------------------------------------------------------------* |
Davidroid | 0:2887415a46cd | 628 | * Put here interrupt related objects, if needed. * |
Davidroid | 0:2887415a46cd | 629 | * Note that interrupt handling is platform dependent, see * |
Davidroid | 0:2887415a46cd | 630 | * "Interrupt Related Methods" above. * |
Davidroid | 0:2887415a46cd | 631 | * * |
Davidroid | 0:2887415a46cd | 632 | * Example: * |
Davidroid | 0:2887415a46cd | 633 | * + mbed: * |
Davidroid | 0:2887415a46cd | 634 | * InterruptIn feature_int; * |
Davidroid | 0:2887415a46cd | 635 | *------------------------------------------------------------------------*/ |
Davidroid | 0:2887415a46cd | 636 | |
Davidroid | 0:2887415a46cd | 637 | /* Data. */ |
Davidroid | 0:2887415a46cd | 638 | /* ACTION 11 -------------------------------------------------------------* |
Davidroid | 0:2887415a46cd | 639 | * Declare here the component's data, one variable per line. * |
Davidroid | 0:2887415a46cd | 640 | * * |
Davidroid | 0:2887415a46cd | 641 | * Example: * |
Davidroid | 0:2887415a46cd | 642 | * int T0_out; * |
Davidroid | 0:2887415a46cd | 643 | * int T1_out; * |
Davidroid | 0:2887415a46cd | 644 | * float T0_degC; * |
Davidroid | 0:2887415a46cd | 645 | * float T1_degC; * |
Davidroid | 0:2887415a46cd | 646 | *------------------------------------------------------------------------*/ |
Davidroid | 0:2887415a46cd | 647 | void (*flagInterruptCallback)(void); |
Davidroid | 0:2887415a46cd | 648 | void (*errorHandlerCallback)(uint16_t error); |
Davidroid | 0:2887415a46cd | 649 | uint8_t spiTxBursts[L6474_CMD_ARG_MAX_NB_BYTES]; |
Davidroid | 0:2887415a46cd | 650 | uint8_t spiRxBursts[L6474_CMD_ARG_MAX_NB_BYTES]; |
Davidroid | 0:2887415a46cd | 651 | bool spiPreemtionByIsr; |
Davidroid | 0:2887415a46cd | 652 | bool isrFlag; |
Davidroid | 0:2887415a46cd | 653 | deviceParams_t devicePrm; |
Davidroid | 0:2887415a46cd | 654 | static uint8_t numberOfDevices; |
Davidroid | 0:2887415a46cd | 655 | uint8_t deviceInstance; |
Davidroid | 0:2887415a46cd | 656 | }; |
Davidroid | 0:2887415a46cd | 657 | |
Davidroid | 0:2887415a46cd | 658 | #endif // __L6474_CLASS_H |
Davidroid | 0:2887415a46cd | 659 | |
Davidroid | 0:2887415a46cd | 660 | /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |