Personal fork of the library for direct control instead of library control

Dependencies:   X_NUCLEO_COMMON

Dependents:   Thesis_Rotating_Platform

Fork of X_NUCLEO_IHM01A1 by Arkadi Rafalovich

Committer:
Davidroid
Date:
Fri Nov 20 18:00:03 2015 +0000
Revision:
7:f7e0c3621f77
Parent:
6:a47569fc7534
Child:
8:42e0b00b1e4d
+ FLAG interrupt handling added.; + Doxygen documentation ongoing.

Who changed what in which revision?

UserRevisionLine numberNew 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>&copy; 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 4:83a1eb397a65 76 #include "../Interfaces/StepperMotor_class.h"
Davidroid 0:2887415a46cd 77
Davidroid 0:2887415a46cd 78
Davidroid 0:2887415a46cd 79 /* Classes -------------------------------------------------------------------*/
Davidroid 0:2887415a46cd 80
Davidroid 0:2887415a46cd 81 /** Class representing a L6474 component.
Davidroid 0:2887415a46cd 82 */
Davidroid 4:83a1eb397a65 83 class L6474 : public StepperMotor
Davidroid 0:2887415a46cd 84 {
Davidroid 0:2887415a46cd 85 public:
Davidroid 0:2887415a46cd 86
Davidroid 0:2887415a46cd 87 /*** Constructor and Destructor Methods ***/
Davidroid 0:2887415a46cd 88
Davidroid 0:2887415a46cd 89 /**
Davidroid 0:2887415a46cd 90 * @brief Constructor.
Davidroid 7:f7e0c3621f77 91 * @param flag_irq pin name of the FLAG pin of the component.
Davidroid 4:83a1eb397a65 92 * @param standby_reset pin name of the STBY\RST pin of the component.
Davidroid 4:83a1eb397a65 93 * @param direction pin name of the DIR pin of the component.
Davidroid 4:83a1eb397a65 94 * @param pwm pin name of the PWM pin of the component.
Davidroid 4:83a1eb397a65 95 * @param ssel pin name of the SSEL pin of the SPI device to be used for communication.
Davidroid 4:83a1eb397a65 96 * @param spi SPI device to be used for communication.
Davidroid 0:2887415a46cd 97 */
Davidroid 7:f7e0c3621f77 98 L6474(PinName flag_irq, PinName standby_reset, PinName direction, PinName pwm, PinName ssel, DevSPI &spi) : StepperMotor(), flag_irq(flag_irq), standby_reset(standby_reset), direction(direction), pwm(pwm), ssel(ssel), dev_spi(spi)
Davidroid 0:2887415a46cd 99 {
Davidroid 0:2887415a46cd 100 /* ACTION 4 ----------------------------------------------------------*
Davidroid 0:2887415a46cd 101 * Initialize here the component's member variables, one variable per *
Davidroid 0:2887415a46cd 102 * line. *
Davidroid 0:2887415a46cd 103 * *
Davidroid 0:2887415a46cd 104 * Example: *
Davidroid 0:2887415a46cd 105 * T0_out = 0; *
Davidroid 0:2887415a46cd 106 * T1_out = 0; *
Davidroid 0:2887415a46cd 107 * T0_degC = 0; *
Davidroid 0:2887415a46cd 108 * T1_degC = 0; *
Davidroid 0:2887415a46cd 109 *--------------------------------------------------------------------*/
Davidroid 0:2887415a46cd 110 errorHandlerCallback = 0;
Davidroid 0:2887415a46cd 111 deviceInstance = numberOfDevices;
Davidroid 0:2887415a46cd 112 numberOfDevices++;
Davidroid 5:d3c78f12a78d 113 memset(spiTxBursts, 0, L6474_CMD_ARG_MAX_NB_BYTES * MAX_NUMBER_OF_DEVICES * sizeof(uint8_t));
Davidroid 5:d3c78f12a78d 114 memset(spiRxBursts, 0, L6474_CMD_ARG_MAX_NB_BYTES * MAX_NUMBER_OF_DEVICES * sizeof(uint8_t));
Davidroid 0:2887415a46cd 115 }
Davidroid 0:2887415a46cd 116
Davidroid 0:2887415a46cd 117 /**
Davidroid 0:2887415a46cd 118 * @brief Destructor.
Davidroid 0:2887415a46cd 119 */
Davidroid 0:2887415a46cd 120 virtual ~L6474(void) {}
Davidroid 0:2887415a46cd 121
Davidroid 0:2887415a46cd 122
Davidroid 0:2887415a46cd 123 /*** Public Component Related Methods ***/
Davidroid 0:2887415a46cd 124
Davidroid 0:2887415a46cd 125 /* ACTION 5 --------------------------------------------------------------*
Davidroid 0:2887415a46cd 126 * Implement here the component's public methods, as wrappers of the C *
Davidroid 0:2887415a46cd 127 * component's functions. *
Davidroid 0:2887415a46cd 128 * They should be: *
Davidroid 0:2887415a46cd 129 * + Methods with the same name of the C component's virtual table's *
Davidroid 0:2887415a46cd 130 * functions (1); *
Davidroid 0:2887415a46cd 131 * + Methods with the same name of the C component's extended virtual *
Davidroid 0:2887415a46cd 132 * table's functions, if any (2). *
Davidroid 0:2887415a46cd 133 * *
Davidroid 0:2887415a46cd 134 * Example: *
Davidroid 0:2887415a46cd 135 * virtual int GetValue(float *pData) //(1) *
Davidroid 0:2887415a46cd 136 * { *
Davidroid 0:2887415a46cd 137 * return COMPONENT_GetValue(float *pfData); *
Davidroid 0:2887415a46cd 138 * } *
Davidroid 0:2887415a46cd 139 * *
Davidroid 0:2887415a46cd 140 * virtual int EnableFeature(void) //(2) *
Davidroid 0:2887415a46cd 141 * { *
Davidroid 0:2887415a46cd 142 * return COMPONENT_EnableFeature(); *
Davidroid 0:2887415a46cd 143 * } *
Davidroid 0:2887415a46cd 144 *------------------------------------------------------------------------*/
Davidroid 7:f7e0c3621f77 145 /**
Davidroid 7:f7e0c3621f77 146 * @brief Initializing the component.
Davidroid 7:f7e0c3621f77 147 * @param init pointer to device specific initalization structure.
Davidroid 7:f7e0c3621f77 148 * @retval "0" in case of success, an error code otherwise.
Davidroid 7:f7e0c3621f77 149 */
Davidroid 0:2887415a46cd 150 virtual int Init(void *init)
Davidroid 0:2887415a46cd 151 {
Davidroid 0:2887415a46cd 152 return (int) L6474_Init((MOTOR_InitTypeDef *) init);
Davidroid 0:2887415a46cd 153 }
Davidroid 0:2887415a46cd 154
Davidroid 7:f7e0c3621f77 155 /**
Davidroid 7:f7e0c3621f77 156 * @brief Getting the ID of the component.
Davidroid 7:f7e0c3621f77 157 * @param id pointer to an allocated variable to store the ID into.
Davidroid 7:f7e0c3621f77 158 * @retval "0" in case of success, an error code otherwise.
Davidroid 7:f7e0c3621f77 159 */
Davidroid 0:2887415a46cd 160 virtual int ReadID(uint8_t *id)
Davidroid 0:2887415a46cd 161 {
Davidroid 0:2887415a46cd 162 return (int) L6474_ReadID((uint8_t *) id);
Davidroid 0:2887415a46cd 163 }
Davidroid 0:2887415a46cd 164
Davidroid 7:f7e0c3621f77 165 /**
Davidroid 7:f7e0c3621f77 166 * @brief Getting the value of the Status Register.
Davidroid 7:f7e0c3621f77 167 * @param None.
Davidroid 7:f7e0c3621f77 168 * @retval None.
Davidroid 7:f7e0c3621f77 169 * @note The Status Register's flags are cleared, contrary to ReadStatusRegister().
Davidroid 7:f7e0c3621f77 170 */
Davidroid 4:83a1eb397a65 171 virtual unsigned int GetStatus(void)
Davidroid 0:2887415a46cd 172 {
Davidroid 4:83a1eb397a65 173 return (unsigned int) L6474_CmdGetStatus();
Davidroid 0:2887415a46cd 174 }
Davidroid 0:2887415a46cd 175
Davidroid 7:f7e0c3621f77 176 /**
Davidroid 7:f7e0c3621f77 177 * @brief Getting a parameter.
Davidroid 7:f7e0c3621f77 178 * @param parameter register adress.
Davidroid 7:f7e0c3621f77 179 * @retval a register value.
Davidroid 7:f7e0c3621f77 180 * @note The Status Register's flags are cleared, contrary to ReadStatusRegister().
Davidroid 7:f7e0c3621f77 181 * parameter can be one of the following:
Davidroid 7:f7e0c3621f77 182 * + L6474_ABS_POS
Davidroid 7:f7e0c3621f77 183 * + L6474_EL_POS
Davidroid 7:f7e0c3621f77 184 * + L6474_MARK
Davidroid 7:f7e0c3621f77 185 * + L6474_RESERVED_REG01
Davidroid 7:f7e0c3621f77 186 * + L6474_RESERVED_REG02
Davidroid 7:f7e0c3621f77 187 * + L6474_RESERVED_REG03
Davidroid 7:f7e0c3621f77 188 * + L6474_RESERVED_REG04
Davidroid 7:f7e0c3621f77 189 * + L6474_RESERVED_REG05
Davidroid 7:f7e0c3621f77 190 * + L6474_RESERVED_REG06
Davidroid 7:f7e0c3621f77 191 * + L6474_TVAL
Davidroid 7:f7e0c3621f77 192 * + L6474_RESERVED_REG07
Davidroid 7:f7e0c3621f77 193 * + L6474_RESERVED_REG08
Davidroid 7:f7e0c3621f77 194 * + L6474_RESERVED_REG09
Davidroid 7:f7e0c3621f77 195 * + L6474_RESERVED_REG10
Davidroid 7:f7e0c3621f77 196 * + L6474_T_FAST
Davidroid 7:f7e0c3621f77 197 * + L6474_TON_MIN
Davidroid 7:f7e0c3621f77 198 * + L6474_TOFF_MIN
Davidroid 7:f7e0c3621f77 199 * + L6474_RESERVED_REG11
Davidroid 7:f7e0c3621f77 200 * + L6474_ADC_OUT
Davidroid 7:f7e0c3621f77 201 * + L6474_OCD_TH
Davidroid 7:f7e0c3621f77 202 * + L6474_RESERVED_REG12
Davidroid 7:f7e0c3621f77 203 * + L6474_STEP_MODE
Davidroid 7:f7e0c3621f77 204 * + L6474_ALARM_EN
Davidroid 7:f7e0c3621f77 205 * + L6474_CONFIG
Davidroid 7:f7e0c3621f77 206 * + L6474_STATUS
Davidroid 7:f7e0c3621f77 207 * + L6474_RESERVED_REG13
Davidroid 7:f7e0c3621f77 208 * + L6474_RESERVED_REG14
Davidroid 7:f7e0c3621f77 209 * + L6474_INEXISTENT_REG
Davidroid 7:f7e0c3621f77 210 */
Davidroid 4:83a1eb397a65 211 virtual unsigned int GetParameter(unsigned int parameter)
Davidroid 0:2887415a46cd 212 {
Davidroid 7:f7e0c3621f77 213 return (unsigned int) L6474_CmdGetParam((L6474_Registers_t) parameter);
Davidroid 4:83a1eb397a65 214 }
Davidroid 4:83a1eb397a65 215
Davidroid 4:83a1eb397a65 216 virtual signed int GetPosition(void)
Davidroid 4:83a1eb397a65 217 {
Davidroid 4:83a1eb397a65 218 return (signed int) L6474_GetPosition();
Davidroid 0:2887415a46cd 219 }
Davidroid 0:2887415a46cd 220
Davidroid 4:83a1eb397a65 221 virtual signed int GetMark(void)
Davidroid 0:2887415a46cd 222 {
Davidroid 4:83a1eb397a65 223 return (signed int) L6474_GetMark();
Davidroid 4:83a1eb397a65 224 }
Davidroid 4:83a1eb397a65 225
Davidroid 4:83a1eb397a65 226 virtual unsigned int GetSpeed(void)
Davidroid 0:2887415a46cd 227 {
Davidroid 4:83a1eb397a65 228 return (unsigned int) L6474_GetCurrentSpeed();
Davidroid 0:2887415a46cd 229 }
Davidroid 0:2887415a46cd 230
Davidroid 4:83a1eb397a65 231 virtual unsigned int GetMaxSpeed(void)
Davidroid 4:83a1eb397a65 232 {
Davidroid 4:83a1eb397a65 233 return (unsigned int) L6474_GetMaxSpeed();
Davidroid 4:83a1eb397a65 234 }
Davidroid 4:83a1eb397a65 235
Davidroid 4:83a1eb397a65 236 virtual unsigned int GetMinSpeed(void)
Davidroid 0:2887415a46cd 237 {
Davidroid 4:83a1eb397a65 238 return (unsigned int) L6474_GetMinSpeed();
Davidroid 4:83a1eb397a65 239 }
Davidroid 4:83a1eb397a65 240
Davidroid 4:83a1eb397a65 241 virtual unsigned int GetAcceleration(void)
Davidroid 4:83a1eb397a65 242 {
Davidroid 4:83a1eb397a65 243 return (unsigned int) L6474_GetAcceleration();
Davidroid 0:2887415a46cd 244 }
Davidroid 0:2887415a46cd 245
Davidroid 4:83a1eb397a65 246 virtual unsigned int GetDeceleration(void)
Davidroid 0:2887415a46cd 247 {
Davidroid 4:83a1eb397a65 248 return (unsigned int) L6474_GetDeceleration();
Davidroid 0:2887415a46cd 249 }
Davidroid 0:2887415a46cd 250
Davidroid 5:d3c78f12a78d 251 virtual direction_t GetDirection(void)
Davidroid 5:d3c78f12a78d 252 {
Davidroid 5:d3c78f12a78d 253 return (direction_t) (L6474_GetDirection() == FORWARD ? StepperMotor::FWD : StepperMotor::BWD);
Davidroid 5:d3c78f12a78d 254 }
Davidroid 5:d3c78f12a78d 255
Davidroid 7:f7e0c3621f77 256 /**
Davidroid 7:f7e0c3621f77 257 * @brief Setting a parameter.
Davidroid 7:f7e0c3621f77 258 * @param parameter register adress.
Davidroid 7:f7e0c3621f77 259 * @param value value to be set.
Davidroid 7:f7e0c3621f77 260 * @retval None.
Davidroid 7:f7e0c3621f77 261 * @note parameter can be one of the following:
Davidroid 7:f7e0c3621f77 262 * + L6474_ABS_POS
Davidroid 7:f7e0c3621f77 263 * + L6474_EL_POS
Davidroid 7:f7e0c3621f77 264 * + L6474_MARK
Davidroid 7:f7e0c3621f77 265 * + L6474_RESERVED_REG01
Davidroid 7:f7e0c3621f77 266 * + L6474_RESERVED_REG02
Davidroid 7:f7e0c3621f77 267 * + L6474_RESERVED_REG03
Davidroid 7:f7e0c3621f77 268 * + L6474_RESERVED_REG04
Davidroid 7:f7e0c3621f77 269 * + L6474_RESERVED_REG05
Davidroid 7:f7e0c3621f77 270 * + L6474_RESERVED_REG06
Davidroid 7:f7e0c3621f77 271 * + L6474_TVAL
Davidroid 7:f7e0c3621f77 272 * + L6474_RESERVED_REG07
Davidroid 7:f7e0c3621f77 273 * + L6474_RESERVED_REG08
Davidroid 7:f7e0c3621f77 274 * + L6474_RESERVED_REG09
Davidroid 7:f7e0c3621f77 275 * + L6474_RESERVED_REG10
Davidroid 7:f7e0c3621f77 276 * + L6474_T_FAST
Davidroid 7:f7e0c3621f77 277 * + L6474_TON_MIN
Davidroid 7:f7e0c3621f77 278 * + L6474_TOFF_MIN
Davidroid 7:f7e0c3621f77 279 * + L6474_RESERVED_REG11
Davidroid 7:f7e0c3621f77 280 * + L6474_ADC_OUT
Davidroid 7:f7e0c3621f77 281 * + L6474_OCD_TH
Davidroid 7:f7e0c3621f77 282 * + L6474_RESERVED_REG12
Davidroid 7:f7e0c3621f77 283 * + L6474_STEP_MODE
Davidroid 7:f7e0c3621f77 284 * + L6474_ALARM_EN
Davidroid 7:f7e0c3621f77 285 * + L6474_CONFIG
Davidroid 7:f7e0c3621f77 286 * + L6474_STATUS
Davidroid 7:f7e0c3621f77 287 * + L6474_RESERVED_REG13
Davidroid 7:f7e0c3621f77 288 * + L6474_RESERVED_REG14
Davidroid 7:f7e0c3621f77 289 * + L6474_INEXISTENT_REG
Davidroid 7:f7e0c3621f77 290 */
Davidroid 4:83a1eb397a65 291 virtual void SetParameter(unsigned int parameter, unsigned int value)
Davidroid 0:2887415a46cd 292 {
Davidroid 7:f7e0c3621f77 293 L6474_CmdSetParam((L6474_Registers_t) parameter, (unsigned int) value);
Davidroid 0:2887415a46cd 294 }
Davidroid 0:2887415a46cd 295
Davidroid 4:83a1eb397a65 296 virtual void SetHome(void)
Davidroid 0:2887415a46cd 297 {
Davidroid 4:83a1eb397a65 298 L6474_SetHome();
Davidroid 4:83a1eb397a65 299 }
Davidroid 4:83a1eb397a65 300
Davidroid 4:83a1eb397a65 301 virtual void SetMark(void)
Davidroid 4:83a1eb397a65 302 {
Davidroid 4:83a1eb397a65 303 L6474_SetMark();
Davidroid 0:2887415a46cd 304 }
Davidroid 0:2887415a46cd 305
Davidroid 4:83a1eb397a65 306 virtual void SetMaxSpeed(unsigned int speed)
Davidroid 4:83a1eb397a65 307 {
Davidroid 4:83a1eb397a65 308 L6474_SetMaxSpeed((unsigned int) speed);
Davidroid 0:2887415a46cd 309 }
Davidroid 0:2887415a46cd 310
Davidroid 4:83a1eb397a65 311 virtual void SetMinSpeed(unsigned int speed)
Davidroid 0:2887415a46cd 312 {
Davidroid 4:83a1eb397a65 313 L6474_SetMinSpeed((unsigned int) speed);
Davidroid 0:2887415a46cd 314 }
Davidroid 0:2887415a46cd 315
Davidroid 4:83a1eb397a65 316 virtual void SetAcceleration(unsigned int acceleration)
Davidroid 0:2887415a46cd 317 {
Davidroid 4:83a1eb397a65 318 L6474_SetAcceleration((unsigned int) acceleration);
Davidroid 0:2887415a46cd 319 }
Davidroid 0:2887415a46cd 320
Davidroid 4:83a1eb397a65 321 virtual void SetDeceleration(unsigned int deceleration)
Davidroid 0:2887415a46cd 322 {
Davidroid 4:83a1eb397a65 323 L6474_SetDeceleration((unsigned int) deceleration);
Davidroid 4:83a1eb397a65 324 }
Davidroid 4:83a1eb397a65 325
Davidroid 4:83a1eb397a65 326 virtual void GoTo(signed int position)
Davidroid 4:83a1eb397a65 327 {
Davidroid 4:83a1eb397a65 328 L6474_GoTo((signed int) position);
Davidroid 0:2887415a46cd 329 }
Davidroid 0:2887415a46cd 330
Davidroid 0:2887415a46cd 331 virtual void GoHome(void)
Davidroid 0:2887415a46cd 332 {
Davidroid 0:2887415a46cd 333 L6474_GoHome();
Davidroid 0:2887415a46cd 334 }
Davidroid 0:2887415a46cd 335
Davidroid 0:2887415a46cd 336 virtual void GoMark(void)
Davidroid 0:2887415a46cd 337 {
Davidroid 0:2887415a46cd 338 L6474_GoMark();
Davidroid 0:2887415a46cd 339 }
Davidroid 0:2887415a46cd 340
Davidroid 4:83a1eb397a65 341 virtual void Run(direction_t direction)
Davidroid 4:83a1eb397a65 342 {
Davidroid 5:d3c78f12a78d 343 L6474_Run((motorDir_t) (direction == StepperMotor::FWD ? FORWARD : BACKWARD));
Davidroid 4:83a1eb397a65 344 }
Davidroid 4:83a1eb397a65 345
Davidroid 4:83a1eb397a65 346 virtual void Move(direction_t direction, unsigned int steps)
Davidroid 0:2887415a46cd 347 {
Davidroid 5:d3c78f12a78d 348 L6474_Move((motorDir_t) (direction == StepperMotor::FWD ? FORWARD : BACKWARD), (unsigned int) steps);
Davidroid 4:83a1eb397a65 349 }
Davidroid 4:83a1eb397a65 350
Davidroid 4:83a1eb397a65 351 virtual void SoftStop(void)
Davidroid 4:83a1eb397a65 352 {
Davidroid 4:83a1eb397a65 353 L6474_SoftStop();
Davidroid 0:2887415a46cd 354 }
Davidroid 0:2887415a46cd 355
Davidroid 0:2887415a46cd 356 virtual void HardStop(void)
Davidroid 0:2887415a46cd 357 {
Davidroid 0:2887415a46cd 358 L6474_HardStop();
Davidroid 0:2887415a46cd 359 }
Davidroid 0:2887415a46cd 360
Davidroid 7:f7e0c3621f77 361 virtual void WaitWhileActive(void)
Davidroid 7:f7e0c3621f77 362 {
Davidroid 7:f7e0c3621f77 363 L6474_WaitWhileActive();
Davidroid 7:f7e0c3621f77 364 }
Davidroid 7:f7e0c3621f77 365
Davidroid 7:f7e0c3621f77 366 /**
Davidroid 7:f7e0c3621f77 367 * @brief Getting the device state.
Davidroid 7:f7e0c3621f77 368 * @param None.
Davidroid 7:f7e0c3621f77 369 * @retval The device state.
Davidroid 7:f7e0c3621f77 370 * @note The device state can be one of the following:
Davidroid 7:f7e0c3621f77 371 * + ACCELERATING
Davidroid 7:f7e0c3621f77 372 * + DECELERATING
Davidroid 7:f7e0c3621f77 373 * + STEADY
Davidroid 7:f7e0c3621f77 374 * + INACTIVE
Davidroid 7:f7e0c3621f77 375 */
Davidroid 4:83a1eb397a65 376 virtual motorState_t GetDeviceState(void)
Davidroid 0:2887415a46cd 377 {
Davidroid 4:83a1eb397a65 378 return (motorState_t) L6474_GetDeviceState();
Davidroid 0:2887415a46cd 379 }
Davidroid 0:2887415a46cd 380
Davidroid 4:83a1eb397a65 381 virtual uint8_t GetFwVersion(void)
Davidroid 0:2887415a46cd 382 {
Davidroid 4:83a1eb397a65 383 return (uint8_t) L6474_GetFwVersion();
Davidroid 0:2887415a46cd 384 }
Davidroid 0:2887415a46cd 385
Davidroid 5:d3c78f12a78d 386 virtual void SetDirection(direction_t direction)
Davidroid 5:d3c78f12a78d 387 {
Davidroid 5:d3c78f12a78d 388 L6474_SetDirection((motorDir_t) (direction == StepperMotor::FWD ? FORWARD : BACKWARD));
Davidroid 5:d3c78f12a78d 389 }
Davidroid 5:d3c78f12a78d 390
Davidroid 0:2887415a46cd 391 virtual void CmdDisable(void)
Davidroid 0:2887415a46cd 392 {
Davidroid 0:2887415a46cd 393 L6474_CmdDisable();
Davidroid 0:2887415a46cd 394 }
Davidroid 0:2887415a46cd 395
Davidroid 0:2887415a46cd 396 virtual void CmdEnable(void)
Davidroid 0:2887415a46cd 397 {
Davidroid 0:2887415a46cd 398 L6474_CmdEnable();
Davidroid 0:2887415a46cd 399 }
Davidroid 0:2887415a46cd 400
Davidroid 7:f7e0c3621f77 401 /**
Davidroid 7:f7e0c3621f77 402 * @brief Reading the Status Register.
Davidroid 7:f7e0c3621f77 403 * @param None.
Davidroid 7:f7e0c3621f77 404 * @retval None.
Davidroid 7:f7e0c3621f77 405 * @note The Status Register's flags are not cleared, contrary to GetStatus().
Davidroid 7:f7e0c3621f77 406 */
Davidroid 0:2887415a46cd 407 virtual uint16_t ReadStatusRegister(void)
Davidroid 0:2887415a46cd 408 {
Davidroid 0:2887415a46cd 409 return (uint16_t) L6474_ReadStatusRegister();
Davidroid 0:2887415a46cd 410 }
Davidroid 0:2887415a46cd 411
Davidroid 7:f7e0c3621f77 412 /**
Davidroid 7:f7e0c3621f77 413 * @brief Selecting the Step Mode.
Davidroid 7:f7e0c3621f77 414 * @param step_mode the Step Mode.
Davidroid 7:f7e0c3621f77 415 * @retval None.
Davidroid 7:f7e0c3621f77 416 * @note step_mode can be one of the following:
Davidroid 7:f7e0c3621f77 417 * + STEP_MODE_FULL
Davidroid 7:f7e0c3621f77 418 * + STEP_MODE_HALF
Davidroid 7:f7e0c3621f77 419 * + STEP_MODE_1_4
Davidroid 7:f7e0c3621f77 420 * + STEP_MODE_1_8
Davidroid 7:f7e0c3621f77 421 * + STEP_MODE_1_16
Davidroid 7:f7e0c3621f77 422 * + STEP_MODE_1_32
Davidroid 7:f7e0c3621f77 423 * + STEP_MODE_1_64
Davidroid 7:f7e0c3621f77 424 * + STEP_MODE_1_128
Davidroid 7:f7e0c3621f77 425 */
Davidroid 7:f7e0c3621f77 426 virtual void SelectStepMode(motorStepMode_t step_mode)
Davidroid 0:2887415a46cd 427 {
Davidroid 7:f7e0c3621f77 428 L6474_SelectStepMode((motorStepMode_t) step_mode);
Davidroid 0:2887415a46cd 429 }
Davidroid 0:2887415a46cd 430
Davidroid 7:f7e0c3621f77 431 /**
Davidroid 7:f7e0c3621f77 432 * @brief Attaching an error handler.
Davidroid 7:f7e0c3621f77 433 * @param fptr an error handler.
Davidroid 7:f7e0c3621f77 434 * @retval None.
Davidroid 7:f7e0c3621f77 435 */
Davidroid 7:f7e0c3621f77 436 virtual void AttachErrorHandler(void (*fptr)(uint16_t error))
Davidroid 4:83a1eb397a65 437 {
Davidroid 7:f7e0c3621f77 438 L6474_AttachErrorHandler((void (*)(uint16_t error)) fptr);
Davidroid 4:83a1eb397a65 439 }
Davidroid 4:83a1eb397a65 440
Davidroid 0:2887415a46cd 441
Davidroid 0:2887415a46cd 442 /*** Public Interrupt Related Methods ***/
Davidroid 0:2887415a46cd 443
Davidroid 0:2887415a46cd 444 /* ACTION 6 --------------------------------------------------------------*
Davidroid 0:2887415a46cd 445 * Implement here interrupt related methods, if any. *
Davidroid 0:2887415a46cd 446 * Note that interrupt handling is platform dependent, e.g.: *
Davidroid 0:2887415a46cd 447 * + mbed: *
Davidroid 7:f7e0c3621f77 448 * InterruptIn feature_irq(pin); //Interrupt object. *
Davidroid 7:f7e0c3621f77 449 * feature_irq.rise(callback); //Attach a callback. *
Davidroid 7:f7e0c3621f77 450 * feature_irq.mode(PullNone); //Set interrupt mode. *
Davidroid 7:f7e0c3621f77 451 * feature_irq.enable_irq(); //Enable interrupt. *
Davidroid 7:f7e0c3621f77 452 * feature_irq.disable_irq(); //Disable interrupt. *
Davidroid 0:2887415a46cd 453 * + Arduino: *
Davidroid 0:2887415a46cd 454 * attachInterrupt(pin, callback, RISING); //Attach a callback. *
Davidroid 0:2887415a46cd 455 * detachInterrupt(pin); //Detach a callback. *
Davidroid 0:2887415a46cd 456 * *
Davidroid 0:2887415a46cd 457 * Example (mbed): *
Davidroid 7:f7e0c3621f77 458 * void AttachFeatureIRQ(void (*fptr) (void)) *
Davidroid 0:2887415a46cd 459 * { *
Davidroid 7:f7e0c3621f77 460 * feature_irq.rise(fptr); *
Davidroid 7:f7e0c3621f77 461 * } *
Davidroid 7:f7e0c3621f77 462 * *
Davidroid 7:f7e0c3621f77 463 * void EnableFeatureIRQ(void) *
Davidroid 7:f7e0c3621f77 464 * { *
Davidroid 7:f7e0c3621f77 465 * feature_irq.enable_irq(); *
Davidroid 0:2887415a46cd 466 * } *
Davidroid 0:2887415a46cd 467 * *
Davidroid 7:f7e0c3621f77 468 * void DisableFeatureIRQ(void) *
Davidroid 0:2887415a46cd 469 * { *
Davidroid 7:f7e0c3621f77 470 * feature_irq.disable_irq(); *
Davidroid 0:2887415a46cd 471 * } *
Davidroid 0:2887415a46cd 472 *------------------------------------------------------------------------*/
Davidroid 7:f7e0c3621f77 473 /**
Davidroid 7:f7e0c3621f77 474 * @brief Attaching a FLAG interrupt handler.
Davidroid 7:f7e0c3621f77 475 * @param fptr an interrupt handler.
Davidroid 7:f7e0c3621f77 476 * @retval None.
Davidroid 7:f7e0c3621f77 477 */
Davidroid 7:f7e0c3621f77 478 void AttachFlagIRQ(void (*fptr)(void))
Davidroid 7:f7e0c3621f77 479 {
Davidroid 7:f7e0c3621f77 480 flag_irq.rise(fptr);
Davidroid 7:f7e0c3621f77 481 }
Davidroid 7:f7e0c3621f77 482
Davidroid 7:f7e0c3621f77 483 /**
Davidroid 7:f7e0c3621f77 484 * @brief Enabling FLAG interrupt handling.
Davidroid 7:f7e0c3621f77 485 * @param None.
Davidroid 7:f7e0c3621f77 486 * @retval None.
Davidroid 7:f7e0c3621f77 487 */
Davidroid 7:f7e0c3621f77 488 void EnableFlagIRQ(void)
Davidroid 7:f7e0c3621f77 489 {
Davidroid 7:f7e0c3621f77 490 flag_irq.enable_irq();
Davidroid 7:f7e0c3621f77 491 }
Davidroid 7:f7e0c3621f77 492
Davidroid 7:f7e0c3621f77 493 /**
Davidroid 7:f7e0c3621f77 494 * @brief Disabling FLAG interrupt handling.
Davidroid 7:f7e0c3621f77 495 * @param None.
Davidroid 7:f7e0c3621f77 496 * @retval None.
Davidroid 7:f7e0c3621f77 497 */
Davidroid 7:f7e0c3621f77 498 void DisableFlagIRQ(void)
Davidroid 7:f7e0c3621f77 499 {
Davidroid 7:f7e0c3621f77 500 flag_irq.disable_irq();
Davidroid 7:f7e0c3621f77 501 }
Davidroid 0:2887415a46cd 502
Davidroid 0:2887415a46cd 503
Davidroid 0:2887415a46cd 504 protected:
Davidroid 0:2887415a46cd 505
Davidroid 0:2887415a46cd 506 /*** Protected Component Related Methods ***/
Davidroid 0:2887415a46cd 507
Davidroid 0:2887415a46cd 508 /* ACTION 7 --------------------------------------------------------------*
Davidroid 0:2887415a46cd 509 * Declare here the component's specific methods. *
Davidroid 0:2887415a46cd 510 * They should be: *
Davidroid 0:2887415a46cd 511 * + Methods with the same name of the C component's virtual table's *
Davidroid 0:2887415a46cd 512 * functions (1); *
Davidroid 0:2887415a46cd 513 * + Methods with the same name of the C component's extended virtual *
Davidroid 0:2887415a46cd 514 * table's functions, if any (2); *
Davidroid 0:2887415a46cd 515 * + Helper methods, if any, like functions declared in the component's *
Davidroid 0:2887415a46cd 516 * source files but not pointed by the component's virtual table (3). *
Davidroid 0:2887415a46cd 517 * *
Davidroid 0:2887415a46cd 518 * Example: *
Davidroid 0:2887415a46cd 519 * DrvStatusTypeDef COMPONENT_GetValue(float* pfData); //(1) *
Davidroid 0:2887415a46cd 520 * DrvStatusTypeDef COMPONENT_EnableFeature(void); //(2) *
Davidroid 0:2887415a46cd 521 * DrvStatusTypeDef COMPONENT_ComputeAverage(void); //(3) *
Davidroid 0:2887415a46cd 522 *------------------------------------------------------------------------*/
Davidroid 7:f7e0c3621f77 523 void L6474_AttachErrorHandler(void (*callback)(uint16_t error));
Davidroid 7:f7e0c3621f77 524 DrvStatusTypeDef L6474_Init(MOTOR_InitTypeDef *init);
Davidroid 7:f7e0c3621f77 525 DrvStatusTypeDef L6474_ReadID(uint8_t *id);
Davidroid 7:f7e0c3621f77 526 uint16_t L6474_GetAcceleration(void);
Davidroid 7:f7e0c3621f77 527 uint16_t L6474_GetCurrentSpeed(void);
Davidroid 7:f7e0c3621f77 528 uint16_t L6474_GetDeceleration(void);
Davidroid 7:f7e0c3621f77 529 motorState_t L6474_GetDeviceState(void);
Davidroid 7:f7e0c3621f77 530 uint8_t L6474_GetFwVersion(void);
Davidroid 7:f7e0c3621f77 531 int32_t L6474_GetMark(void);
Davidroid 7:f7e0c3621f77 532 uint16_t L6474_GetMaxSpeed(void);
Davidroid 7:f7e0c3621f77 533 uint16_t L6474_GetMinSpeed(void);
Davidroid 7:f7e0c3621f77 534 int32_t L6474_GetPosition(void);
Davidroid 7:f7e0c3621f77 535 void L6474_GoHome(void);
Davidroid 7:f7e0c3621f77 536 void L6474_GoMark(void);
Davidroid 7:f7e0c3621f77 537 void L6474_GoTo(int32_t targetPosition);
Davidroid 7:f7e0c3621f77 538 void L6474_HardStop(void);
Davidroid 7:f7e0c3621f77 539 void L6474_Move(motorDir_t direction, uint32_t stepCount);
Davidroid 7:f7e0c3621f77 540 void L6474_Run(motorDir_t direction);
Davidroid 7:f7e0c3621f77 541 bool L6474_SetAcceleration(uint16_t newAcc);
Davidroid 7:f7e0c3621f77 542 bool L6474_SetDeceleration(uint16_t newDec);
Davidroid 7:f7e0c3621f77 543 void L6474_SetHome(void);
Davidroid 7:f7e0c3621f77 544 void L6474_SetMark(void);
Davidroid 7:f7e0c3621f77 545 bool L6474_SetMaxSpeed(uint16_t newMaxSpeed);
Davidroid 7:f7e0c3621f77 546 bool L6474_SetMinSpeed(uint16_t newMinSpeed);
Davidroid 7:f7e0c3621f77 547 bool L6474_SoftStop(void);
Davidroid 7:f7e0c3621f77 548 void L6474_WaitWhileActive(void);
Davidroid 7:f7e0c3621f77 549 void L6474_CmdDisable(void);
Davidroid 7:f7e0c3621f77 550 void L6474_CmdEnable(void);
Davidroid 7:f7e0c3621f77 551 uint32_t L6474_CmdGetParam(L6474_Registers_t parameter);
Davidroid 7:f7e0c3621f77 552 uint16_t L6474_CmdGetStatus(void);
Davidroid 7:f7e0c3621f77 553 void L6474_CmdNop(void);
Davidroid 7:f7e0c3621f77 554 void L6474_CmdSetParam(L6474_Registers_t parameter, uint32_t value);
Davidroid 7:f7e0c3621f77 555 uint16_t L6474_ReadStatusRegister(void);
Davidroid 7:f7e0c3621f77 556 void L6474_SelectStepMode(motorStepMode_t stepMod);
Davidroid 7:f7e0c3621f77 557 motorDir_t L6474_GetDirection(void);
Davidroid 7:f7e0c3621f77 558 void L6474_SetDirection(motorDir_t direction);
Davidroid 0:2887415a46cd 559 void L6474_ApplySpeed(uint16_t newSpeed);
Davidroid 0:2887415a46cd 560 void L6474_ComputeSpeedProfile(uint32_t nbSteps);
Davidroid 7:f7e0c3621f77 561 int32_t L6474_ConvertPosition(uint32_t abs_position_reg);
Davidroid 0:2887415a46cd 562 void L6474_ErrorHandler(uint16_t error);
Davidroid 0:2887415a46cd 563 void L6474_SendCommand(uint8_t param);
Davidroid 0:2887415a46cd 564 void L6474_SetRegisterToPredefinedValues(void);
Davidroid 7:f7e0c3621f77 565 void L6474_WriteBytes(uint8_t *pByteToTransmit, uint8_t *pReceivedByte);
Davidroid 0:2887415a46cd 566 void L6474_SetDeviceParamsToPredefinedValues(void);
Davidroid 0:2887415a46cd 567 void L6474_StartMovement(void);
Davidroid 7:f7e0c3621f77 568 void L6474_StepClockHandler(void);
Davidroid 0:2887415a46cd 569 uint8_t L6474_Tval_Current_to_Par(double Tval);
Davidroid 0:2887415a46cd 570 uint8_t L6474_Tmin_Time_to_Par(double Tmin);
Davidroid 0:2887415a46cd 571
Davidroid 0:2887415a46cd 572
Davidroid 0:2887415a46cd 573 /*** Component's I/O Methods ***/
Davidroid 0:2887415a46cd 574
Davidroid 0:2887415a46cd 575 /**
Davidroid 0:2887415a46cd 576 * @brief Utility function to read data from L6474.
Davidroid 0:2887415a46cd 577 * @param[out] pBuffer pointer to the buffer to read data into.
Davidroid 0:2887415a46cd 578 * @param[in] NumBytesToRead number of bytes to read.
Davidroid 0:2887415a46cd 579 * @retval COMPONENT_OK in case of success, COMPONENT_ERROR otherwise.
Davidroid 0:2887415a46cd 580 */
Davidroid 0:2887415a46cd 581 DrvStatusTypeDef Read(uint8_t* pBuffer, uint16_t NumBytesToRead)
Davidroid 0:2887415a46cd 582 {
Davidroid 0:2887415a46cd 583 if (dev_spi.spi_read(pBuffer, ssel, NumBytesToRead) != 0)
Davidroid 0:2887415a46cd 584 return COMPONENT_ERROR;
Davidroid 0:2887415a46cd 585 return COMPONENT_OK;
Davidroid 0:2887415a46cd 586 }
Davidroid 0:2887415a46cd 587
Davidroid 0:2887415a46cd 588 /**
Davidroid 0:2887415a46cd 589 * @brief Utility function to write data to L6474.
Davidroid 0:2887415a46cd 590 * @param[in] pBuffer pointer to the buffer of data to send.
Davidroid 0:2887415a46cd 591 * @param[in] NumBytesToWrite number of bytes to write.
Davidroid 0:2887415a46cd 592 * @retval COMPONENT_OK in case of success, COMPONENT_ERROR otherwise.
Davidroid 0:2887415a46cd 593 */
Davidroid 0:2887415a46cd 594 DrvStatusTypeDef Write(uint8_t* pBuffer, uint16_t NumBytesToWrite)
Davidroid 0:2887415a46cd 595 {
Davidroid 0:2887415a46cd 596 if (dev_spi.spi_write(pBuffer, ssel, NumBytesToWrite) != 0)
Davidroid 0:2887415a46cd 597 return COMPONENT_ERROR;
Davidroid 0:2887415a46cd 598 return COMPONENT_OK;
Davidroid 0:2887415a46cd 599 }
Davidroid 0:2887415a46cd 600
Davidroid 0:2887415a46cd 601 /**
Davidroid 0:2887415a46cd 602 * @brief Utility function to read and write data from/to L6474 at the same time.
Davidroid 0:2887415a46cd 603 * @param[out] pBufferToRead pointer to the buffer to read data into.
Davidroid 0:2887415a46cd 604 * @param[in] pBufferToWrite pointer to the buffer of data to send.
Davidroid 0:2887415a46cd 605 * @param[in] NumBytes number of bytes to read and write.
Davidroid 0:2887415a46cd 606 * @retval COMPONENT_OK in case of success, COMPONENT_ERROR otherwise.
Davidroid 0:2887415a46cd 607 */
Davidroid 0:2887415a46cd 608 DrvStatusTypeDef ReadWrite(uint8_t* pBufferToRead, uint8_t* pBufferToWrite, uint16_t NumBytes)
Davidroid 0:2887415a46cd 609 {
Davidroid 0:2887415a46cd 610 if (dev_spi.spi_read_write(pBufferToRead, pBufferToWrite, ssel, NumBytes) != 0)
Davidroid 0:2887415a46cd 611 return COMPONENT_ERROR;
Davidroid 0:2887415a46cd 612 return COMPONENT_OK;
Davidroid 0:2887415a46cd 613 }
Davidroid 0:2887415a46cd 614
Davidroid 0:2887415a46cd 615 /* ACTION 8 --------------------------------------------------------------*
Davidroid 0:2887415a46cd 616 * Implement here other I/O methods beyond those already implemented *
Davidroid 0:2887415a46cd 617 * above, which are declared extern within the component's header file. *
Davidroid 0:2887415a46cd 618 *------------------------------------------------------------------------*/
Davidroid 7:f7e0c3621f77 619 /**
Davidroid 7:f7e0c3621f77 620 * @brief Making the CPU wait.
Davidroid 7:f7e0c3621f77 621 * @param None.
Davidroid 7:f7e0c3621f77 622 * @retval None.
Davidroid 0:2887415a46cd 623 */
Davidroid 0:2887415a46cd 624 void L6474_Delay(uint32_t delay)
Davidroid 0:2887415a46cd 625 {
Davidroid 0:2887415a46cd 626 wait_ms(delay);
Davidroid 0:2887415a46cd 627 }
Davidroid 0:2887415a46cd 628
Davidroid 7:f7e0c3621f77 629 /**
Davidroid 7:f7e0c3621f77 630 * @brief Enabling interrupts.
Davidroid 7:f7e0c3621f77 631 * @param None.
Davidroid 7:f7e0c3621f77 632 * @retval None.
Davidroid 0:2887415a46cd 633 */
Davidroid 0:2887415a46cd 634 void L6474_EnableIrq(void)
Davidroid 0:2887415a46cd 635 {
Davidroid 0:2887415a46cd 636 __enable_irq();
Davidroid 0:2887415a46cd 637 }
Davidroid 0:2887415a46cd 638
Davidroid 7:f7e0c3621f77 639 /**
Davidroid 7:f7e0c3621f77 640 * @brief Disabling interrupts.
Davidroid 7:f7e0c3621f77 641 * @param None.
Davidroid 7:f7e0c3621f77 642 * @retval None.
Davidroid 0:2887415a46cd 643 */
Davidroid 0:2887415a46cd 644 void L6474_DisableIrq(void)
Davidroid 0:2887415a46cd 645 {
Davidroid 0:2887415a46cd 646 __disable_irq();
Davidroid 0:2887415a46cd 647 }
Davidroid 0:2887415a46cd 648
Davidroid 7:f7e0c3621f77 649 /**
Davidroid 7:f7e0c3621f77 650 * @brief Setting the frequency of PWM.
Davidroid 7:f7e0c3621f77 651 * The frequency controls directly the speed of the device.
Davidroid 7:f7e0c3621f77 652 * @param newFreq the frequency of PWM.
Davidroid 7:f7e0c3621f77 653 * @retval None.
Davidroid 0:2887415a46cd 654 */
Davidroid 0:2887415a46cd 655 void L6474_PwmSetFreq(uint16_t newFreq)
Davidroid 0:2887415a46cd 656 {
Davidroid 0:2887415a46cd 657 double period = 1.0f / newFreq;
Davidroid 0:2887415a46cd 658 pwm.period(period);
Davidroid 0:2887415a46cd 659 pwm.write(0.5f);
Davidroid 1:b38ebb8ea286 660 ticker.attach(this, &L6474::L6474_StepClockHandler, period);
Davidroid 0:2887415a46cd 661 }
Davidroid 0:2887415a46cd 662
Davidroid 7:f7e0c3621f77 663 /**
Davidroid 7:f7e0c3621f77 664 * @brief Initialising the PWM.
Davidroid 7:f7e0c3621f77 665 * @param None.
Davidroid 7:f7e0c3621f77 666 * @retval None.
Davidroid 0:2887415a46cd 667 */
Davidroid 7:f7e0c3621f77 668 void L6474_PwmInit(void) {}
Davidroid 0:2887415a46cd 669
Davidroid 7:f7e0c3621f77 670 /**
Davidroid 7:f7e0c3621f77 671 * @brief Stopping the PWM.
Davidroid 7:f7e0c3621f77 672 * @param None.
Davidroid 7:f7e0c3621f77 673 * @retval None.
Davidroid 0:2887415a46cd 674 */
Davidroid 0:2887415a46cd 675 void L6474_PwmStop(void)
Davidroid 0:2887415a46cd 676 {
Davidroid 0:2887415a46cd 677 pwm.write(0.0f);
Davidroid 0:2887415a46cd 678 ticker.detach();
Davidroid 0:2887415a46cd 679 }
Davidroid 0:2887415a46cd 680
Davidroid 7:f7e0c3621f77 681 /**
Davidroid 7:f7e0c3621f77 682 * @brief Putting the device in standby mode.
Davidroid 7:f7e0c3621f77 683 * @param None.
Davidroid 7:f7e0c3621f77 684 * @retval None.
Davidroid 0:2887415a46cd 685 */
Davidroid 0:2887415a46cd 686 void L6474_ReleaseReset(void)
Davidroid 0:2887415a46cd 687 {
Davidroid 4:83a1eb397a65 688 standby_reset = 1;
Davidroid 0:2887415a46cd 689 }
Davidroid 0:2887415a46cd 690
Davidroid 7:f7e0c3621f77 691 /**
Davidroid 7:f7e0c3621f77 692 * @brief Putting the device in reset mode.
Davidroid 7:f7e0c3621f77 693 * @param None.
Davidroid 7:f7e0c3621f77 694 * @retval None.
Davidroid 0:2887415a46cd 695 */
Davidroid 0:2887415a46cd 696 void L6474_Reset(void)
Davidroid 0:2887415a46cd 697 {
Davidroid 4:83a1eb397a65 698 standby_reset = 0;
Davidroid 0:2887415a46cd 699 }
Davidroid 0:2887415a46cd 700
Davidroid 7:f7e0c3621f77 701 /**
Davidroid 7:f7e0c3621f77 702 * @brief Setting the direction of rotation.
Davidroid 7:f7e0c3621f77 703 * @param gpioState direction of rotation: "1" for forward, "0" for backward.
Davidroid 7:f7e0c3621f77 704 * @retval None.
Davidroid 0:2887415a46cd 705 */
Davidroid 0:2887415a46cd 706 void L6474_SetDirectionGpio(uint8_t gpioState)
Davidroid 0:2887415a46cd 707 {
Davidroid 0:2887415a46cd 708 direction = gpioState;
Davidroid 0:2887415a46cd 709 }
Davidroid 0:2887415a46cd 710
Davidroid 7:f7e0c3621f77 711 /**
Davidroid 7:f7e0c3621f77 712 * @brief Writing and reading bytes to/from the component through the SPI at the same time.
Davidroid 7:f7e0c3621f77 713 * @param[in] pByteToTransmit pointer to the buffer of data to send.
Davidroid 7:f7e0c3621f77 714 * @param[out] pReceivedByte pointer to the buffer to read data into.
Davidroid 7:f7e0c3621f77 715 * @retval "0" in case of success, "1" otherwise.
Davidroid 0:2887415a46cd 716 */
Davidroid 0:2887415a46cd 717 uint8_t L6474_SpiWriteBytes(uint8_t *pByteToTransmit, uint8_t *pReceivedByte)
Davidroid 0:2887415a46cd 718 {
Davidroid 7:f7e0c3621f77 719 return (uint8_t) (ReadWrite(pReceivedByte, pByteToTransmit, numberOfDevices) == COMPONENT_OK ? 0 : 1);
Davidroid 0:2887415a46cd 720 }
Davidroid 0:2887415a46cd 721
Davidroid 0:2887415a46cd 722
Davidroid 0:2887415a46cd 723 /*** Component's Instance Variables ***/
Davidroid 0:2887415a46cd 724
Davidroid 0:2887415a46cd 725 /* Identity */
Davidroid 0:2887415a46cd 726 uint8_t who_am_i;
Davidroid 0:2887415a46cd 727
Davidroid 0:2887415a46cd 728 /* ACTION 9 --------------------------------------------------------------*
Davidroid 0:2887415a46cd 729 * There should be only a unique identifier for each component, which *
Davidroid 0:2887415a46cd 730 * should be the "who_am_i" parameter, hence this parameter is optional. *
Davidroid 0:2887415a46cd 731 *------------------------------------------------------------------------*/
Davidroid 0:2887415a46cd 732 /* Type. */
Davidroid 0:2887415a46cd 733 uint8_t type;
Davidroid 0:2887415a46cd 734
Davidroid 7:f7e0c3621f77 735 /* Flag Interrupt. */
Davidroid 7:f7e0c3621f77 736 InterruptIn flag_irq;
Davidroid 7:f7e0c3621f77 737
Davidroid 4:83a1eb397a65 738 /* Standby/reset pin. */
Davidroid 4:83a1eb397a65 739 DigitalOut standby_reset;
Davidroid 0:2887415a46cd 740
Davidroid 0:2887415a46cd 741 /* Direction of rotation pin. */
Davidroid 0:2887415a46cd 742 DigitalOut direction;
Davidroid 0:2887415a46cd 743
Davidroid 0:2887415a46cd 744 /* Pulse Width Modulation pin. */
Davidroid 0:2887415a46cd 745 PwmOut pwm;
Davidroid 0:2887415a46cd 746
Davidroid 4:83a1eb397a65 747 /* Configuration. */
Davidroid 4:83a1eb397a65 748 DigitalOut ssel;
Davidroid 0:2887415a46cd 749
Davidroid 0:2887415a46cd 750 /* IO Device. */
Davidroid 0:2887415a46cd 751 DevSPI &dev_spi;
Davidroid 0:2887415a46cd 752
Davidroid 4:83a1eb397a65 753 /* Timer to trigger the PWM callback at each PWM pulse. */
Davidroid 4:83a1eb397a65 754 Ticker ticker;
Davidroid 4:83a1eb397a65 755
Davidroid 0:2887415a46cd 756 /* Interrupts. */
Davidroid 0:2887415a46cd 757 /* ACTION 10 -------------------------------------------------------------*
Davidroid 0:2887415a46cd 758 * Put here interrupt related objects, if needed. *
Davidroid 0:2887415a46cd 759 * Note that interrupt handling is platform dependent, see *
Davidroid 0:2887415a46cd 760 * "Interrupt Related Methods" above. *
Davidroid 0:2887415a46cd 761 * *
Davidroid 0:2887415a46cd 762 * Example: *
Davidroid 0:2887415a46cd 763 * + mbed: *
Davidroid 0:2887415a46cd 764 * InterruptIn feature_int; *
Davidroid 0:2887415a46cd 765 *------------------------------------------------------------------------*/
Davidroid 0:2887415a46cd 766
Davidroid 0:2887415a46cd 767 /* Data. */
Davidroid 0:2887415a46cd 768 /* ACTION 11 -------------------------------------------------------------*
Davidroid 0:2887415a46cd 769 * Declare here the component's data, one variable per line. *
Davidroid 0:2887415a46cd 770 * *
Davidroid 0:2887415a46cd 771 * Example: *
Davidroid 0:2887415a46cd 772 * int T0_out; *
Davidroid 0:2887415a46cd 773 * int T1_out; *
Davidroid 0:2887415a46cd 774 * float T0_degC; *
Davidroid 0:2887415a46cd 775 * float T1_degC; *
Davidroid 0:2887415a46cd 776 *------------------------------------------------------------------------*/
Davidroid 0:2887415a46cd 777 void (*errorHandlerCallback)(uint16_t error);
Davidroid 0:2887415a46cd 778 deviceParams_t devicePrm;
Davidroid 5:d3c78f12a78d 779 uint8_t deviceInstance;
Davidroid 7:f7e0c3621f77 780
Davidroid 7:f7e0c3621f77 781 /* Static data. */
Davidroid 0:2887415a46cd 782 static uint8_t numberOfDevices;
Davidroid 7:f7e0c3621f77 783 static uint8_t spiTxBursts[L6474_CMD_ARG_MAX_NB_BYTES][MAX_NUMBER_OF_DEVICES];
Davidroid 7:f7e0c3621f77 784 static uint8_t spiRxBursts[L6474_CMD_ARG_MAX_NB_BYTES][MAX_NUMBER_OF_DEVICES];
Davidroid 7:f7e0c3621f77 785
Davidroid 7:f7e0c3621f77 786
Davidroid 7:f7e0c3621f77 787 public:
Davidroid 7:f7e0c3621f77 788
Davidroid 7:f7e0c3621f77 789 /* Static data. */
Davidroid 6:a47569fc7534 790 static bool spiPreemtionByIsr;
Davidroid 6:a47569fc7534 791 static bool isrFlag;
Davidroid 0:2887415a46cd 792 };
Davidroid 0:2887415a46cd 793
Davidroid 0:2887415a46cd 794 #endif // __L6474_CLASS_H
Davidroid 0:2887415a46cd 795
Davidroid 0:2887415a46cd 796 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/