JHE YU CHEN / X_NUCLEO_IHM02A1

Dependencies:   ST_INTERFACES X_NUCLEO_COMMON

Fork of X_NUCLEO_IHM02A1 by ST

Committer:
davide.aliprandi@st.com
Date:
Fri Mar 10 11:09:21 2017 +0100
Revision:
22:ba7f4131a5e0
Parent:
16:0d5be428b264
Aligning to ARM mbed coding style.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Davidroid 0:92706998571a 1 /**
Davidroid 14:e614697ebf34 2 ******************************************************************************
davide.aliprandi@st.com 22:ba7f4131a5e0 3 * @file l6470.h
davide.aliprandi@st.com 22:ba7f4131a5e0 4 * @author Davide Aliprandi, STMicroelectronics
davide.aliprandi@st.com 22:ba7f4131a5e0 5 * @version V1.0.0
davide.aliprandi@st.com 22:ba7f4131a5e0 6 * @date November 12th, 2015
davide.aliprandi@st.com 22:ba7f4131a5e0 7 * @brief This file contains the class of an L6470 Motor Control component.
Davidroid 14:e614697ebf34 8 ******************************************************************************
Davidroid 14:e614697ebf34 9 *
Davidroid 14:e614697ebf34 10 * COPYRIGHT(c) 2014 STMicroelectronics
Davidroid 14:e614697ebf34 11 *
Davidroid 14:e614697ebf34 12 * Redistribution and use in source and binary forms, with or without modification,
Davidroid 14:e614697ebf34 13 * are permitted provided that the following conditions are met:
Davidroid 14:e614697ebf34 14 * 1. Redistributions of source code must retain the above copyright notice,
Davidroid 14:e614697ebf34 15 * this list of conditions and the following disclaimer.
Davidroid 14:e614697ebf34 16 * 2. Redistributions in binary form must reproduce the above copyright notice,
Davidroid 14:e614697ebf34 17 * this list of conditions and the following disclaimer in the documentation
Davidroid 14:e614697ebf34 18 * and/or other materials provided with the distribution.
Davidroid 14:e614697ebf34 19 * 3. Neither the name of STMicroelectronics nor the names of its contributors
Davidroid 14:e614697ebf34 20 * may be used to endorse or promote products derived from this software
Davidroid 14:e614697ebf34 21 * without specific prior written permission.
Davidroid 14:e614697ebf34 22 *
Davidroid 14:e614697ebf34 23 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
Davidroid 14:e614697ebf34 24 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
Davidroid 14:e614697ebf34 25 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
Davidroid 14:e614697ebf34 26 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
Davidroid 14:e614697ebf34 27 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
Davidroid 14:e614697ebf34 28 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
Davidroid 14:e614697ebf34 29 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
Davidroid 14:e614697ebf34 30 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
Davidroid 14:e614697ebf34 31 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
Davidroid 14:e614697ebf34 32 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Davidroid 14:e614697ebf34 33 *
Davidroid 14:e614697ebf34 34 ******************************************************************************
Davidroid 14:e614697ebf34 35 */
Davidroid 14:e614697ebf34 36
Davidroid 0:92706998571a 37
davide.aliprandi@st.com 22:ba7f4131a5e0 38 /* Generated with STM32CubeTOO -----------------------------------------------*/
davide.aliprandi@st.com 22:ba7f4131a5e0 39
davide.aliprandi@st.com 22:ba7f4131a5e0 40
davide.aliprandi@st.com 22:ba7f4131a5e0 41 /* Revision ------------------------------------------------------------------*/
davide.aliprandi@st.com 22:ba7f4131a5e0 42 /*
davide.aliprandi@st.com 22:ba7f4131a5e0 43 Repository: http://svn.x-nucleodev.codex.cro.st.com/svnroot/X-NucleoDev
davide.aliprandi@st.com 22:ba7f4131a5e0 44 Branch/Trunk/Tag: trunk
davide.aliprandi@st.com 22:ba7f4131a5e0 45 Based on: X-CUBE-SPN2/trunk/Drivers/BSP/Components/L6470/L6470.h
davide.aliprandi@st.com 22:ba7f4131a5e0 46 Revision: 0
davide.aliprandi@st.com 22:ba7f4131a5e0 47 */
davide.aliprandi@st.com 22:ba7f4131a5e0 48
davide.aliprandi@st.com 22:ba7f4131a5e0 49
Davidroid 0:92706998571a 50 /* Define to prevent recursive inclusion -------------------------------------*/
Davidroid 14:e614697ebf34 51
davide.aliprandi@st.com 22:ba7f4131a5e0 52 #ifndef __L6470_CLASS_H
davide.aliprandi@st.com 22:ba7f4131a5e0 53 #define __L6470_CLASS_H
Davidroid 0:92706998571a 54
Davidroid 14:e614697ebf34 55
Davidroid 0:92706998571a 56 /* Includes ------------------------------------------------------------------*/
Davidroid 14:e614697ebf34 57
davide.aliprandi@st.com 22:ba7f4131a5e0 58 /* ACTION 1 ------------------------------------------------------------------*
davide.aliprandi@st.com 22:ba7f4131a5e0 59 * Include here platform specific header files. *
davide.aliprandi@st.com 22:ba7f4131a5e0 60 *----------------------------------------------------------------------------*/
davide.aliprandi@st.com 22:ba7f4131a5e0 61 #include "mbed.h"
davide.aliprandi@st.com 22:ba7f4131a5e0 62 #include "DevSPI.h"
davide.aliprandi@st.com 22:ba7f4131a5e0 63 /* ACTION 2 ------------------------------------------------------------------*
davide.aliprandi@st.com 22:ba7f4131a5e0 64 * Include here component specific header files. *
davide.aliprandi@st.com 22:ba7f4131a5e0 65 *----------------------------------------------------------------------------*/
davide.aliprandi@st.com 22:ba7f4131a5e0 66 #include "l6470_def.h"
davide.aliprandi@st.com 22:ba7f4131a5e0 67 /* ACTION 3 ------------------------------------------------------------------*
davide.aliprandi@st.com 22:ba7f4131a5e0 68 * Include here interface specific header files. *
davide.aliprandi@st.com 22:ba7f4131a5e0 69 * *
davide.aliprandi@st.com 22:ba7f4131a5e0 70 * Example: *
davide.aliprandi@st.com 22:ba7f4131a5e0 71 * #include "HumiditySensor.h" *
davide.aliprandi@st.com 22:ba7f4131a5e0 72 * #include "TemperatureSensor.h" *
davide.aliprandi@st.com 22:ba7f4131a5e0 73 *----------------------------------------------------------------------------*/
davide.aliprandi@st.com 22:ba7f4131a5e0 74 #include "StepperMotor.h"
Davidroid 0:92706998571a 75
Davidroid 14:e614697ebf34 76
davide.aliprandi@st.com 22:ba7f4131a5e0 77 /* Classes -------------------------------------------------------------------*/
Davidroid 0:92706998571a 78
Davidroid 0:92706998571a 79 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 80 * @brief Class representing a L6470 component.
Davidroid 14:e614697ebf34 81 */
davide.aliprandi@st.com 22:ba7f4131a5e0 82 class L6470 : public StepperMotor
Davidroid 11:1aca63b2f034 83 {
davide.aliprandi@st.com 22:ba7f4131a5e0 84 public:
davide.aliprandi@st.com 22:ba7f4131a5e0 85
davide.aliprandi@st.com 22:ba7f4131a5e0 86 /*** Public Component Related Types ***/
davide.aliprandi@st.com 22:ba7f4131a5e0 87
davide.aliprandi@st.com 22:ba7f4131a5e0 88 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 89 * @brief Prepared Actions.
davide.aliprandi@st.com 22:ba7f4131a5e0 90 */
davide.aliprandi@st.com 22:ba7f4131a5e0 91 typedef enum
davide.aliprandi@st.com 22:ba7f4131a5e0 92 {
davide.aliprandi@st.com 22:ba7f4131a5e0 93 PREPARED_NO_ACTION = 0,
davide.aliprandi@st.com 22:ba7f4131a5e0 94 PREPARED_GET_POSITION,
davide.aliprandi@st.com 22:ba7f4131a5e0 95 PREPARED_GET_MARK,
davide.aliprandi@st.com 22:ba7f4131a5e0 96 PREPARED_GET_SPEED,
davide.aliprandi@st.com 22:ba7f4131a5e0 97 PREPARED_GET_MAX_SPEED,
davide.aliprandi@st.com 22:ba7f4131a5e0 98 PREPARED_GET_MIN_SPEED,
davide.aliprandi@st.com 22:ba7f4131a5e0 99 PREPARED_GET_ACCELERATION,
davide.aliprandi@st.com 22:ba7f4131a5e0 100 PREPARED_GET_DECELERATION,
davide.aliprandi@st.com 22:ba7f4131a5e0 101 PREPARED_GET_DIRECTION,
davide.aliprandi@st.com 22:ba7f4131a5e0 102 PREPARED_SET_MARK
davide.aliprandi@st.com 22:ba7f4131a5e0 103 } prepared_action_t;
davide.aliprandi@st.com 22:ba7f4131a5e0 104
davide.aliprandi@st.com 22:ba7f4131a5e0 105
davide.aliprandi@st.com 22:ba7f4131a5e0 106 /*** Constructor and Destructor Methods ***/
Davidroid 11:1aca63b2f034 107
davide.aliprandi@st.com 22:ba7f4131a5e0 108 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 109 * @brief Constructor.
davide.aliprandi@st.com 22:ba7f4131a5e0 110 * @param flag_irq pin name of the FLAG pin of the component.
davide.aliprandi@st.com 22:ba7f4131a5e0 111 * @param busy_irq pin name of the BUSY pin of the component.
davide.aliprandi@st.com 22:ba7f4131a5e0 112 * @param standby_reset pin name of the STBY\RST pin of the component.
davide.aliprandi@st.com 22:ba7f4131a5e0 113 * @param ssel pin name of the SSEL pin of the SPI device to be used for communication.
davide.aliprandi@st.com 22:ba7f4131a5e0 114 * @param spi SPI device to be used for communication.
davide.aliprandi@st.com 22:ba7f4131a5e0 115 */
davide.aliprandi@st.com 22:ba7f4131a5e0 116 L6470(PinName flag_irq, PinName busy_irq, PinName standby_reset, PinName ssel, DevSPI &spi) : StepperMotor(), flag_irq(flag_irq), busy_irq(busy_irq), standby_reset(standby_reset), ssel(ssel), dev_spi(spi)
davide.aliprandi@st.com 22:ba7f4131a5e0 117 {
davide.aliprandi@st.com 22:ba7f4131a5e0 118 /* ACTION 4 ----------------------------------------------------------*
davide.aliprandi@st.com 22:ba7f4131a5e0 119 * Initialize here the component's member variables, one variable per *
davide.aliprandi@st.com 22:ba7f4131a5e0 120 * line. *
davide.aliprandi@st.com 22:ba7f4131a5e0 121 * *
davide.aliprandi@st.com 22:ba7f4131a5e0 122 * Example: *
davide.aliprandi@st.com 22:ba7f4131a5e0 123 * measure = 0; *
davide.aliprandi@st.com 22:ba7f4131a5e0 124 * instance_id = number_of_instances++; *
davide.aliprandi@st.com 22:ba7f4131a5e0 125 *--------------------------------------------------------------------*/
davide.aliprandi@st.com 22:ba7f4131a5e0 126 L6470_Register = &_L6470_Register[0];
davide.aliprandi@st.com 22:ba7f4131a5e0 127 L6470_ApplicationCommand = &_L6470_ApplicationCommand[0];
davide.aliprandi@st.com 22:ba7f4131a5e0 128 L6470_Direction = &_L6470_Direction[0];
davide.aliprandi@st.com 22:ba7f4131a5e0 129 L6470_ACT = &_L6470_ACT[0];
davide.aliprandi@st.com 22:ba7f4131a5e0 130 pL6470_StatusRegister = &L6470_StatusRegister;
davide.aliprandi@st.com 22:ba7f4131a5e0 131 prepared_action = PREPARED_NO_ACTION;
davide.aliprandi@st.com 22:ba7f4131a5e0 132 L6470_Id = number_of_devices++;
davide.aliprandi@st.com 22:ba7f4131a5e0 133 L6470_DaisyChain_HalfPrepared = ZERO_F;
davide.aliprandi@st.com 22:ba7f4131a5e0 134 memset(L6470_AppCmdPkg, 0, L6470DAISYCHAINSIZE * sizeof(sL6470_AppCmdPkg_t));
davide.aliprandi@st.com 22:ba7f4131a5e0 135 memset(L6470_DaisyChainSpiTxStruct, 0, L6470MAXSPICMDBYTESIZE * L6470DAISYCHAINSIZE * sizeof(uint8_t));
davide.aliprandi@st.com 22:ba7f4131a5e0 136 memset(L6470_DaisyChainSpiRxStruct, 0, L6470MAXSPICMDBYTESIZE * L6470DAISYCHAINSIZE * sizeof(uint8_t));
davide.aliprandi@st.com 22:ba7f4131a5e0 137 }
davide.aliprandi@st.com 22:ba7f4131a5e0 138
davide.aliprandi@st.com 22:ba7f4131a5e0 139 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 140 * @brief Destructor.
davide.aliprandi@st.com 22:ba7f4131a5e0 141 */
davide.aliprandi@st.com 22:ba7f4131a5e0 142 virtual ~L6470(void) {}
Davidroid 0:92706998571a 143
Davidroid 0:92706998571a 144
davide.aliprandi@st.com 22:ba7f4131a5e0 145 /*** Public Component Related Methods ***/
davide.aliprandi@st.com 22:ba7f4131a5e0 146
davide.aliprandi@st.com 22:ba7f4131a5e0 147 /* ACTION 5 --------------------------------------------------------------*
davide.aliprandi@st.com 22:ba7f4131a5e0 148 * Implement here the component's public methods, as wrappers of the C *
davide.aliprandi@st.com 22:ba7f4131a5e0 149 * component's functions. *
davide.aliprandi@st.com 22:ba7f4131a5e0 150 * They should be: *
davide.aliprandi@st.com 22:ba7f4131a5e0 151 * + Methods with the same name of the C component's virtual table's *
davide.aliprandi@st.com 22:ba7f4131a5e0 152 * functions (1); *
davide.aliprandi@st.com 22:ba7f4131a5e0 153 * + Methods with the same name of the C component's extended virtual *
davide.aliprandi@st.com 22:ba7f4131a5e0 154 * table's functions, if any (2). *
davide.aliprandi@st.com 22:ba7f4131a5e0 155 * *
davide.aliprandi@st.com 22:ba7f4131a5e0 156 * Example: *
davide.aliprandi@st.com 22:ba7f4131a5e0 157 * virtual int get_value(float *p_data) //(1) *
davide.aliprandi@st.com 22:ba7f4131a5e0 158 * { *
davide.aliprandi@st.com 22:ba7f4131a5e0 159 * return COMPONENT_get_value(float *pf_data); *
davide.aliprandi@st.com 22:ba7f4131a5e0 160 * } *
davide.aliprandi@st.com 22:ba7f4131a5e0 161 * *
davide.aliprandi@st.com 22:ba7f4131a5e0 162 * virtual int enable_feature(void) //(2) *
davide.aliprandi@st.com 22:ba7f4131a5e0 163 * { *
davide.aliprandi@st.com 22:ba7f4131a5e0 164 * return COMPONENT_enable_feature(); *
davide.aliprandi@st.com 22:ba7f4131a5e0 165 * } *
davide.aliprandi@st.com 22:ba7f4131a5e0 166 *------------------------------------------------------------------------*/
davide.aliprandi@st.com 22:ba7f4131a5e0 167 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 168 * @brief Initializing the component.
davide.aliprandi@st.com 22:ba7f4131a5e0 169 * @param init Pointer to device specific initalization structure.
davide.aliprandi@st.com 22:ba7f4131a5e0 170 * @retval "0" in case of success, an error code otherwise.
davide.aliprandi@st.com 22:ba7f4131a5e0 171 */
davide.aliprandi@st.com 22:ba7f4131a5e0 172 virtual int init(void *init)
davide.aliprandi@st.com 22:ba7f4131a5e0 173 {
davide.aliprandi@st.com 22:ba7f4131a5e0 174 return (int) L6470_Config((void *) init);
davide.aliprandi@st.com 22:ba7f4131a5e0 175 }
davide.aliprandi@st.com 22:ba7f4131a5e0 176
davide.aliprandi@st.com 22:ba7f4131a5e0 177 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 178 * @brief Getting the ID of the component.
davide.aliprandi@st.com 22:ba7f4131a5e0 179 * @param id Pointer to an allocated variable to store the ID into.
davide.aliprandi@st.com 22:ba7f4131a5e0 180 * @retval "0" in case of success, an error code otherwise.
davide.aliprandi@st.com 22:ba7f4131a5e0 181 */
davide.aliprandi@st.com 22:ba7f4131a5e0 182 virtual int read_id(uint8_t *id)
davide.aliprandi@st.com 22:ba7f4131a5e0 183 {
davide.aliprandi@st.com 22:ba7f4131a5e0 184 return (int) 0;
davide.aliprandi@st.com 22:ba7f4131a5e0 185 }
davide.aliprandi@st.com 22:ba7f4131a5e0 186
davide.aliprandi@st.com 22:ba7f4131a5e0 187 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 188 * @brief Getting the status.
davide.aliprandi@st.com 22:ba7f4131a5e0 189 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 190 * @retval The status.
davide.aliprandi@st.com 22:ba7f4131a5e0 191 */
davide.aliprandi@st.com 22:ba7f4131a5e0 192 virtual unsigned int get_status(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 193 {
davide.aliprandi@st.com 22:ba7f4131a5e0 194 return (unsigned int) L6470_GetStatus();
davide.aliprandi@st.com 22:ba7f4131a5e0 195 }
davide.aliprandi@st.com 22:ba7f4131a5e0 196
davide.aliprandi@st.com 22:ba7f4131a5e0 197 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 198 * @brief Getting a parameter.
davide.aliprandi@st.com 22:ba7f4131a5e0 199 * @param parameter A parameter's register address.
davide.aliprandi@st.com 22:ba7f4131a5e0 200 * @retval The parameter's value.
davide.aliprandi@st.com 22:ba7f4131a5e0 201 * @note The parameter can be one of the following:
davide.aliprandi@st.com 22:ba7f4131a5e0 202 * + L6470_ABS_POS_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 203 * + L6470_EL_POS_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 204 * + L6470_MARK_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 205 * + L6470_SPEED_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 206 * + L6470_ACC_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 207 * + L6470_DEC_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 208 * + L6470_MAX_SPEED_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 209 * + L6470_MIN_SPEED_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 210 * + L6470_FS_SPD_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 211 * + L6470_KVAL_HOLD_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 212 * + L6470_KVAL_RUN_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 213 * + L6470_KVAL_ACC_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 214 * + L6470_KVAL_DEC_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 215 * + L6470_INT_SPEED_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 216 * + L6470_ST_SLP_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 217 * + L6470_FN_SLP_ACC_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 218 * + L6470_FN_SLP_DEC_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 219 * + L6470_K_THERM_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 220 * + L6470_ADC_OUT_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 221 * + L6470_OCD_TH_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 222 * + L6470_STALL_TH_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 223 * + L6470_STEP_MODE_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 224 * + L6470_ALARM_EN_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 225 * + L6470_CONFIG_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 226 * + L6470_STATUS_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 227 */
davide.aliprandi@st.com 22:ba7f4131a5e0 228 virtual unsigned int get_parameter(unsigned int parameter)
davide.aliprandi@st.com 22:ba7f4131a5e0 229 {
davide.aliprandi@st.com 22:ba7f4131a5e0 230 return (unsigned int) L6470_GetParam((eL6470_RegId_t) parameter);
davide.aliprandi@st.com 22:ba7f4131a5e0 231 }
davide.aliprandi@st.com 22:ba7f4131a5e0 232
davide.aliprandi@st.com 22:ba7f4131a5e0 233 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 234 * @brief Getting the position.
davide.aliprandi@st.com 22:ba7f4131a5e0 235 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 236 * @retval The position.
davide.aliprandi@st.com 22:ba7f4131a5e0 237 */
davide.aliprandi@st.com 22:ba7f4131a5e0 238 virtual signed int get_position(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 239 {
davide.aliprandi@st.com 22:ba7f4131a5e0 240 return (signed int) L6470_AbsPos_2_Position((uint32_t) L6470_GetParam((eL6470_RegId_t) L6470_ABS_POS_ID));
davide.aliprandi@st.com 22:ba7f4131a5e0 241 }
davide.aliprandi@st.com 22:ba7f4131a5e0 242
davide.aliprandi@st.com 22:ba7f4131a5e0 243 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 244 * @brief Getting the marked position.
davide.aliprandi@st.com 22:ba7f4131a5e0 245 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 246 * @retval The marked position.
davide.aliprandi@st.com 22:ba7f4131a5e0 247 */
davide.aliprandi@st.com 22:ba7f4131a5e0 248 virtual signed int get_mark(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 249 {
davide.aliprandi@st.com 22:ba7f4131a5e0 250 return (signed int) L6470_AbsPos_2_Position((uint32_t) L6470_GetParam((eL6470_RegId_t) L6470_MARK_ID));
davide.aliprandi@st.com 22:ba7f4131a5e0 251 }
davide.aliprandi@st.com 22:ba7f4131a5e0 252
davide.aliprandi@st.com 22:ba7f4131a5e0 253 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 254 * @brief Getting the current speed in pps.
davide.aliprandi@st.com 22:ba7f4131a5e0 255 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 256 * @retval The current speed in pps.
davide.aliprandi@st.com 22:ba7f4131a5e0 257 */
davide.aliprandi@st.com 22:ba7f4131a5e0 258 virtual unsigned int get_speed(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 259 {
davide.aliprandi@st.com 22:ba7f4131a5e0 260 return round(L6470_Speed_2_Step_s((unsigned int) L6470_GetParam((eL6470_RegId_t) L6470_SPEED_ID)));
davide.aliprandi@st.com 22:ba7f4131a5e0 261 }
davide.aliprandi@st.com 22:ba7f4131a5e0 262
davide.aliprandi@st.com 22:ba7f4131a5e0 263 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 264 * @brief Getting the maximum speed in pps.
davide.aliprandi@st.com 22:ba7f4131a5e0 265 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 266 * @retval The maximum speed in pps.
davide.aliprandi@st.com 22:ba7f4131a5e0 267 */
davide.aliprandi@st.com 22:ba7f4131a5e0 268 virtual unsigned int get_max_speed(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 269 {
davide.aliprandi@st.com 22:ba7f4131a5e0 270 return round(L6470_MaxSpeed_2_Step_s((unsigned int) L6470_GetParam((eL6470_RegId_t) L6470_MAX_SPEED_ID)));
davide.aliprandi@st.com 22:ba7f4131a5e0 271 }
davide.aliprandi@st.com 22:ba7f4131a5e0 272
davide.aliprandi@st.com 22:ba7f4131a5e0 273 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 274 * @brief Getting the minimum speed in pps.
davide.aliprandi@st.com 22:ba7f4131a5e0 275 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 276 * @retval The minimum speed in pps.
davide.aliprandi@st.com 22:ba7f4131a5e0 277 */
davide.aliprandi@st.com 22:ba7f4131a5e0 278 virtual unsigned int get_min_speed(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 279 {
davide.aliprandi@st.com 22:ba7f4131a5e0 280 return round(L6470_MinSpeed_2_Step_s((unsigned int) L6470_GetParam((eL6470_RegId_t) L6470_MIN_SPEED_ID)));
davide.aliprandi@st.com 22:ba7f4131a5e0 281 }
davide.aliprandi@st.com 22:ba7f4131a5e0 282
davide.aliprandi@st.com 22:ba7f4131a5e0 283 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 284 * @brief Getting the acceleration in pps^2.
davide.aliprandi@st.com 22:ba7f4131a5e0 285 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 286 * @retval The acceleration in pps^2.
davide.aliprandi@st.com 22:ba7f4131a5e0 287 */
davide.aliprandi@st.com 22:ba7f4131a5e0 288 virtual unsigned int get_acceleration(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 289 {
davide.aliprandi@st.com 22:ba7f4131a5e0 290 return round(L6470_Acc_2_Step_s2((unsigned int) L6470_GetParam((eL6470_RegId_t) L6470_ACC_ID)));
davide.aliprandi@st.com 22:ba7f4131a5e0 291 }
davide.aliprandi@st.com 22:ba7f4131a5e0 292
davide.aliprandi@st.com 22:ba7f4131a5e0 293 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 294 * @brief Getting the deceleration in pps^2.
davide.aliprandi@st.com 22:ba7f4131a5e0 295 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 296 * @retval The deceleration in pps^2.
davide.aliprandi@st.com 22:ba7f4131a5e0 297 */
davide.aliprandi@st.com 22:ba7f4131a5e0 298 virtual unsigned int get_deceleration(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 299 {
davide.aliprandi@st.com 22:ba7f4131a5e0 300 return round(L6470_Dec_2_Step_s2((unsigned int) L6470_GetParam((eL6470_RegId_t) L6470_DEC_ID)));
davide.aliprandi@st.com 22:ba7f4131a5e0 301 }
davide.aliprandi@st.com 22:ba7f4131a5e0 302
davide.aliprandi@st.com 22:ba7f4131a5e0 303 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 304 * @brief Getting the direction of rotation.
davide.aliprandi@st.com 22:ba7f4131a5e0 305 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 306 * @retval The direction of rotation.
davide.aliprandi@st.com 22:ba7f4131a5e0 307 */
davide.aliprandi@st.com 22:ba7f4131a5e0 308 virtual direction_t get_direction(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 309 {
davide.aliprandi@st.com 22:ba7f4131a5e0 310 return (direction_t) (L6470_CheckStatusRegisterFlag((eL6470_StatusRegisterFlagId_t) DIR_ID) == 1 ? StepperMotor::FWD : StepperMotor::BWD);
davide.aliprandi@st.com 22:ba7f4131a5e0 311 }
Davidroid 0:92706998571a 312
davide.aliprandi@st.com 22:ba7f4131a5e0 313 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 314 * @brief Setting a parameter.
davide.aliprandi@st.com 22:ba7f4131a5e0 315 * @param parameter A parameter's register address.
davide.aliprandi@st.com 22:ba7f4131a5e0 316 * @param value The parameter's value.
davide.aliprandi@st.com 22:ba7f4131a5e0 317 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 318 * @note The parameter can be one of the following:
davide.aliprandi@st.com 22:ba7f4131a5e0 319 * + L6470_ABS_POS_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 320 * + L6470_EL_POS_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 321 * + L6470_MARK_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 322 * + L6470_SPEED_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 323 * + L6470_ACC_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 324 * + L6470_DEC_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 325 * + L6470_MAX_SPEED_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 326 * + L6470_MIN_SPEED_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 327 * + L6470_FS_SPD_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 328 * + L6470_KVAL_HOLD_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 329 * + L6470_KVAL_RUN_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 330 * + L6470_KVAL_ACC_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 331 * + L6470_KVAL_DEC_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 332 * + L6470_INT_SPEED_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 333 * + L6470_ST_SLP_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 334 * + L6470_FN_SLP_ACC_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 335 * + L6470_FN_SLP_DEC_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 336 * + L6470_K_THERM_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 337 * + L6470_ADC_OUT_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 338 * + L6470_OCD_TH_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 339 * + L6470_STALL_TH_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 340 * + L6470_STEP_MODE_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 341 * + L6470_ALARM_EN_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 342 * + L6470_CONFIG_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 343 * + L6470_STATUS_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 344 * @warning Some registers can only be written in particular conditions (see L6470's datasheet).
davide.aliprandi@st.com 22:ba7f4131a5e0 345 * Any attempt to write one of those registers when the conditions are not satisfied
davide.aliprandi@st.com 22:ba7f4131a5e0 346 * causes the command to be ignored and the NOTPERF_CMD flag to rise at the end of the
davide.aliprandi@st.com 22:ba7f4131a5e0 347 * last argument byte. Any attempt to set an inexistent register (wrong address value)
davide.aliprandi@st.com 22:ba7f4131a5e0 348 * causes the command to be ignored and the WRONG_CMD flag to rise.
davide.aliprandi@st.com 22:ba7f4131a5e0 349 * For example, setting some parameters requires first to disable the power bridge;
davide.aliprandi@st.com 22:ba7f4131a5e0 350 * this can be done through the soft_hiz() method.
davide.aliprandi@st.com 22:ba7f4131a5e0 351 * They are the following:
davide.aliprandi@st.com 22:ba7f4131a5e0 352 * + L6470_ABS_POS_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 353 * + L6470_EL_POS_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 354 * + L6470_SPEED_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 355 * + L6470_ACC_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 356 * + L6470_DEC_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 357 * + L6470_MAX_SPEED_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 358 * + L6470_MIN_SPEED_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 359 * + L6470_INT_SPEED_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 360 * + L6470_ST_SLP_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 361 * + L6470_FN_SLP_ACC_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 362 * + L6470_FN_SLP_DEC_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 363 * + L6470_ADC_OUT_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 364 * + L6470_STEP_MODE_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 365 * + L6470_CONFIG_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 366 * + L6470_STATUS_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 367 */
davide.aliprandi@st.com 22:ba7f4131a5e0 368 virtual void set_parameter(unsigned int parameter, unsigned int value)
davide.aliprandi@st.com 22:ba7f4131a5e0 369 {
davide.aliprandi@st.com 22:ba7f4131a5e0 370 L6470_SetParam((eL6470_RegId_t) parameter, (uint32_t) value);
davide.aliprandi@st.com 22:ba7f4131a5e0 371 }
davide.aliprandi@st.com 22:ba7f4131a5e0 372
davide.aliprandi@st.com 22:ba7f4131a5e0 373 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 374 * @brief Setting the current position to be the home position.
davide.aliprandi@st.com 22:ba7f4131a5e0 375 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 376 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 377 */
davide.aliprandi@st.com 22:ba7f4131a5e0 378 virtual void set_home(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 379 {
davide.aliprandi@st.com 22:ba7f4131a5e0 380 L6470_ResetPos();
davide.aliprandi@st.com 22:ba7f4131a5e0 381 }
davide.aliprandi@st.com 22:ba7f4131a5e0 382
davide.aliprandi@st.com 22:ba7f4131a5e0 383 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 384 * @brief Setting the current position to be the marked position.
davide.aliprandi@st.com 22:ba7f4131a5e0 385 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 386 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 387 */
davide.aliprandi@st.com 22:ba7f4131a5e0 388 virtual void set_mark(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 389 {
davide.aliprandi@st.com 22:ba7f4131a5e0 390 L6470_SetParam((eL6470_RegId_t) L6470_MARK_ID, (uint32_t) L6470_GetParam((eL6470_RegId_t) L6470_ABS_POS_ID));
davide.aliprandi@st.com 22:ba7f4131a5e0 391 }
davide.aliprandi@st.com 22:ba7f4131a5e0 392
davide.aliprandi@st.com 22:ba7f4131a5e0 393 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 394 * @brief Setting the current position to be the marked position.
davide.aliprandi@st.com 22:ba7f4131a5e0 395 * @param position The given position.
davide.aliprandi@st.com 22:ba7f4131a5e0 396 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 397 */
davide.aliprandi@st.com 22:ba7f4131a5e0 398 virtual void set_mark(signed int position)
davide.aliprandi@st.com 22:ba7f4131a5e0 399 {
davide.aliprandi@st.com 22:ba7f4131a5e0 400 L6470_SetParam((eL6470_RegId_t) L6470_MARK_ID, (uint32_t) L6470_Position_2_AbsPos((int32_t) position));
davide.aliprandi@st.com 22:ba7f4131a5e0 401 }
davide.aliprandi@st.com 22:ba7f4131a5e0 402
davide.aliprandi@st.com 22:ba7f4131a5e0 403 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 404 * @brief Setting the maximum speed in pps.
davide.aliprandi@st.com 22:ba7f4131a5e0 405 * @param speed The maximum speed in pps.
davide.aliprandi@st.com 22:ba7f4131a5e0 406 * @retval "true" in case of success, "false" otherwise.
davide.aliprandi@st.com 22:ba7f4131a5e0 407 */
davide.aliprandi@st.com 22:ba7f4131a5e0 408 virtual bool set_max_speed(unsigned int speed)
davide.aliprandi@st.com 22:ba7f4131a5e0 409 {
davide.aliprandi@st.com 22:ba7f4131a5e0 410 L6470_SetParam((eL6470_RegId_t) L6470_MAX_SPEED_ID, (uint32_t) L6470_Step_s_2_MaxSpeed((float) speed));
davide.aliprandi@st.com 22:ba7f4131a5e0 411 return true;
davide.aliprandi@st.com 22:ba7f4131a5e0 412 }
davide.aliprandi@st.com 22:ba7f4131a5e0 413
davide.aliprandi@st.com 22:ba7f4131a5e0 414 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 415 * @brief Setting the minimum speed in pps.
davide.aliprandi@st.com 22:ba7f4131a5e0 416 * @param speed The minimum speed in pps.
davide.aliprandi@st.com 22:ba7f4131a5e0 417 * @retval "true" in case of success, "false" otherwise.
davide.aliprandi@st.com 22:ba7f4131a5e0 418 */
davide.aliprandi@st.com 22:ba7f4131a5e0 419 virtual bool set_min_speed(unsigned int speed)
davide.aliprandi@st.com 22:ba7f4131a5e0 420 {
davide.aliprandi@st.com 22:ba7f4131a5e0 421 L6470_SetParam((eL6470_RegId_t) L6470_MIN_SPEED_ID, (uint32_t) L6470_Step_s_2_MinSpeed((float) speed));
davide.aliprandi@st.com 22:ba7f4131a5e0 422 return true;
davide.aliprandi@st.com 22:ba7f4131a5e0 423 }
davide.aliprandi@st.com 22:ba7f4131a5e0 424
davide.aliprandi@st.com 22:ba7f4131a5e0 425 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 426 * @brief Setting the acceleration in pps^2.
davide.aliprandi@st.com 22:ba7f4131a5e0 427 * @param acceleration The acceleration in pps^2.
davide.aliprandi@st.com 22:ba7f4131a5e0 428 * @retval "true" in case of success, "false" otherwise.
davide.aliprandi@st.com 22:ba7f4131a5e0 429 */
davide.aliprandi@st.com 22:ba7f4131a5e0 430 virtual bool set_acceleration(unsigned int acceleration)
davide.aliprandi@st.com 22:ba7f4131a5e0 431 {
davide.aliprandi@st.com 22:ba7f4131a5e0 432 L6470_SetParam((eL6470_RegId_t) L6470_ACC_ID, (uint32_t) L6470_Step_s2_2_Acc((float) acceleration));
davide.aliprandi@st.com 22:ba7f4131a5e0 433 return true;
davide.aliprandi@st.com 22:ba7f4131a5e0 434 }
davide.aliprandi@st.com 22:ba7f4131a5e0 435
davide.aliprandi@st.com 22:ba7f4131a5e0 436 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 437 * @brief Setting the deceleration in pps^2.
davide.aliprandi@st.com 22:ba7f4131a5e0 438 * @param deceleration The deceleration in pps^2.
davide.aliprandi@st.com 22:ba7f4131a5e0 439 * @retval "true" in case of success, "false" otherwise.
davide.aliprandi@st.com 22:ba7f4131a5e0 440 */
davide.aliprandi@st.com 22:ba7f4131a5e0 441 virtual bool set_deceleration(unsigned int deceleration)
davide.aliprandi@st.com 22:ba7f4131a5e0 442 {
davide.aliprandi@st.com 22:ba7f4131a5e0 443 L6470_SetParam((eL6470_RegId_t) L6470_DEC_ID, (uint32_t) L6470_Step_s2_2_Dec((float) deceleration));
davide.aliprandi@st.com 22:ba7f4131a5e0 444 return true;
davide.aliprandi@st.com 22:ba7f4131a5e0 445 }
davide.aliprandi@st.com 22:ba7f4131a5e0 446
davide.aliprandi@st.com 22:ba7f4131a5e0 447 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 448 * @brief Setting the Step Mode.
davide.aliprandi@st.com 22:ba7f4131a5e0 449 * @param step_mode The Step Mode.
davide.aliprandi@st.com 22:ba7f4131a5e0 450 * @retval "true" in case of success, "false" otherwise.
davide.aliprandi@st.com 22:ba7f4131a5e0 451 * @warning Setting the step mode implies first disabling the power bridge through
davide.aliprandi@st.com 22:ba7f4131a5e0 452 * the soft_hiz() method.
davide.aliprandi@st.com 22:ba7f4131a5e0 453 * @warning Every time step mode is changed, the values of the home
davide.aliprandi@st.com 22:ba7f4131a5e0 454 * and mark positions lose meaning and are reset.
davide.aliprandi@st.com 22:ba7f4131a5e0 455 */
davide.aliprandi@st.com 22:ba7f4131a5e0 456 virtual bool set_step_mode(step_mode_t step_mode)
davide.aliprandi@st.com 22:ba7f4131a5e0 457 {
davide.aliprandi@st.com 22:ba7f4131a5e0 458 if ((eMotorStepMode_t) step_mode > MICROSTEP_1_128) {
davide.aliprandi@st.com 22:ba7f4131a5e0 459 return false;
davide.aliprandi@st.com 22:ba7f4131a5e0 460 }
davide.aliprandi@st.com 22:ba7f4131a5e0 461 soft_hiz();
davide.aliprandi@st.com 22:ba7f4131a5e0 462 L6470_SetParam((eL6470_RegId_t) L6470_STEP_MODE_ID, (eMotorStepMode_t) step_mode);
davide.aliprandi@st.com 22:ba7f4131a5e0 463 return true;
davide.aliprandi@st.com 22:ba7f4131a5e0 464 }
davide.aliprandi@st.com 22:ba7f4131a5e0 465
davide.aliprandi@st.com 22:ba7f4131a5e0 466 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 467 * @brief Going to a specified position through the shortest path.
davide.aliprandi@st.com 22:ba7f4131a5e0 468 * @param position The desired position.
davide.aliprandi@st.com 22:ba7f4131a5e0 469 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 470 */
davide.aliprandi@st.com 22:ba7f4131a5e0 471 virtual void go_to(signed int position)
davide.aliprandi@st.com 22:ba7f4131a5e0 472 {
davide.aliprandi@st.com 22:ba7f4131a5e0 473 L6470_GoTo((uint32_t) L6470_Position_2_AbsPos((int32_t) position));
davide.aliprandi@st.com 22:ba7f4131a5e0 474 }
davide.aliprandi@st.com 22:ba7f4131a5e0 475
davide.aliprandi@st.com 22:ba7f4131a5e0 476 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 477 * @brief Going to a specified position imposing the desired direction.
davide.aliprandi@st.com 22:ba7f4131a5e0 478 * @param position The desired position.
davide.aliprandi@st.com 22:ba7f4131a5e0 479 * @param direction The direction of rotation.
davide.aliprandi@st.com 22:ba7f4131a5e0 480 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 481 */
davide.aliprandi@st.com 22:ba7f4131a5e0 482 virtual void go_to(signed int position, direction_t direction)
davide.aliprandi@st.com 22:ba7f4131a5e0 483 {
davide.aliprandi@st.com 22:ba7f4131a5e0 484 L6470_GoToDir((eL6470_DirId_t) (direction == StepperMotor::FWD ? L6470_DIR_FWD_ID : L6470_DIR_REV_ID), (uint32_t) L6470_Position_2_AbsPos((int32_t) position));
davide.aliprandi@st.com 22:ba7f4131a5e0 485 }
davide.aliprandi@st.com 22:ba7f4131a5e0 486
davide.aliprandi@st.com 22:ba7f4131a5e0 487 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 488 * @brief Going to the home position.
davide.aliprandi@st.com 22:ba7f4131a5e0 489 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 490 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 491 */
davide.aliprandi@st.com 22:ba7f4131a5e0 492 virtual void go_home(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 493 {
davide.aliprandi@st.com 22:ba7f4131a5e0 494 L6470_GoHome();
davide.aliprandi@st.com 22:ba7f4131a5e0 495 }
Davidroid 0:92706998571a 496
davide.aliprandi@st.com 22:ba7f4131a5e0 497 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 498 * @brief Going to the marked position.
davide.aliprandi@st.com 22:ba7f4131a5e0 499 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 500 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 501 */
davide.aliprandi@st.com 22:ba7f4131a5e0 502 virtual void go_mark(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 503 {
davide.aliprandi@st.com 22:ba7f4131a5e0 504 L6470_GoMark();
davide.aliprandi@st.com 22:ba7f4131a5e0 505 }
davide.aliprandi@st.com 22:ba7f4131a5e0 506
davide.aliprandi@st.com 22:ba7f4131a5e0 507 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 508 * @brief Running at the given speed imposing the desired direction until
davide.aliprandi@st.com 22:ba7f4131a5e0 509 * an external switch turn-on event occurs.
davide.aliprandi@st.com 22:ba7f4131a5e0 510 * @param action The identifier of the action about the absolute position.
davide.aliprandi@st.com 22:ba7f4131a5e0 511 * @param position The desired position.
davide.aliprandi@st.com 22:ba7f4131a5e0 512 * @param speed The speed value in pps.
davide.aliprandi@st.com 22:ba7f4131a5e0 513 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 514 * @note The identifier of the action about the absolute position can be
davide.aliprandi@st.com 22:ba7f4131a5e0 515 * one of the following:
davide.aliprandi@st.com 22:ba7f4131a5e0 516 * + L6470_ACT_RST_ID: the absolute position is reset;
davide.aliprandi@st.com 22:ba7f4131a5e0 517 * + L6470_ACT_CPY_ID: the absolute position is set as the marked position.
davide.aliprandi@st.com 22:ba7f4131a5e0 518 */
davide.aliprandi@st.com 22:ba7f4131a5e0 519 virtual void go_until(eL6470_ActId_t action, direction_t direction, unsigned int speed)
davide.aliprandi@st.com 22:ba7f4131a5e0 520 {
davide.aliprandi@st.com 22:ba7f4131a5e0 521 L6470_GoUntil((eL6470_ActId_t) action, (eL6470_DirId_t) (direction == StepperMotor::FWD ? L6470_DIR_FWD_ID : L6470_DIR_REV_ID), (unsigned int) L6470_Step_s_2_Speed((float) speed));
davide.aliprandi@st.com 22:ba7f4131a5e0 522 }
davide.aliprandi@st.com 22:ba7f4131a5e0 523
davide.aliprandi@st.com 22:ba7f4131a5e0 524 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 525 * @brief Running towards a specified direction.
davide.aliprandi@st.com 22:ba7f4131a5e0 526 * @param direction The direction of rotation.
davide.aliprandi@st.com 22:ba7f4131a5e0 527 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 528 */
davide.aliprandi@st.com 22:ba7f4131a5e0 529 virtual void run(direction_t direction)
davide.aliprandi@st.com 22:ba7f4131a5e0 530 {
davide.aliprandi@st.com 22:ba7f4131a5e0 531 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));
davide.aliprandi@st.com 22:ba7f4131a5e0 532 }
davide.aliprandi@st.com 22:ba7f4131a5e0 533
davide.aliprandi@st.com 22:ba7f4131a5e0 534 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 535 * @brief Running towards a specified direction at the given speed.
davide.aliprandi@st.com 22:ba7f4131a5e0 536 * @param direction The direction of rotation.
davide.aliprandi@st.com 22:ba7f4131a5e0 537 * @param speed The speed value in pps.
davide.aliprandi@st.com 22:ba7f4131a5e0 538 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 539 */
davide.aliprandi@st.com 22:ba7f4131a5e0 540 virtual void run(direction_t direction, unsigned int speed)
davide.aliprandi@st.com 22:ba7f4131a5e0 541 {
davide.aliprandi@st.com 22:ba7f4131a5e0 542 L6470_Run((eL6470_DirId_t) (direction == StepperMotor::FWD ? L6470_DIR_FWD_ID : L6470_DIR_REV_ID), (unsigned int) L6470_Step_s_2_Speed((float) speed));
davide.aliprandi@st.com 22:ba7f4131a5e0 543 }
davide.aliprandi@st.com 22:ba7f4131a5e0 544
davide.aliprandi@st.com 22:ba7f4131a5e0 545 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 546 * @brief Moving towards a specified direction for a certain number of steps.
davide.aliprandi@st.com 22:ba7f4131a5e0 547 * @param direction The direction of rotation.
davide.aliprandi@st.com 22:ba7f4131a5e0 548 * @param steps The desired number of steps.
davide.aliprandi@st.com 22:ba7f4131a5e0 549 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 550 */
davide.aliprandi@st.com 22:ba7f4131a5e0 551 virtual void move(direction_t direction, unsigned int steps)
davide.aliprandi@st.com 22:ba7f4131a5e0 552 {
davide.aliprandi@st.com 22:ba7f4131a5e0 553 L6470_Move((eL6470_DirId_t) (direction == StepperMotor::FWD ? L6470_DIR_FWD_ID : L6470_DIR_REV_ID), (unsigned int) steps);
davide.aliprandi@st.com 22:ba7f4131a5e0 554 }
davide.aliprandi@st.com 22:ba7f4131a5e0 555
davide.aliprandi@st.com 22:ba7f4131a5e0 556 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 557 * @brief Stopping the motor through an immediate deceleration up to zero speed.
davide.aliprandi@st.com 22:ba7f4131a5e0 558 * The used deceleration value is the one stored in the "DEC" register.
davide.aliprandi@st.com 22:ba7f4131a5e0 559 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 560 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 561 */
davide.aliprandi@st.com 22:ba7f4131a5e0 562 virtual void soft_stop(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 563 {
davide.aliprandi@st.com 22:ba7f4131a5e0 564 L6470_SoftStop();
davide.aliprandi@st.com 22:ba7f4131a5e0 565 }
davide.aliprandi@st.com 22:ba7f4131a5e0 566
davide.aliprandi@st.com 22:ba7f4131a5e0 567 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 568 * @brief Stopping the motor through an immediate infinite deceleration.
davide.aliprandi@st.com 22:ba7f4131a5e0 569 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 570 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 571 */
davide.aliprandi@st.com 22:ba7f4131a5e0 572 virtual void hard_stop(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 573 {
davide.aliprandi@st.com 22:ba7f4131a5e0 574 L6470_HardStop();
davide.aliprandi@st.com 22:ba7f4131a5e0 575 }
davide.aliprandi@st.com 22:ba7f4131a5e0 576
davide.aliprandi@st.com 22:ba7f4131a5e0 577 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 578 * @brief Disabling the power bridge after performing a deceleration to zero.
davide.aliprandi@st.com 22:ba7f4131a5e0 579 * The used deceleration value is the one stored in the "DEC" register.
davide.aliprandi@st.com 22:ba7f4131a5e0 580 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 581 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 582 */
davide.aliprandi@st.com 22:ba7f4131a5e0 583 virtual void soft_hiz(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 584 {
davide.aliprandi@st.com 22:ba7f4131a5e0 585 L6470_soft_hiz();
davide.aliprandi@st.com 22:ba7f4131a5e0 586 }
davide.aliprandi@st.com 22:ba7f4131a5e0 587
davide.aliprandi@st.com 22:ba7f4131a5e0 588 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 589 * @brief Disabling the power bridge immediately.
davide.aliprandi@st.com 22:ba7f4131a5e0 590 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 591 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 592 */
davide.aliprandi@st.com 22:ba7f4131a5e0 593 virtual void hard_hiz(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 594 {
davide.aliprandi@st.com 22:ba7f4131a5e0 595 L6470_HardHiZ();
davide.aliprandi@st.com 22:ba7f4131a5e0 596 }
davide.aliprandi@st.com 22:ba7f4131a5e0 597
davide.aliprandi@st.com 22:ba7f4131a5e0 598 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 599 * @brief Waiting while the motor is active.
davide.aliprandi@st.com 22:ba7f4131a5e0 600 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 601 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 602 */
davide.aliprandi@st.com 22:ba7f4131a5e0 603 virtual void wait_while_active(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 604 {
davide.aliprandi@st.com 22:ba7f4131a5e0 605 while (L6470_CheckStatusRegisterFlag(BUSY_ID) == 0);
davide.aliprandi@st.com 22:ba7f4131a5e0 606 }
davide.aliprandi@st.com 22:ba7f4131a5e0 607
davide.aliprandi@st.com 22:ba7f4131a5e0 608 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 609 * @brief Switching to step-clock mode.
davide.aliprandi@st.com 22:ba7f4131a5e0 610 * @param direction The direction of rotation.
davide.aliprandi@st.com 22:ba7f4131a5e0 611 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 612 * @warning Setting the step-clock mode implies first disabling the power bridge through
davide.aliprandi@st.com 22:ba7f4131a5e0 613 * the soft_hiz() method.
davide.aliprandi@st.com 22:ba7f4131a5e0 614 */
davide.aliprandi@st.com 22:ba7f4131a5e0 615 virtual void step_clock(direction_t direction)
davide.aliprandi@st.com 22:ba7f4131a5e0 616 {
davide.aliprandi@st.com 22:ba7f4131a5e0 617 soft_hiz();
davide.aliprandi@st.com 22:ba7f4131a5e0 618 L6470_StepClock((eL6470_DirId_t) (direction == StepperMotor::FWD ? L6470_DIR_FWD_ID : L6470_DIR_REV_ID));
davide.aliprandi@st.com 22:ba7f4131a5e0 619 }
davide.aliprandi@st.com 22:ba7f4131a5e0 620
davide.aliprandi@st.com 22:ba7f4131a5e0 621 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 622 * @brief Doing a motion at minimum speed imposing a specified direction
davide.aliprandi@st.com 22:ba7f4131a5e0 623 * until the SW is released.
davide.aliprandi@st.com 22:ba7f4131a5e0 624 * @param action The identifier of the action about the absolute position.
davide.aliprandi@st.com 22:ba7f4131a5e0 625 * @param direction The direction of rotation.
davide.aliprandi@st.com 22:ba7f4131a5e0 626 * @note The identifier of the action about the absolute position can be
davide.aliprandi@st.com 22:ba7f4131a5e0 627 * one of the following:
davide.aliprandi@st.com 22:ba7f4131a5e0 628 * + L6470_ACT_RST_ID: the absolute position is reset;
davide.aliprandi@st.com 22:ba7f4131a5e0 629 * + L6470_ACT_CPY_ID: the absolute position is set as the marked position.
davide.aliprandi@st.com 22:ba7f4131a5e0 630 */
davide.aliprandi@st.com 22:ba7f4131a5e0 631 virtual void release_sw(eL6470_ActId_t action, direction_t direction)
davide.aliprandi@st.com 22:ba7f4131a5e0 632 {
davide.aliprandi@st.com 22:ba7f4131a5e0 633 L6470_ReleaseSW((eL6470_ActId_t) action, (eL6470_DirId_t) (direction == StepperMotor::FWD ? L6470_DIR_FWD_ID : L6470_DIR_REV_ID));
davide.aliprandi@st.com 22:ba7f4131a5e0 634 }
davide.aliprandi@st.com 22:ba7f4131a5e0 635
davide.aliprandi@st.com 22:ba7f4131a5e0 636 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 637 * @brief Resetting the device to power-up conditions.
davide.aliprandi@st.com 22:ba7f4131a5e0 638 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 639 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 640 */
davide.aliprandi@st.com 22:ba7f4131a5e0 641 virtual void reset_device(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 642 {
davide.aliprandi@st.com 22:ba7f4131a5e0 643 L6470_ResetDevice();
davide.aliprandi@st.com 22:ba7f4131a5e0 644 }
davide.aliprandi@st.com 22:ba7f4131a5e0 645
davide.aliprandi@st.com 22:ba7f4131a5e0 646 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 647 * @brief Preparing the command to get the status.
davide.aliprandi@st.com 22:ba7f4131a5e0 648 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 649 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 650 * @note The command will be sent by issuing "perform_action()".
davide.aliprandi@st.com 22:ba7f4131a5e0 651 */
davide.aliprandi@st.com 22:ba7f4131a5e0 652 virtual void prepare_get_status(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 653 {
davide.aliprandi@st.com 22:ba7f4131a5e0 654 L6470_PrepareGetStatus();
davide.aliprandi@st.com 22:ba7f4131a5e0 655 prepared_action = PREPARED_NO_ACTION;
davide.aliprandi@st.com 22:ba7f4131a5e0 656 }
Davidroid 0:92706998571a 657
davide.aliprandi@st.com 22:ba7f4131a5e0 658 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 659 * @brief Preparing the command to get a parameter.
davide.aliprandi@st.com 22:ba7f4131a5e0 660 * @param parameter A parameter's register address.
davide.aliprandi@st.com 22:ba7f4131a5e0 661 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 662 * @note The command will be sent by issuing "perform_action()".
davide.aliprandi@st.com 22:ba7f4131a5e0 663 * The parameter can be one of the following:
davide.aliprandi@st.com 22:ba7f4131a5e0 664 * + L6470_ABS_POS_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 665 * + L6470_EL_POS_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 666 * + L6470_MARK_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 667 * + L6470_SPEED_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 668 * + L6470_ACC_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 669 * + L6470_DEC_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 670 * + L6470_MAX_SPEED_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 671 * + L6470_MIN_SPEED_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 672 * + L6470_FS_SPD_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 673 * + L6470_KVAL_HOLD_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 674 * + L6470_KVAL_RUN_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 675 * + L6470_KVAL_ACC_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 676 * + L6470_KVAL_DEC_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 677 * + L6470_INT_SPEED_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 678 * + L6470_ST_SLP_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 679 * + L6470_FN_SLP_ACC_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 680 * + L6470_FN_SLP_DEC_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 681 * + L6470_K_THERM_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 682 * + L6470_ADC_OUT_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 683 * + L6470_OCD_TH_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 684 * + L6470_STALL_TH_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 685 * + L6470_STEP_MODE_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 686 * + L6470_ALARM_EN_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 687 * + L6470_CONFIG_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 688 * + L6470_STATUS_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 689 */
davide.aliprandi@st.com 22:ba7f4131a5e0 690 virtual void prepare_get_parameter(unsigned int parameter)
davide.aliprandi@st.com 22:ba7f4131a5e0 691 {
davide.aliprandi@st.com 22:ba7f4131a5e0 692 L6470_PrepareGetParam((eL6470_RegId_t) parameter);
davide.aliprandi@st.com 22:ba7f4131a5e0 693 prepared_action = PREPARED_NO_ACTION;
davide.aliprandi@st.com 22:ba7f4131a5e0 694 }
davide.aliprandi@st.com 22:ba7f4131a5e0 695
davide.aliprandi@st.com 22:ba7f4131a5e0 696 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 697 * @brief Preparing the command to get the position.
davide.aliprandi@st.com 22:ba7f4131a5e0 698 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 699 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 700 * @note The command will be sent by issuing "perform_action()".
davide.aliprandi@st.com 22:ba7f4131a5e0 701 */
davide.aliprandi@st.com 22:ba7f4131a5e0 702 virtual void prepare_get_position(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 703 {
davide.aliprandi@st.com 22:ba7f4131a5e0 704 L6470_PrepareGetParam((eL6470_RegId_t) L6470_ABS_POS_ID);
davide.aliprandi@st.com 22:ba7f4131a5e0 705 prepared_action = PREPARED_GET_POSITION;
davide.aliprandi@st.com 22:ba7f4131a5e0 706 }
davide.aliprandi@st.com 22:ba7f4131a5e0 707
davide.aliprandi@st.com 22:ba7f4131a5e0 708 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 709 * @brief Preparing the command to get the marked position.
davide.aliprandi@st.com 22:ba7f4131a5e0 710 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 711 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 712 * @note The command will be sent by issuing "perform_action()".
davide.aliprandi@st.com 22:ba7f4131a5e0 713 */
davide.aliprandi@st.com 22:ba7f4131a5e0 714 virtual void prepare_get_mark(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 715 {
davide.aliprandi@st.com 22:ba7f4131a5e0 716 L6470_PrepareGetParam((eL6470_RegId_t) L6470_MARK_ID);
davide.aliprandi@st.com 22:ba7f4131a5e0 717 prepared_action = PREPARED_GET_MARK;
davide.aliprandi@st.com 22:ba7f4131a5e0 718 }
davide.aliprandi@st.com 22:ba7f4131a5e0 719
davide.aliprandi@st.com 22:ba7f4131a5e0 720 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 721 * @brief Preparing the command to get the current speed in pps.
davide.aliprandi@st.com 22:ba7f4131a5e0 722 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 723 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 724 * @note The command will be sent by issuing "perform_action()".
davide.aliprandi@st.com 22:ba7f4131a5e0 725 */
davide.aliprandi@st.com 22:ba7f4131a5e0 726 virtual void prepare_get_speed(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 727 {
davide.aliprandi@st.com 22:ba7f4131a5e0 728 L6470_PrepareGetParam((eL6470_RegId_t) L6470_SPEED_ID);
davide.aliprandi@st.com 22:ba7f4131a5e0 729 prepared_action = PREPARED_GET_SPEED;
davide.aliprandi@st.com 22:ba7f4131a5e0 730 }
davide.aliprandi@st.com 22:ba7f4131a5e0 731
davide.aliprandi@st.com 22:ba7f4131a5e0 732 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 733 * @brief Preparing the command to get the maximum speed in pps.
davide.aliprandi@st.com 22:ba7f4131a5e0 734 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 735 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 736 * @note The command will be sent by issuing "perform_action()".
davide.aliprandi@st.com 22:ba7f4131a5e0 737 */
davide.aliprandi@st.com 22:ba7f4131a5e0 738 virtual void prepare_get_max_speed(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 739 {
davide.aliprandi@st.com 22:ba7f4131a5e0 740 L6470_PrepareGetParam((eL6470_RegId_t) L6470_MAX_SPEED_ID);
davide.aliprandi@st.com 22:ba7f4131a5e0 741 prepared_action = PREPARED_GET_MAX_SPEED;
davide.aliprandi@st.com 22:ba7f4131a5e0 742 }
davide.aliprandi@st.com 22:ba7f4131a5e0 743
davide.aliprandi@st.com 22:ba7f4131a5e0 744 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 745 * @brief Preparing the command to get the minimum speed in pps.
davide.aliprandi@st.com 22:ba7f4131a5e0 746 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 747 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 748 * @note The command will be sent by issuing "perform_action()".
davide.aliprandi@st.com 22:ba7f4131a5e0 749 */
davide.aliprandi@st.com 22:ba7f4131a5e0 750 virtual void prepare_get_min_speed(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 751 {
davide.aliprandi@st.com 22:ba7f4131a5e0 752 L6470_PrepareGetParam((eL6470_RegId_t) L6470_MIN_SPEED_ID);
davide.aliprandi@st.com 22:ba7f4131a5e0 753 prepared_action = PREPARED_GET_MIN_SPEED;
davide.aliprandi@st.com 22:ba7f4131a5e0 754 }
Davidroid 0:92706998571a 755
davide.aliprandi@st.com 22:ba7f4131a5e0 756 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 757 * @brief Preparing the command to get the acceleration in pps^2.
davide.aliprandi@st.com 22:ba7f4131a5e0 758 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 759 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 760 * @note The command will be sent by issuing "perform_action()".
davide.aliprandi@st.com 22:ba7f4131a5e0 761 */
davide.aliprandi@st.com 22:ba7f4131a5e0 762 virtual void prepare_get_acceleration(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 763 {
davide.aliprandi@st.com 22:ba7f4131a5e0 764 L6470_PrepareGetParam((eL6470_RegId_t) L6470_ACC_ID);
davide.aliprandi@st.com 22:ba7f4131a5e0 765 prepared_action = PREPARED_GET_ACCELERATION;
davide.aliprandi@st.com 22:ba7f4131a5e0 766 }
davide.aliprandi@st.com 22:ba7f4131a5e0 767
davide.aliprandi@st.com 22:ba7f4131a5e0 768 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 769 * @brief Preparing the command to get the deceleration in pps^2.
davide.aliprandi@st.com 22:ba7f4131a5e0 770 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 771 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 772 * @note The command will be sent by issuing "perform_action()".
davide.aliprandi@st.com 22:ba7f4131a5e0 773 */
davide.aliprandi@st.com 22:ba7f4131a5e0 774 virtual void prepare_get_deceleration(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 775 {
davide.aliprandi@st.com 22:ba7f4131a5e0 776 L6470_PrepareGetParam((eL6470_RegId_t) L6470_DEC_ID);
davide.aliprandi@st.com 22:ba7f4131a5e0 777 prepared_action = PREPARED_GET_DECELERATION;
davide.aliprandi@st.com 22:ba7f4131a5e0 778 }
davide.aliprandi@st.com 22:ba7f4131a5e0 779
davide.aliprandi@st.com 22:ba7f4131a5e0 780 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 781 * @brief Preparing the command to get the direction of rotation.
davide.aliprandi@st.com 22:ba7f4131a5e0 782 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 783 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 784 * @note The command will be sent by issuing "perform_action()".
davide.aliprandi@st.com 22:ba7f4131a5e0 785 */
davide.aliprandi@st.com 22:ba7f4131a5e0 786 virtual void prepare_get_direction(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 787 {
davide.aliprandi@st.com 22:ba7f4131a5e0 788 if (!L6470_DaisyChain_HalfPrepared) {
davide.aliprandi@st.com 22:ba7f4131a5e0 789 /* To avoid deleting the previous entered command. */
davide.aliprandi@st.com 22:ba7f4131a5e0 790 L6470_DaisyChain_HalfPrepared = ONE_F;
davide.aliprandi@st.com 22:ba7f4131a5e0 791 /* Resetting commands. */
davide.aliprandi@st.com 22:ba7f4131a5e0 792 L6470_ResetAppCmdPkg(L6470_AppCmdPkg);
davide.aliprandi@st.com 22:ba7f4131a5e0 793 }
davide.aliprandi@st.com 22:ba7f4131a5e0 794 prepared_action = PREPARED_GET_DIRECTION;
davide.aliprandi@st.com 22:ba7f4131a5e0 795 }
davide.aliprandi@st.com 22:ba7f4131a5e0 796
davide.aliprandi@st.com 22:ba7f4131a5e0 797 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 798 * @brief Preparing the command to set a parameter.
davide.aliprandi@st.com 22:ba7f4131a5e0 799 * @param parameter A parameter's register address.
davide.aliprandi@st.com 22:ba7f4131a5e0 800 * @param value The parameter's value.
davide.aliprandi@st.com 22:ba7f4131a5e0 801 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 802 * @note The command will be sent by issuing "perform_action()".
davide.aliprandi@st.com 22:ba7f4131a5e0 803 * The parameter can be one of the following:
davide.aliprandi@st.com 22:ba7f4131a5e0 804 * + L6470_ABS_POS_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 805 * + L6470_EL_POS_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 806 * + L6470_MARK_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 807 * + L6470_SPEED_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 808 * + L6470_ACC_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 809 * + L6470_DEC_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 810 * + L6470_MAX_SPEED_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 811 * + L6470_MIN_SPEED_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 812 * + L6470_FS_SPD_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 813 * + L6470_KVAL_HOLD_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 814 * + L6470_KVAL_RUN_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 815 * + L6470_KVAL_ACC_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 816 * + L6470_KVAL_DEC_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 817 * + L6470_INT_SPEED_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 818 * + L6470_ST_SLP_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 819 * + L6470_FN_SLP_ACC_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 820 * + L6470_FN_SLP_DEC_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 821 * + L6470_K_THERM_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 822 * + L6470_ADC_OUT_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 823 * + L6470_OCD_TH_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 824 * + L6470_STALL_TH_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 825 * + L6470_STEP_MODE_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 826 * + L6470_ALARM_EN_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 827 * + L6470_CONFIG_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 828 * + L6470_STATUS_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 829 * @warning Some registers can only be written in particular conditions (see L6470's datasheet).
davide.aliprandi@st.com 22:ba7f4131a5e0 830 * Any attempt to write one of those registers when the conditions are not satisfied
davide.aliprandi@st.com 22:ba7f4131a5e0 831 * causes the command to be ignored and the NOTPERF_CMD flag to rise at the end of the
davide.aliprandi@st.com 22:ba7f4131a5e0 832 * last argument byte. Any attempt to set an inexistent register (wrong address value)
davide.aliprandi@st.com 22:ba7f4131a5e0 833 * causes the command to be ignored and the WRONG_CMD flag to rise.
davide.aliprandi@st.com 22:ba7f4131a5e0 834 * For example, setting some parameters requires first to disable the power bridge;
davide.aliprandi@st.com 22:ba7f4131a5e0 835 * this can be done through the soft_hiz() method.
davide.aliprandi@st.com 22:ba7f4131a5e0 836 * They are the following:
davide.aliprandi@st.com 22:ba7f4131a5e0 837 * + L6470_ABS_POS_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 838 * + L6470_EL_POS_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 839 * + L6470_SPEED_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 840 * + L6470_ACC_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 841 * + L6470_DEC_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 842 * + L6470_MAX_SPEED_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 843 * + L6470_MIN_SPEED_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 844 * + L6470_INT_SPEED_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 845 * + L6470_ST_SLP_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 846 * + L6470_FN_SLP_ACC_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 847 * + L6470_FN_SLP_DEC_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 848 * + L6470_ADC_OUT_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 849 * + L6470_STEP_MODE_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 850 * + L6470_CONFIG_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 851 * + L6470_STATUS_ID
davide.aliprandi@st.com 22:ba7f4131a5e0 852 */
davide.aliprandi@st.com 22:ba7f4131a5e0 853 virtual void prepare_set_parameter(unsigned int parameter, unsigned int value)
davide.aliprandi@st.com 22:ba7f4131a5e0 854 {
davide.aliprandi@st.com 22:ba7f4131a5e0 855 L6470_PrepareSetParam((eL6470_RegId_t) parameter, (uint32_t) value);
davide.aliprandi@st.com 22:ba7f4131a5e0 856 prepared_action = PREPARED_NO_ACTION;
davide.aliprandi@st.com 22:ba7f4131a5e0 857 }
Davidroid 14:e614697ebf34 858
davide.aliprandi@st.com 22:ba7f4131a5e0 859 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 860 * @brief Preparing the command to set the current position to be
davide.aliprandi@st.com 22:ba7f4131a5e0 861 * the home position.
davide.aliprandi@st.com 22:ba7f4131a5e0 862 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 863 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 864 * @note The command will be sent by issuing "perform_action()".
davide.aliprandi@st.com 22:ba7f4131a5e0 865 */
davide.aliprandi@st.com 22:ba7f4131a5e0 866 virtual void prepare_set_home(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 867 {
davide.aliprandi@st.com 22:ba7f4131a5e0 868 L6470_PrepareResetPos();
davide.aliprandi@st.com 22:ba7f4131a5e0 869 prepared_action = PREPARED_NO_ACTION;
davide.aliprandi@st.com 22:ba7f4131a5e0 870 }
davide.aliprandi@st.com 22:ba7f4131a5e0 871
davide.aliprandi@st.com 22:ba7f4131a5e0 872 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 873 * @brief Preparing the command to set the current position to be
davide.aliprandi@st.com 22:ba7f4131a5e0 874 * the marked position.
davide.aliprandi@st.com 22:ba7f4131a5e0 875 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 876 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 877 * @note The command will be sent by issuing "perform_action()".
davide.aliprandi@st.com 22:ba7f4131a5e0 878 */
davide.aliprandi@st.com 22:ba7f4131a5e0 879 virtual void prepare_set_mark(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 880 {
davide.aliprandi@st.com 22:ba7f4131a5e0 881 /*
davide.aliprandi@st.com 22:ba7f4131a5e0 882 Set "0" now as marked position. This value will be replaced by the
davide.aliprandi@st.com 22:ba7f4131a5e0 883 actual position read at the time when the prepared actions will be
davide.aliprandi@st.com 22:ba7f4131a5e0 884 performed.
davide.aliprandi@st.com 22:ba7f4131a5e0 885 */
davide.aliprandi@st.com 22:ba7f4131a5e0 886 L6470_PrepareSetParam((eL6470_RegId_t) L6470_MARK_ID, 0);
davide.aliprandi@st.com 22:ba7f4131a5e0 887 prepared_action = PREPARED_SET_MARK;
davide.aliprandi@st.com 22:ba7f4131a5e0 888 }
davide.aliprandi@st.com 22:ba7f4131a5e0 889
davide.aliprandi@st.com 22:ba7f4131a5e0 890 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 891 * @brief Preparing the command to set the given position to be
davide.aliprandi@st.com 22:ba7f4131a5e0 892 * the marked position.
davide.aliprandi@st.com 22:ba7f4131a5e0 893 * @param position The given position.
davide.aliprandi@st.com 22:ba7f4131a5e0 894 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 895 * @note The command will be sent by issuing "perform_action()".
davide.aliprandi@st.com 22:ba7f4131a5e0 896 */
davide.aliprandi@st.com 22:ba7f4131a5e0 897 virtual void prepare_set_mark(signed int position)
davide.aliprandi@st.com 22:ba7f4131a5e0 898 {
davide.aliprandi@st.com 22:ba7f4131a5e0 899 L6470_PrepareSetParam((eL6470_RegId_t) L6470_MARK_ID, (uint32_t) L6470_Position_2_AbsPos((int32_t) position));
davide.aliprandi@st.com 22:ba7f4131a5e0 900 prepared_action = PREPARED_NO_ACTION;
davide.aliprandi@st.com 22:ba7f4131a5e0 901 }
davide.aliprandi@st.com 22:ba7f4131a5e0 902
davide.aliprandi@st.com 22:ba7f4131a5e0 903 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 904 * @brief Preparing the command to set the current speed in pps.
davide.aliprandi@st.com 22:ba7f4131a5e0 905 * @param speed The current speed in pps.
davide.aliprandi@st.com 22:ba7f4131a5e0 906 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 907 * @note The command will be sent by issuing "perform_action()".
davide.aliprandi@st.com 22:ba7f4131a5e0 908 */
davide.aliprandi@st.com 22:ba7f4131a5e0 909 virtual void prepare_set_speed(unsigned int speed)
davide.aliprandi@st.com 22:ba7f4131a5e0 910 {
davide.aliprandi@st.com 22:ba7f4131a5e0 911 L6470_PrepareSetParam((eL6470_RegId_t) L6470_SPEED_ID, (uint32_t) L6470_Step_s_2_Speed((float) speed));
davide.aliprandi@st.com 22:ba7f4131a5e0 912 prepared_action = PREPARED_NO_ACTION;
davide.aliprandi@st.com 22:ba7f4131a5e0 913 }
davide.aliprandi@st.com 22:ba7f4131a5e0 914
davide.aliprandi@st.com 22:ba7f4131a5e0 915 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 916 * @brief Preparing the command to set the maximum speed in pps.
davide.aliprandi@st.com 22:ba7f4131a5e0 917 * @param speed The maximum speed in pps.
davide.aliprandi@st.com 22:ba7f4131a5e0 918 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 919 * @note The command will be sent by issuing "perform_action()".
davide.aliprandi@st.com 22:ba7f4131a5e0 920 */
davide.aliprandi@st.com 22:ba7f4131a5e0 921 virtual void prepare_set_max_speed(unsigned int speed)
davide.aliprandi@st.com 22:ba7f4131a5e0 922 {
davide.aliprandi@st.com 22:ba7f4131a5e0 923 L6470_PrepareSetParam((eL6470_RegId_t) L6470_MAX_SPEED_ID, (uint32_t) L6470_Step_s_2_MaxSpeed((float) speed));
davide.aliprandi@st.com 22:ba7f4131a5e0 924 prepared_action = PREPARED_NO_ACTION;
davide.aliprandi@st.com 22:ba7f4131a5e0 925 }
davide.aliprandi@st.com 22:ba7f4131a5e0 926
davide.aliprandi@st.com 22:ba7f4131a5e0 927 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 928 * @brief Preparing the command to set the minimum speed in pps.
davide.aliprandi@st.com 22:ba7f4131a5e0 929 * @param speed The minimum speed in pps.
davide.aliprandi@st.com 22:ba7f4131a5e0 930 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 931 * @note The command will be sent by issuing "perform_action()".
davide.aliprandi@st.com 22:ba7f4131a5e0 932 */
davide.aliprandi@st.com 22:ba7f4131a5e0 933 virtual void prepare_set_min_speed(unsigned int speed)
davide.aliprandi@st.com 22:ba7f4131a5e0 934 {
davide.aliprandi@st.com 22:ba7f4131a5e0 935 L6470_PrepareSetParam((eL6470_RegId_t) L6470_MIN_SPEED_ID, (uint32_t) L6470_Step_s_2_MinSpeed((float) speed));
davide.aliprandi@st.com 22:ba7f4131a5e0 936 prepared_action = PREPARED_NO_ACTION;
davide.aliprandi@st.com 22:ba7f4131a5e0 937 }
davide.aliprandi@st.com 22:ba7f4131a5e0 938
davide.aliprandi@st.com 22:ba7f4131a5e0 939 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 940 * @brief Preparing the command to set the acceleration in pps^2.
davide.aliprandi@st.com 22:ba7f4131a5e0 941 * @param acceleration The acceleration in pps^2.
davide.aliprandi@st.com 22:ba7f4131a5e0 942 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 943 * @note The command will be sent by issuing "perform_action()".
davide.aliprandi@st.com 22:ba7f4131a5e0 944 */
davide.aliprandi@st.com 22:ba7f4131a5e0 945 virtual void prepare_set_acceleration(unsigned int acceleration)
davide.aliprandi@st.com 22:ba7f4131a5e0 946 {
davide.aliprandi@st.com 22:ba7f4131a5e0 947 L6470_PrepareSetParam((eL6470_RegId_t) L6470_ACC_ID, (uint32_t) L6470_Step_s2_2_Acc((float) acceleration));
davide.aliprandi@st.com 22:ba7f4131a5e0 948 prepared_action = PREPARED_NO_ACTION;
davide.aliprandi@st.com 22:ba7f4131a5e0 949 }
davide.aliprandi@st.com 22:ba7f4131a5e0 950
davide.aliprandi@st.com 22:ba7f4131a5e0 951 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 952 * @brief Preparing the command to set the deceleration in pps^2.
davide.aliprandi@st.com 22:ba7f4131a5e0 953 * @param deceleration The deceleration in pps^2.
davide.aliprandi@st.com 22:ba7f4131a5e0 954 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 955 * @note The command will be sent by issuing "perform_action()".
davide.aliprandi@st.com 22:ba7f4131a5e0 956 */
davide.aliprandi@st.com 22:ba7f4131a5e0 957 virtual void prepare_set_deceleration(unsigned int deceleration)
davide.aliprandi@st.com 22:ba7f4131a5e0 958 {
davide.aliprandi@st.com 22:ba7f4131a5e0 959 L6470_PrepareSetParam((eL6470_RegId_t) L6470_DEC_ID, (uint32_t) L6470_Step_s2_2_Dec((float) deceleration));
davide.aliprandi@st.com 22:ba7f4131a5e0 960 prepared_action = PREPARED_NO_ACTION;
davide.aliprandi@st.com 22:ba7f4131a5e0 961 }
davide.aliprandi@st.com 22:ba7f4131a5e0 962
davide.aliprandi@st.com 22:ba7f4131a5e0 963 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 964 * @brief Preparing the command to go to a specified position.
davide.aliprandi@st.com 22:ba7f4131a5e0 965 * @param position The desired position.
davide.aliprandi@st.com 22:ba7f4131a5e0 966 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 967 * @note The command will be sent by issuing "perform_action()".
davide.aliprandi@st.com 22:ba7f4131a5e0 968 */
davide.aliprandi@st.com 22:ba7f4131a5e0 969 virtual void prepare_go_to(signed int position)
davide.aliprandi@st.com 22:ba7f4131a5e0 970 {
davide.aliprandi@st.com 22:ba7f4131a5e0 971 L6470_PrepareGoTo((uint32_t) L6470_Position_2_AbsPos((int32_t) position));
davide.aliprandi@st.com 22:ba7f4131a5e0 972 prepared_action = PREPARED_NO_ACTION;
davide.aliprandi@st.com 22:ba7f4131a5e0 973 }
davide.aliprandi@st.com 22:ba7f4131a5e0 974
davide.aliprandi@st.com 22:ba7f4131a5e0 975 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 976 * @brief Preparing the command to go to a specified position
davide.aliprandi@st.com 22:ba7f4131a5e0 977 * imposing the desired direction.
davide.aliprandi@st.com 22:ba7f4131a5e0 978 * @param position The desired position.
davide.aliprandi@st.com 22:ba7f4131a5e0 979 * @param direction The direction of rotation.
davide.aliprandi@st.com 22:ba7f4131a5e0 980 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 981 * @note The command will be sent by issuing "perform_action()".
davide.aliprandi@st.com 22:ba7f4131a5e0 982 */
davide.aliprandi@st.com 22:ba7f4131a5e0 983 virtual void prepare_go_to(signed int position, direction_t direction)
davide.aliprandi@st.com 22:ba7f4131a5e0 984 {
davide.aliprandi@st.com 22:ba7f4131a5e0 985 L6470_PrepareGoToDir((eL6470_DirId_t) (direction == StepperMotor::FWD ? L6470_DIR_FWD_ID : L6470_DIR_REV_ID), (uint32_t) L6470_Position_2_AbsPos((int32_t) position));
davide.aliprandi@st.com 22:ba7f4131a5e0 986 prepared_action = PREPARED_NO_ACTION;
davide.aliprandi@st.com 22:ba7f4131a5e0 987 }
davide.aliprandi@st.com 22:ba7f4131a5e0 988
davide.aliprandi@st.com 22:ba7f4131a5e0 989 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 990 * @brief Preparing the command to go to the home position.
davide.aliprandi@st.com 22:ba7f4131a5e0 991 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 992 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 993 * @note The command will be sent by issuing "perform_action()".
davide.aliprandi@st.com 22:ba7f4131a5e0 994 */
davide.aliprandi@st.com 22:ba7f4131a5e0 995 virtual void prepare_go_home(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 996 {
davide.aliprandi@st.com 22:ba7f4131a5e0 997 L6470_PrepareGoHome();
davide.aliprandi@st.com 22:ba7f4131a5e0 998 prepared_action = PREPARED_NO_ACTION;
davide.aliprandi@st.com 22:ba7f4131a5e0 999 }
davide.aliprandi@st.com 22:ba7f4131a5e0 1000
davide.aliprandi@st.com 22:ba7f4131a5e0 1001 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 1002 * @brief Preparing the command to go to the marked position.
davide.aliprandi@st.com 22:ba7f4131a5e0 1003 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 1004 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 1005 * @note The command will be sent by issuing "perform_action()".
davide.aliprandi@st.com 22:ba7f4131a5e0 1006 */
davide.aliprandi@st.com 22:ba7f4131a5e0 1007 virtual void prepare_go_mark(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 1008 {
davide.aliprandi@st.com 22:ba7f4131a5e0 1009 L6470_PrepareGoMark();
davide.aliprandi@st.com 22:ba7f4131a5e0 1010 prepared_action = PREPARED_NO_ACTION;
davide.aliprandi@st.com 22:ba7f4131a5e0 1011 }
davide.aliprandi@st.com 22:ba7f4131a5e0 1012
davide.aliprandi@st.com 22:ba7f4131a5e0 1013 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 1014 * @brief Preparing the command to run at the given speed imposing the desired
davide.aliprandi@st.com 22:ba7f4131a5e0 1015 * direction until an external switch turn-on event occurs.
davide.aliprandi@st.com 22:ba7f4131a5e0 1016 * @param action The identifier of the action about the absolute position.
davide.aliprandi@st.com 22:ba7f4131a5e0 1017 * @param position The desired position.
davide.aliprandi@st.com 22:ba7f4131a5e0 1018 * @param speed The speed value in pps.
davide.aliprandi@st.com 22:ba7f4131a5e0 1019 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 1020 * @note The command will be sent by issuing "perform_action()".
davide.aliprandi@st.com 22:ba7f4131a5e0 1021 * The identifier of the action about the absolute position can be
davide.aliprandi@st.com 22:ba7f4131a5e0 1022 * one of the following:
davide.aliprandi@st.com 22:ba7f4131a5e0 1023 * + L6470_ACT_RST_ID: the absolute position is reset;
davide.aliprandi@st.com 22:ba7f4131a5e0 1024 * + L6470_ACT_CPY_ID: the absolute position is set as the marked position.
davide.aliprandi@st.com 22:ba7f4131a5e0 1025 */
davide.aliprandi@st.com 22:ba7f4131a5e0 1026 virtual void prepare_go_until(eL6470_ActId_t L6470_ActId, direction_t direction, unsigned int speed)
davide.aliprandi@st.com 22:ba7f4131a5e0 1027 {
davide.aliprandi@st.com 22:ba7f4131a5e0 1028 L6470_PrepareGoUntil((eL6470_ActId_t) L6470_ActId, (eL6470_DirId_t) (direction == StepperMotor::FWD ? L6470_DIR_FWD_ID : L6470_DIR_REV_ID), (unsigned int) L6470_Step_s_2_Speed((float) speed));
davide.aliprandi@st.com 22:ba7f4131a5e0 1029 prepared_action = PREPARED_NO_ACTION;
davide.aliprandi@st.com 22:ba7f4131a5e0 1030 }
davide.aliprandi@st.com 22:ba7f4131a5e0 1031
davide.aliprandi@st.com 22:ba7f4131a5e0 1032 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 1033 * @brief Preparing the command to run towards a specified direction
davide.aliprandi@st.com 22:ba7f4131a5e0 1034 * at the maximum speed.
davide.aliprandi@st.com 22:ba7f4131a5e0 1035 * @param direction The direction of rotation.
davide.aliprandi@st.com 22:ba7f4131a5e0 1036 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 1037 * @note The command will be sent by issuing "perform_action()".
davide.aliprandi@st.com 22:ba7f4131a5e0 1038 */
davide.aliprandi@st.com 22:ba7f4131a5e0 1039 virtual void prepare_run(direction_t direction)
davide.aliprandi@st.com 22:ba7f4131a5e0 1040 {
davide.aliprandi@st.com 22:ba7f4131a5e0 1041 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));
davide.aliprandi@st.com 22:ba7f4131a5e0 1042 prepared_action = PREPARED_NO_ACTION;
davide.aliprandi@st.com 22:ba7f4131a5e0 1043 }
davide.aliprandi@st.com 22:ba7f4131a5e0 1044
davide.aliprandi@st.com 22:ba7f4131a5e0 1045 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 1046 * @brief Preparing the command to run towards a specified direction
davide.aliprandi@st.com 22:ba7f4131a5e0 1047 * at the given speed.
davide.aliprandi@st.com 22:ba7f4131a5e0 1048 * @param direction The direction of rotation.
davide.aliprandi@st.com 22:ba7f4131a5e0 1049 * @param speed The speed value in pps.
davide.aliprandi@st.com 22:ba7f4131a5e0 1050 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 1051 * @note The command will be sent by issuing "perform_action()".
davide.aliprandi@st.com 22:ba7f4131a5e0 1052 */
davide.aliprandi@st.com 22:ba7f4131a5e0 1053 virtual void prepare_run(direction_t direction, unsigned int speed)
davide.aliprandi@st.com 22:ba7f4131a5e0 1054 {
davide.aliprandi@st.com 22:ba7f4131a5e0 1055 L6470_PrepareRun((eL6470_DirId_t) (direction == StepperMotor::FWD ? L6470_DIR_FWD_ID : L6470_DIR_REV_ID), (unsigned int) L6470_Step_s_2_Speed((float) speed));
davide.aliprandi@st.com 22:ba7f4131a5e0 1056 prepared_action = PREPARED_NO_ACTION;
davide.aliprandi@st.com 22:ba7f4131a5e0 1057 }
davide.aliprandi@st.com 22:ba7f4131a5e0 1058
davide.aliprandi@st.com 22:ba7f4131a5e0 1059 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 1060 * @brief Preparing the command to move towards a specified direction
davide.aliprandi@st.com 22:ba7f4131a5e0 1061 * for a certain number of steps.
davide.aliprandi@st.com 22:ba7f4131a5e0 1062 * @param direction The direction of rotation.
davide.aliprandi@st.com 22:ba7f4131a5e0 1063 * @param steps The desired number of steps.
davide.aliprandi@st.com 22:ba7f4131a5e0 1064 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 1065 * @note The command will be sent by issuing "perform_action()".
davide.aliprandi@st.com 22:ba7f4131a5e0 1066 */
davide.aliprandi@st.com 22:ba7f4131a5e0 1067 virtual void prepare_move(direction_t direction, unsigned int steps)
davide.aliprandi@st.com 22:ba7f4131a5e0 1068 {
davide.aliprandi@st.com 22:ba7f4131a5e0 1069 L6470_PrepareMove((eL6470_DirId_t) (direction == StepperMotor::FWD ? L6470_DIR_FWD_ID : L6470_DIR_REV_ID), (unsigned int) steps);
davide.aliprandi@st.com 22:ba7f4131a5e0 1070 prepared_action = PREPARED_NO_ACTION;
davide.aliprandi@st.com 22:ba7f4131a5e0 1071 }
davide.aliprandi@st.com 22:ba7f4131a5e0 1072
davide.aliprandi@st.com 22:ba7f4131a5e0 1073 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 1074 * @brief Preparing the command to stop the motor.
davide.aliprandi@st.com 22:ba7f4131a5e0 1075 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 1076 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 1077 * @note The command will be sent by issuing "perform_action()".
davide.aliprandi@st.com 22:ba7f4131a5e0 1078 */
davide.aliprandi@st.com 22:ba7f4131a5e0 1079 virtual void prepare_soft_stop(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 1080 {
davide.aliprandi@st.com 22:ba7f4131a5e0 1081 L6470_PrepareSoftStop();
davide.aliprandi@st.com 22:ba7f4131a5e0 1082 prepared_action = PREPARED_NO_ACTION;
davide.aliprandi@st.com 22:ba7f4131a5e0 1083 }
davide.aliprandi@st.com 22:ba7f4131a5e0 1084
davide.aliprandi@st.com 22:ba7f4131a5e0 1085 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 1086 * @brief Preparing the command to stop the motor and disabling the power bridge.
davide.aliprandi@st.com 22:ba7f4131a5e0 1087 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 1088 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 1089 * @note The command will be sent by issuing "perform_action()".
davide.aliprandi@st.com 22:ba7f4131a5e0 1090 */
davide.aliprandi@st.com 22:ba7f4131a5e0 1091 virtual void prepare_hard_stop(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 1092 {
davide.aliprandi@st.com 22:ba7f4131a5e0 1093 L6470_PrepareHardStop();
davide.aliprandi@st.com 22:ba7f4131a5e0 1094 prepared_action = PREPARED_NO_ACTION;
davide.aliprandi@st.com 22:ba7f4131a5e0 1095 }
davide.aliprandi@st.com 22:ba7f4131a5e0 1096
davide.aliprandi@st.com 22:ba7f4131a5e0 1097 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 1098 * @brief Preparing the command to disable the power bridge after performing
davide.aliprandi@st.com 22:ba7f4131a5e0 1099 * a deceleration to zero.
davide.aliprandi@st.com 22:ba7f4131a5e0 1100 * The used deceleration value is the one stored in the "DEC" register.
davide.aliprandi@st.com 22:ba7f4131a5e0 1101 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 1102 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 1103 * @note The command will be sent by issuing "perform_action()".
davide.aliprandi@st.com 22:ba7f4131a5e0 1104 */
davide.aliprandi@st.com 22:ba7f4131a5e0 1105 virtual void prepare_soft_hiz(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 1106 {
davide.aliprandi@st.com 22:ba7f4131a5e0 1107 L6470_PrepareSoftHiZ();
davide.aliprandi@st.com 22:ba7f4131a5e0 1108 prepared_action = PREPARED_NO_ACTION;
davide.aliprandi@st.com 22:ba7f4131a5e0 1109 }
davide.aliprandi@st.com 22:ba7f4131a5e0 1110
davide.aliprandi@st.com 22:ba7f4131a5e0 1111 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 1112 * @brief Preparing the command to disable the power bridge immediately.
davide.aliprandi@st.com 22:ba7f4131a5e0 1113 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 1114 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 1115 * @note The command will be sent by issuing "perform_action()".
davide.aliprandi@st.com 22:ba7f4131a5e0 1116 */
davide.aliprandi@st.com 22:ba7f4131a5e0 1117 virtual void prepare_hard_hiz(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 1118 {
davide.aliprandi@st.com 22:ba7f4131a5e0 1119 L6470_PrepareHardHiZ();
davide.aliprandi@st.com 22:ba7f4131a5e0 1120 prepared_action = PREPARED_NO_ACTION;
davide.aliprandi@st.com 22:ba7f4131a5e0 1121 }
davide.aliprandi@st.com 22:ba7f4131a5e0 1122
davide.aliprandi@st.com 22:ba7f4131a5e0 1123 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 1124 * @brief Preparing the command to switch to step-clock mode.
davide.aliprandi@st.com 22:ba7f4131a5e0 1125 * @param direction The direction of rotation.
davide.aliprandi@st.com 22:ba7f4131a5e0 1126 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 1127 * @warning Setting the step-clock mode requires an explicit action by the user to first
davide.aliprandi@st.com 22:ba7f4131a5e0 1128 * disable the power bridge through the soft_hiz() method.
davide.aliprandi@st.com 22:ba7f4131a5e0 1129 * @note The command will be sent by issuing "perform_action()".
davide.aliprandi@st.com 22:ba7f4131a5e0 1130 */
davide.aliprandi@st.com 22:ba7f4131a5e0 1131 virtual void prepare_step_clock(direction_t direction)
davide.aliprandi@st.com 22:ba7f4131a5e0 1132 {
davide.aliprandi@st.com 22:ba7f4131a5e0 1133 L6470_PrepareStepClock((eL6470_DirId_t) (direction == StepperMotor::FWD ? L6470_DIR_FWD_ID : L6470_DIR_REV_ID));
davide.aliprandi@st.com 22:ba7f4131a5e0 1134 prepared_action = PREPARED_NO_ACTION;
davide.aliprandi@st.com 22:ba7f4131a5e0 1135 }
davide.aliprandi@st.com 22:ba7f4131a5e0 1136
davide.aliprandi@st.com 22:ba7f4131a5e0 1137 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 1138 * @brief Preparing the command to do a motion at minimum speed
davide.aliprandi@st.com 22:ba7f4131a5e0 1139 * imposing a specified direction until the SW is released.
davide.aliprandi@st.com 22:ba7f4131a5e0 1140 * @param action The identifier of the action about the absolute position.
davide.aliprandi@st.com 22:ba7f4131a5e0 1141 * @param direction The direction of rotation.
davide.aliprandi@st.com 22:ba7f4131a5e0 1142 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 1143 * @note The command will be sent by issuing "perform_action()".
davide.aliprandi@st.com 22:ba7f4131a5e0 1144 * The identifier of the action about the absolute position can be
davide.aliprandi@st.com 22:ba7f4131a5e0 1145 * one of the following:
davide.aliprandi@st.com 22:ba7f4131a5e0 1146 * + L6470_ACT_RST_ID: the absolute position is reset;
davide.aliprandi@st.com 22:ba7f4131a5e0 1147 * + L6470_ACT_CPY_ID: the absolute position is set as the marked position.
davide.aliprandi@st.com 22:ba7f4131a5e0 1148 */
davide.aliprandi@st.com 22:ba7f4131a5e0 1149 virtual void prepare_release_sw(eL6470_ActId_t action, direction_t direction)
davide.aliprandi@st.com 22:ba7f4131a5e0 1150 {
davide.aliprandi@st.com 22:ba7f4131a5e0 1151 L6470_PrepareReleaseSW((eL6470_ActId_t) action, (eL6470_DirId_t) (direction == StepperMotor::FWD ? L6470_DIR_FWD_ID : L6470_DIR_REV_ID));
davide.aliprandi@st.com 22:ba7f4131a5e0 1152 prepared_action = PREPARED_NO_ACTION;
davide.aliprandi@st.com 22:ba7f4131a5e0 1153 }
davide.aliprandi@st.com 22:ba7f4131a5e0 1154
davide.aliprandi@st.com 22:ba7f4131a5e0 1155 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 1156 * @brief Preparing the command to reset the device to power-up conditions.
davide.aliprandi@st.com 22:ba7f4131a5e0 1157 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 1158 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 1159 * @note The command will be sent by issuing "perform_action()".
davide.aliprandi@st.com 22:ba7f4131a5e0 1160 */
davide.aliprandi@st.com 22:ba7f4131a5e0 1161 virtual void prepare_reset_device(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 1162 {
davide.aliprandi@st.com 22:ba7f4131a5e0 1163 L6470_PrepareResetDevice();
davide.aliprandi@st.com 22:ba7f4131a5e0 1164 prepared_action = PREPARED_NO_ACTION;
davide.aliprandi@st.com 22:ba7f4131a5e0 1165 }
davide.aliprandi@st.com 22:ba7f4131a5e0 1166
davide.aliprandi@st.com 22:ba7f4131a5e0 1167 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 1168 * @brief Performing all the actions prepared on the components
davide.aliprandi@st.com 22:ba7f4131a5e0 1169 * of the daisy-chain.
davide.aliprandi@st.com 22:ba7f4131a5e0 1170 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 1171 * @retval The raw data returned by the components.
davide.aliprandi@st.com 22:ba7f4131a5e0 1172 */
davide.aliprandi@st.com 22:ba7f4131a5e0 1173 uint8_t* perform_prepared_actions(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 1174 {
davide.aliprandi@st.com 22:ba7f4131a5e0 1175 return L6470_PerformPreparedApplicationCommand();
davide.aliprandi@st.com 22:ba7f4131a5e0 1176 }
davide.aliprandi@st.com 22:ba7f4131a5e0 1177
davide.aliprandi@st.com 22:ba7f4131a5e0 1178 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 1179 * @brief Getting the prepared action.
davide.aliprandi@st.com 22:ba7f4131a5e0 1180 * @param None
davide.aliprandi@st.com 22:ba7f4131a5e0 1181 * @retval The prepared action.
davide.aliprandi@st.com 22:ba7f4131a5e0 1182 */
davide.aliprandi@st.com 22:ba7f4131a5e0 1183 prepared_action_t get_prepared_action(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 1184 {
davide.aliprandi@st.com 22:ba7f4131a5e0 1185 return prepared_action;
davide.aliprandi@st.com 22:ba7f4131a5e0 1186 }
davide.aliprandi@st.com 22:ba7f4131a5e0 1187
davide.aliprandi@st.com 22:ba7f4131a5e0 1188 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 1189 * @brief Converting the raw data received by the component according to
davide.aliprandi@st.com 22:ba7f4131a5e0 1190 * the action performed on it.
davide.aliprandi@st.com 22:ba7f4131a5e0 1191 * @param raw_data The received raw data.
davide.aliprandi@st.com 22:ba7f4131a5e0 1192 * @retval The result of the action performed.
davide.aliprandi@st.com 22:ba7f4131a5e0 1193 */
davide.aliprandi@st.com 22:ba7f4131a5e0 1194 int32_t get_result(uint8_t *raw_data)
davide.aliprandi@st.com 22:ba7f4131a5e0 1195 {
davide.aliprandi@st.com 22:ba7f4131a5e0 1196 switch (prepared_action) {
davide.aliprandi@st.com 22:ba7f4131a5e0 1197 case PREPARED_GET_POSITION:
davide.aliprandi@st.com 22:ba7f4131a5e0 1198 return L6470_AbsPos_2_Position(L6470_ExtractReturnedData(raw_data, L6470_Register[L6470_ABS_POS_ID].LengthByte));
davide.aliprandi@st.com 22:ba7f4131a5e0 1199
davide.aliprandi@st.com 22:ba7f4131a5e0 1200 case PREPARED_GET_MARK:
davide.aliprandi@st.com 22:ba7f4131a5e0 1201 return L6470_AbsPos_2_Position(L6470_ExtractReturnedData(raw_data, L6470_Register[L6470_MARK_ID].LengthByte));
davide.aliprandi@st.com 22:ba7f4131a5e0 1202
davide.aliprandi@st.com 22:ba7f4131a5e0 1203 case PREPARED_GET_SPEED:
davide.aliprandi@st.com 22:ba7f4131a5e0 1204 return round(L6470_Speed_2_Step_s(L6470_ExtractReturnedData(raw_data, L6470_Register[L6470_SPEED_ID].LengthByte)));
davide.aliprandi@st.com 22:ba7f4131a5e0 1205
davide.aliprandi@st.com 22:ba7f4131a5e0 1206 case PREPARED_GET_MAX_SPEED:
davide.aliprandi@st.com 22:ba7f4131a5e0 1207 return round(L6470_MaxSpeed_2_Step_s(L6470_ExtractReturnedData(raw_data, L6470_Register[L6470_MAX_SPEED_ID].LengthByte)));
davide.aliprandi@st.com 22:ba7f4131a5e0 1208
davide.aliprandi@st.com 22:ba7f4131a5e0 1209 case PREPARED_GET_MIN_SPEED:
davide.aliprandi@st.com 22:ba7f4131a5e0 1210 return round(L6470_MinSpeed_2_Step_s(L6470_ExtractReturnedData(raw_data, L6470_Register[L6470_MIN_SPEED_ID].LengthByte)));
davide.aliprandi@st.com 22:ba7f4131a5e0 1211
davide.aliprandi@st.com 22:ba7f4131a5e0 1212 case PREPARED_GET_ACCELERATION:
davide.aliprandi@st.com 22:ba7f4131a5e0 1213 return round(L6470_Acc_2_Step_s2(L6470_ExtractReturnedData(raw_data, L6470_Register[L6470_ACC_ID].LengthByte)));
davide.aliprandi@st.com 22:ba7f4131a5e0 1214
davide.aliprandi@st.com 22:ba7f4131a5e0 1215 case PREPARED_GET_DECELERATION:
davide.aliprandi@st.com 22:ba7f4131a5e0 1216 return round(L6470_Dec_2_Step_s2(L6470_ExtractReturnedData(raw_data, L6470_Register[L6470_DEC_ID].LengthByte)));
davide.aliprandi@st.com 22:ba7f4131a5e0 1217
davide.aliprandi@st.com 22:ba7f4131a5e0 1218 case PREPARED_GET_DIRECTION:
davide.aliprandi@st.com 22:ba7f4131a5e0 1219 return (int32_t) (direction_t) (L6470_CheckStatusRegisterFlag((eL6470_StatusRegisterFlagId_t) DIR_ID) == 1 ? StepperMotor::FWD : StepperMotor::BWD);
Davidroid 0:92706998571a 1220
davide.aliprandi@st.com 22:ba7f4131a5e0 1221 default:
davide.aliprandi@st.com 22:ba7f4131a5e0 1222 case PREPARED_NO_ACTION:
davide.aliprandi@st.com 22:ba7f4131a5e0 1223 return 0;
davide.aliprandi@st.com 22:ba7f4131a5e0 1224 }
davide.aliprandi@st.com 22:ba7f4131a5e0 1225 }
davide.aliprandi@st.com 22:ba7f4131a5e0 1226
davide.aliprandi@st.com 22:ba7f4131a5e0 1227
davide.aliprandi@st.com 22:ba7f4131a5e0 1228 /*** Public Interrupt Related Methods ***/
davide.aliprandi@st.com 22:ba7f4131a5e0 1229
davide.aliprandi@st.com 22:ba7f4131a5e0 1230 /* ACTION 6 --------------------------------------------------------------*
davide.aliprandi@st.com 22:ba7f4131a5e0 1231 * Implement here interrupt related methods, if any. *
davide.aliprandi@st.com 22:ba7f4131a5e0 1232 * Note that interrupt handling is platform dependent, e.g.: *
davide.aliprandi@st.com 22:ba7f4131a5e0 1233 * + mbed: *
davide.aliprandi@st.com 22:ba7f4131a5e0 1234 * InterruptIn feature_irq(pin); //Interrupt object. *
davide.aliprandi@st.com 22:ba7f4131a5e0 1235 * feature_irq.rise(callback); //Attach a callback. *
davide.aliprandi@st.com 22:ba7f4131a5e0 1236 * feature_irq.mode(PullNone); //Set interrupt mode. *
davide.aliprandi@st.com 22:ba7f4131a5e0 1237 * feature_irq.enable_irq(); //Enable interrupt. *
davide.aliprandi@st.com 22:ba7f4131a5e0 1238 * feature_irq.disable_irq(); //Disable interrupt. *
davide.aliprandi@st.com 22:ba7f4131a5e0 1239 * + Arduino: *
davide.aliprandi@st.com 22:ba7f4131a5e0 1240 * attachInterrupt(pin, callback, RISING); //Attach a callback. *
davide.aliprandi@st.com 22:ba7f4131a5e0 1241 * detachInterrupt(pin); //Detach a callback. *
davide.aliprandi@st.com 22:ba7f4131a5e0 1242 * *
davide.aliprandi@st.com 22:ba7f4131a5e0 1243 * Example (mbed): *
davide.aliprandi@st.com 22:ba7f4131a5e0 1244 * void attach_feature_irq(void (*fptr) (void)) *
davide.aliprandi@st.com 22:ba7f4131a5e0 1245 * { *
davide.aliprandi@st.com 22:ba7f4131a5e0 1246 * feature_irq.rise(fptr); *
davide.aliprandi@st.com 22:ba7f4131a5e0 1247 * } *
davide.aliprandi@st.com 22:ba7f4131a5e0 1248 * *
davide.aliprandi@st.com 22:ba7f4131a5e0 1249 * void enable_feature_irq(void) *
davide.aliprandi@st.com 22:ba7f4131a5e0 1250 * { *
davide.aliprandi@st.com 22:ba7f4131a5e0 1251 * feature_irq.enable_irq(); *
davide.aliprandi@st.com 22:ba7f4131a5e0 1252 * } *
davide.aliprandi@st.com 22:ba7f4131a5e0 1253 * *
davide.aliprandi@st.com 22:ba7f4131a5e0 1254 * void disable_feature_irq(void) *
davide.aliprandi@st.com 22:ba7f4131a5e0 1255 * { *
davide.aliprandi@st.com 22:ba7f4131a5e0 1256 * feature_irq.disable_irq(); *
davide.aliprandi@st.com 22:ba7f4131a5e0 1257 * } *
davide.aliprandi@st.com 22:ba7f4131a5e0 1258 *------------------------------------------------------------------------*/
davide.aliprandi@st.com 22:ba7f4131a5e0 1259 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 1260 * @brief Attaching an interrupt handler to the FLAG interrupt.
davide.aliprandi@st.com 22:ba7f4131a5e0 1261 * @param fptr An interrupt handler.
davide.aliprandi@st.com 22:ba7f4131a5e0 1262 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 1263 */
davide.aliprandi@st.com 22:ba7f4131a5e0 1264 void attach_flag_irq(void (*fptr)(void))
davide.aliprandi@st.com 22:ba7f4131a5e0 1265 {
davide.aliprandi@st.com 22:ba7f4131a5e0 1266 flag_irq.fall(fptr);
davide.aliprandi@st.com 22:ba7f4131a5e0 1267 }
davide.aliprandi@st.com 22:ba7f4131a5e0 1268
davide.aliprandi@st.com 22:ba7f4131a5e0 1269 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 1270 * @brief Enabling the FLAG interrupt handling.
davide.aliprandi@st.com 22:ba7f4131a5e0 1271 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 1272 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 1273 */
davide.aliprandi@st.com 22:ba7f4131a5e0 1274 void enable_flag_irq(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 1275 {
davide.aliprandi@st.com 22:ba7f4131a5e0 1276 flag_irq.enable_irq();
davide.aliprandi@st.com 22:ba7f4131a5e0 1277 }
davide.aliprandi@st.com 22:ba7f4131a5e0 1278
davide.aliprandi@st.com 22:ba7f4131a5e0 1279 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 1280 * @brief Disabling the FLAG interrupt handling.
davide.aliprandi@st.com 22:ba7f4131a5e0 1281 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 1282 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 1283 */
davide.aliprandi@st.com 22:ba7f4131a5e0 1284 void disable_flag_irq(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 1285 {
davide.aliprandi@st.com 22:ba7f4131a5e0 1286 flag_irq.disable_irq();
davide.aliprandi@st.com 22:ba7f4131a5e0 1287 }
davide.aliprandi@st.com 22:ba7f4131a5e0 1288
davide.aliprandi@st.com 22:ba7f4131a5e0 1289 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 1290 * @brief Attaching an interrupt handler to the BUSY interrupt.
davide.aliprandi@st.com 22:ba7f4131a5e0 1291 * @param fptr An interrupt handler.
davide.aliprandi@st.com 22:ba7f4131a5e0 1292 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 1293 */
davide.aliprandi@st.com 22:ba7f4131a5e0 1294 void attach_busy_irq(void (*fptr)(void))
davide.aliprandi@st.com 22:ba7f4131a5e0 1295 {
davide.aliprandi@st.com 22:ba7f4131a5e0 1296 busy_irq.fall(fptr);
davide.aliprandi@st.com 22:ba7f4131a5e0 1297 }
davide.aliprandi@st.com 22:ba7f4131a5e0 1298
davide.aliprandi@st.com 22:ba7f4131a5e0 1299 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 1300 * @brief Enabling the BUSY interrupt handling.
davide.aliprandi@st.com 22:ba7f4131a5e0 1301 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 1302 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 1303 */
davide.aliprandi@st.com 22:ba7f4131a5e0 1304 void enable_busy_irq(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 1305 {
davide.aliprandi@st.com 22:ba7f4131a5e0 1306 busy_irq.enable_irq();
davide.aliprandi@st.com 22:ba7f4131a5e0 1307 }
davide.aliprandi@st.com 22:ba7f4131a5e0 1308
davide.aliprandi@st.com 22:ba7f4131a5e0 1309 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 1310 * @brief Disabling the BUSY interrupt handling.
davide.aliprandi@st.com 22:ba7f4131a5e0 1311 * @param None.
davide.aliprandi@st.com 22:ba7f4131a5e0 1312 * @retval None.
davide.aliprandi@st.com 22:ba7f4131a5e0 1313 */
davide.aliprandi@st.com 22:ba7f4131a5e0 1314 void disable_busy_irq(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 1315 {
davide.aliprandi@st.com 22:ba7f4131a5e0 1316 busy_irq.disable_irq();
davide.aliprandi@st.com 22:ba7f4131a5e0 1317 }
davide.aliprandi@st.com 22:ba7f4131a5e0 1318
davide.aliprandi@st.com 22:ba7f4131a5e0 1319
davide.aliprandi@st.com 22:ba7f4131a5e0 1320 protected:
davide.aliprandi@st.com 22:ba7f4131a5e0 1321
davide.aliprandi@st.com 22:ba7f4131a5e0 1322 /*** Protected Component Related Methods ***/
Davidroid 0:92706998571a 1323
davide.aliprandi@st.com 22:ba7f4131a5e0 1324 /* ACTION 7 --------------------------------------------------------------*
davide.aliprandi@st.com 22:ba7f4131a5e0 1325 * Declare here the component's specific methods. *
davide.aliprandi@st.com 22:ba7f4131a5e0 1326 * They should be: *
davide.aliprandi@st.com 22:ba7f4131a5e0 1327 * + Methods with the same name of the C component's virtual table's *
davide.aliprandi@st.com 22:ba7f4131a5e0 1328 * functions (1); *
davide.aliprandi@st.com 22:ba7f4131a5e0 1329 * + Methods with the same name of the C component's extended virtual *
davide.aliprandi@st.com 22:ba7f4131a5e0 1330 * table's functions, if any (2); *
davide.aliprandi@st.com 22:ba7f4131a5e0 1331 * + Helper methods, if any, like functions declared in the component's *
davide.aliprandi@st.com 22:ba7f4131a5e0 1332 * source files but not pointed by the component's virtual table (3). *
davide.aliprandi@st.com 22:ba7f4131a5e0 1333 * *
davide.aliprandi@st.com 22:ba7f4131a5e0 1334 * Example: *
davide.aliprandi@st.com 22:ba7f4131a5e0 1335 * status_t COMPONENT_get_value(float *f); //(1) *
davide.aliprandi@st.com 22:ba7f4131a5e0 1336 * status_t COMPONENT_enable_feature(void); //(2) *
davide.aliprandi@st.com 22:ba7f4131a5e0 1337 * status_t COMPONENT_compute_average(void); //(3) *
davide.aliprandi@st.com 22:ba7f4131a5e0 1338 *------------------------------------------------------------------------*/
davide.aliprandi@st.com 22:ba7f4131a5e0 1339 int32_t L6470_AbsPos_2_Position(uint32_t AbsPos);
davide.aliprandi@st.com 22:ba7f4131a5e0 1340 uint32_t L6470_Position_2_AbsPos(int32_t Position);
davide.aliprandi@st.com 22:ba7f4131a5e0 1341 float L6470_Speed_2_Step_s(uint32_t Speed);
davide.aliprandi@st.com 22:ba7f4131a5e0 1342 uint32_t L6470_Step_s_2_Speed(float Step_s);
davide.aliprandi@st.com 22:ba7f4131a5e0 1343 float L6470_Acc_2_Step_s2(uint16_t Acc);
davide.aliprandi@st.com 22:ba7f4131a5e0 1344 uint16_t L6470_Step_s2_2_Acc(float Step_s2);
davide.aliprandi@st.com 22:ba7f4131a5e0 1345 float L6470_Dec_2_Step_s2(uint16_t Dec);
davide.aliprandi@st.com 22:ba7f4131a5e0 1346 uint16_t L6470_Step_s2_2_Dec(float Step_s2);
davide.aliprandi@st.com 22:ba7f4131a5e0 1347 float L6470_MaxSpeed_2_Step_s(uint16_t MaxSpeed);
davide.aliprandi@st.com 22:ba7f4131a5e0 1348 uint16_t L6470_Step_s_2_MaxSpeed(float Step_s);
davide.aliprandi@st.com 22:ba7f4131a5e0 1349 float L6470_MinSpeed_2_Step_s(uint16_t MinSpeed);
davide.aliprandi@st.com 22:ba7f4131a5e0 1350 uint16_t L6470_Step_s_2_MinSpeed(float Step_s);
davide.aliprandi@st.com 22:ba7f4131a5e0 1351 float L6470_FsSpd_2_Step_s(uint16_t FsSpd);
davide.aliprandi@st.com 22:ba7f4131a5e0 1352 uint16_t L6470_Step_s_2_FsSpd(float Step_s);
davide.aliprandi@st.com 22:ba7f4131a5e0 1353 float L6470_IntSpeed_2_Step_s(uint16_t IntSpeed);
davide.aliprandi@st.com 22:ba7f4131a5e0 1354 uint16_t L6470_Step_s_2_IntSpeed(float Step_s);
davide.aliprandi@st.com 22:ba7f4131a5e0 1355 float L6470_StSlp_2_s_Step(uint8_t StSlp);
davide.aliprandi@st.com 22:ba7f4131a5e0 1356 uint8_t L6470_s_Step_2_StSlp(float s_Step);
davide.aliprandi@st.com 22:ba7f4131a5e0 1357 float L6470_FnSlpAcc_2_s_Step(uint8_t FnSlpAcc);
davide.aliprandi@st.com 22:ba7f4131a5e0 1358 uint8_t L6470_s_Step_2_FnSlpAcc(float s_Step);
davide.aliprandi@st.com 22:ba7f4131a5e0 1359 float L6470_FnSlpDec_2_s_Step(uint8_t FnSlpDec);
davide.aliprandi@st.com 22:ba7f4131a5e0 1360 uint8_t L6470_s_Step_2_FnSlpDec(float s_Step);
davide.aliprandi@st.com 22:ba7f4131a5e0 1361 float L6470_OcdTh_2_mA(uint8_t OcdTh);
davide.aliprandi@st.com 22:ba7f4131a5e0 1362 uint8_t L6470_mA_2_OcdTh(float mA);
davide.aliprandi@st.com 22:ba7f4131a5e0 1363 float L6470_StallTh_2_mA(uint8_t StallTh);
davide.aliprandi@st.com 22:ba7f4131a5e0 1364 uint8_t L6470_mA_2_StallTh(float mA);
davide.aliprandi@st.com 22:ba7f4131a5e0 1365 status_t L6470_Config(void *init);
davide.aliprandi@st.com 22:ba7f4131a5e0 1366 void L6470_SetParam(eL6470_RegId_t L6470_RegId, uint32_t Value);
davide.aliprandi@st.com 22:ba7f4131a5e0 1367 uint32_t L6470_GetParam(eL6470_RegId_t L6470_RegId);
davide.aliprandi@st.com 22:ba7f4131a5e0 1368 void L6470_Run(eL6470_DirId_t L6470_DirId, uint32_t Speed);
davide.aliprandi@st.com 22:ba7f4131a5e0 1369 void L6470_StepClock(eL6470_DirId_t L6470_DirId);
davide.aliprandi@st.com 22:ba7f4131a5e0 1370 void L6470_Move(eL6470_DirId_t L6470_DirId, uint32_t N_Step);
davide.aliprandi@st.com 22:ba7f4131a5e0 1371 void L6470_GoTo(uint32_t AbsPos);
davide.aliprandi@st.com 22:ba7f4131a5e0 1372 void L6470_GoToDir(eL6470_DirId_t L6470_DirId, uint32_t AbsPos);
davide.aliprandi@st.com 22:ba7f4131a5e0 1373 void L6470_GoUntil(eL6470_ActId_t L6470_ActId, eL6470_DirId_t L6470_DirId, uint32_t Speed);
davide.aliprandi@st.com 22:ba7f4131a5e0 1374 void L6470_ReleaseSW(eL6470_ActId_t L6470_ActId, eL6470_DirId_t L6470_DirId);
davide.aliprandi@st.com 22:ba7f4131a5e0 1375 void L6470_GoHome(void);
davide.aliprandi@st.com 22:ba7f4131a5e0 1376 void L6470_GoMark(void);
davide.aliprandi@st.com 22:ba7f4131a5e0 1377 void L6470_ResetPos(void);
davide.aliprandi@st.com 22:ba7f4131a5e0 1378 void L6470_ResetDevice(void);
davide.aliprandi@st.com 22:ba7f4131a5e0 1379 void L6470_SoftStop(void);
davide.aliprandi@st.com 22:ba7f4131a5e0 1380 void L6470_HardStop(void);
davide.aliprandi@st.com 22:ba7f4131a5e0 1381 void L6470_soft_hiz(void);
davide.aliprandi@st.com 22:ba7f4131a5e0 1382 void L6470_HardHiZ(void);
davide.aliprandi@st.com 22:ba7f4131a5e0 1383 uint16_t L6470_GetStatus(void);
davide.aliprandi@st.com 22:ba7f4131a5e0 1384 void L6470_PrepareSetParam(eL6470_RegId_t L6470_RegId, uint32_t Value);
davide.aliprandi@st.com 22:ba7f4131a5e0 1385 void L6470_PrepareGetParam(eL6470_RegId_t L6470_RegId);
davide.aliprandi@st.com 22:ba7f4131a5e0 1386 void L6470_PrepareRun(eL6470_DirId_t L6470_DirId, uint32_t Speed);
davide.aliprandi@st.com 22:ba7f4131a5e0 1387 void L6470_PrepareStepClock(eL6470_DirId_t L6470_DirId);
davide.aliprandi@st.com 22:ba7f4131a5e0 1388 void L6470_PrepareMove(eL6470_DirId_t L6470_DirId, uint32_t N_Step);
davide.aliprandi@st.com 22:ba7f4131a5e0 1389 void L6470_PrepareGoTo(uint32_t AbsPos);
davide.aliprandi@st.com 22:ba7f4131a5e0 1390 void L6470_PrepareGoToDir(eL6470_DirId_t L6470_DirId, uint32_t AbsPos);
davide.aliprandi@st.com 22:ba7f4131a5e0 1391 void L6470_PrepareGoUntil(eL6470_ActId_t L6470_ActId, eL6470_DirId_t L6470_DirId, uint32_t Speed);
davide.aliprandi@st.com 22:ba7f4131a5e0 1392 void L6470_PrepareReleaseSW(eL6470_ActId_t L6470_ActId, eL6470_DirId_t L6470_DirId);
davide.aliprandi@st.com 22:ba7f4131a5e0 1393 void L6470_PrepareGoHome(void);
davide.aliprandi@st.com 22:ba7f4131a5e0 1394 void L6470_PrepareGoMark(void);
davide.aliprandi@st.com 22:ba7f4131a5e0 1395 void L6470_PrepareResetPos(void);
davide.aliprandi@st.com 22:ba7f4131a5e0 1396 void L6470_PrepareResetDevice(void);
davide.aliprandi@st.com 22:ba7f4131a5e0 1397 void L6470_PrepareSoftStop(void);
davide.aliprandi@st.com 22:ba7f4131a5e0 1398 void L6470_PrepareHardStop(void);
davide.aliprandi@st.com 22:ba7f4131a5e0 1399 void L6470_Preparesoft_hiz(void);
davide.aliprandi@st.com 22:ba7f4131a5e0 1400 void L6470_PrepareHardHiZ(void);
davide.aliprandi@st.com 22:ba7f4131a5e0 1401 void L6470_PrepareGetStatus(void);
davide.aliprandi@st.com 22:ba7f4131a5e0 1402 uint8_t* L6470_PerformPreparedApplicationCommand(void);
davide.aliprandi@st.com 22:ba7f4131a5e0 1403 void L6470_DaisyChainCommand(uint8_t* pL6470_DaisyChainSpiTxStruct, uint8_t* pL6470_DaisyChainSpiRxStruct);
davide.aliprandi@st.com 22:ba7f4131a5e0 1404 uint32_t L6470_ExtractReturnedData(uint8_t* pL6470_DaisyChainSpiRxStruct, uint8_t LengthByte);
davide.aliprandi@st.com 22:ba7f4131a5e0 1405 uint8_t L6470_CheckStatusRegisterFlag(uint8_t L6470_StatusRegisterFlagId);
davide.aliprandi@st.com 22:ba7f4131a5e0 1406 uint8_t* L6470_GetRegisterName(uint8_t id);
davide.aliprandi@st.com 22:ba7f4131a5e0 1407 void L6470_ResetAppCmdPkg(sL6470_AppCmdPkg_t* pL6470_AppCmdPkg);
davide.aliprandi@st.com 22:ba7f4131a5e0 1408 void L6470_FillAppCmdPkg(sL6470_AppCmdPkg_t* pL6470_AppCmdPkg, eL6470_AppCmdId_t L6470_AppCmdId, uint32_t p1, uint32_t p2, uint32_t p3);
davide.aliprandi@st.com 22:ba7f4131a5e0 1409 void L6470_PrepareAppCmdPkg(sL6470_AppCmdPkg_t* pL6470_AppCmdPkg, eL6470_AppCmdId_t L6470_AppCmdId, uint32_t p1, uint32_t p2, uint32_t p3);
davide.aliprandi@st.com 22:ba7f4131a5e0 1410 void L6470_PrepareDaisyChainCommand(sL6470_AppCmdPkg_t* pL6470_AppCmdPkg, uint8_t* pL6470_DaisyChainSpiTxStruct);
davide.aliprandi@st.com 22:ba7f4131a5e0 1411
davide.aliprandi@st.com 22:ba7f4131a5e0 1412 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 1413 * @brief Rounding a floating point number to the nearest unsigned integer number.
davide.aliprandi@st.com 22:ba7f4131a5e0 1414 * @param f The floating point number.
davide.aliprandi@st.com 22:ba7f4131a5e0 1415 * @retval The nearest unsigned integer number.
davide.aliprandi@st.com 22:ba7f4131a5e0 1416 */
davide.aliprandi@st.com 22:ba7f4131a5e0 1417 int round(float f)
davide.aliprandi@st.com 22:ba7f4131a5e0 1418 {
davide.aliprandi@st.com 22:ba7f4131a5e0 1419 if (f >= 0) {
davide.aliprandi@st.com 22:ba7f4131a5e0 1420 return (int) f + (f - (int) f < 0.5f ? 0 : 1);
davide.aliprandi@st.com 22:ba7f4131a5e0 1421 } else {
davide.aliprandi@st.com 22:ba7f4131a5e0 1422 return (int) f - (f - (int) f < -0.5f ? 1 : 0);
davide.aliprandi@st.com 22:ba7f4131a5e0 1423 }
davide.aliprandi@st.com 22:ba7f4131a5e0 1424 }
davide.aliprandi@st.com 22:ba7f4131a5e0 1425
davide.aliprandi@st.com 22:ba7f4131a5e0 1426
davide.aliprandi@st.com 22:ba7f4131a5e0 1427 /*** Component's I/O Methods ***/
davide.aliprandi@st.com 22:ba7f4131a5e0 1428
davide.aliprandi@st.com 22:ba7f4131a5e0 1429 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 1430 * @brief Utility function to read data from L6470.
davide.aliprandi@st.com 22:ba7f4131a5e0 1431 * @param[out] pBuffer pointer to the buffer to read data into.
davide.aliprandi@st.com 22:ba7f4131a5e0 1432 * @param[in] NumBytesToRead number of bytes to read.
davide.aliprandi@st.com 22:ba7f4131a5e0 1433 * @retval COMPONENT_OK in case of success, COMPONENT_ERROR otherwise.
davide.aliprandi@st.com 22:ba7f4131a5e0 1434 */
davide.aliprandi@st.com 22:ba7f4131a5e0 1435 status_t Read(uint8_t* pBuffer, uint16_t NumBytesToRead)
davide.aliprandi@st.com 22:ba7f4131a5e0 1436 {
davide.aliprandi@st.com 22:ba7f4131a5e0 1437 if (dev_spi.spi_read(pBuffer, ssel, NumBytesToRead) != 0) {
davide.aliprandi@st.com 22:ba7f4131a5e0 1438 return COMPONENT_ERROR;
davide.aliprandi@st.com 22:ba7f4131a5e0 1439 }
davide.aliprandi@st.com 22:ba7f4131a5e0 1440 return COMPONENT_OK;
davide.aliprandi@st.com 22:ba7f4131a5e0 1441 }
davide.aliprandi@st.com 22:ba7f4131a5e0 1442
davide.aliprandi@st.com 22:ba7f4131a5e0 1443 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 1444 * @brief Utility function to write data to L6470.
davide.aliprandi@st.com 22:ba7f4131a5e0 1445 * @param[in] pBuffer pointer to the buffer of data to send.
davide.aliprandi@st.com 22:ba7f4131a5e0 1446 * @param[in] NumBytesToWrite number of bytes to write.
davide.aliprandi@st.com 22:ba7f4131a5e0 1447 * @retval COMPONENT_OK in case of success, COMPONENT_ERROR otherwise.
davide.aliprandi@st.com 22:ba7f4131a5e0 1448 */
davide.aliprandi@st.com 22:ba7f4131a5e0 1449 status_t Write(uint8_t* pBuffer, uint16_t NumBytesToWrite)
davide.aliprandi@st.com 22:ba7f4131a5e0 1450 {
davide.aliprandi@st.com 22:ba7f4131a5e0 1451 if (dev_spi.spi_write(pBuffer, ssel, NumBytesToWrite) != 0) {
davide.aliprandi@st.com 22:ba7f4131a5e0 1452 return COMPONENT_ERROR;
davide.aliprandi@st.com 22:ba7f4131a5e0 1453 }
davide.aliprandi@st.com 22:ba7f4131a5e0 1454 return COMPONENT_OK;
davide.aliprandi@st.com 22:ba7f4131a5e0 1455 }
davide.aliprandi@st.com 22:ba7f4131a5e0 1456
davide.aliprandi@st.com 22:ba7f4131a5e0 1457 /**
davide.aliprandi@st.com 22:ba7f4131a5e0 1458 * @brief Utility function to read and write data from/to L6470 at the same time.
davide.aliprandi@st.com 22:ba7f4131a5e0 1459 * @param[out] pBufferToRead pointer to the buffer to read data into.
davide.aliprandi@st.com 22:ba7f4131a5e0 1460 * @param[in] pBufferToWrite pointer to the buffer of data to send.
davide.aliprandi@st.com 22:ba7f4131a5e0 1461 * @param[in] NumBytes number of bytes to read and write.
davide.aliprandi@st.com 22:ba7f4131a5e0 1462 * @retval COMPONENT_OK in case of success, COMPONENT_ERROR otherwise.
davide.aliprandi@st.com 22:ba7f4131a5e0 1463 */
davide.aliprandi@st.com 22:ba7f4131a5e0 1464 status_t ReadWrite(uint8_t* pBufferToRead, uint8_t* pBufferToWrite, uint16_t NumBytes)
davide.aliprandi@st.com 22:ba7f4131a5e0 1465 {
davide.aliprandi@st.com 22:ba7f4131a5e0 1466 if (dev_spi.spi_read_write(pBufferToRead, pBufferToWrite, ssel, NumBytes) != 0) {
davide.aliprandi@st.com 22:ba7f4131a5e0 1467 return COMPONENT_ERROR;
davide.aliprandi@st.com 22:ba7f4131a5e0 1468 }
davide.aliprandi@st.com 22:ba7f4131a5e0 1469 return COMPONENT_OK;
davide.aliprandi@st.com 22:ba7f4131a5e0 1470 }
davide.aliprandi@st.com 22:ba7f4131a5e0 1471
davide.aliprandi@st.com 22:ba7f4131a5e0 1472 /* ACTION 8 --------------------------------------------------------------*
davide.aliprandi@st.com 22:ba7f4131a5e0 1473 * Implement here other I/O methods beyond those already implemented *
davide.aliprandi@st.com 22:ba7f4131a5e0 1474 * above, which are declared extern within the component's header file. *
davide.aliprandi@st.com 22:ba7f4131a5e0 1475 *------------------------------------------------------------------------*/
davide.aliprandi@st.com 22:ba7f4131a5e0 1476 /*
davide.aliprandi@st.com 22:ba7f4131a5e0 1477 * Puts the device in standby mode.
davide.aliprandi@st.com 22:ba7f4131a5e0 1478 */
davide.aliprandi@st.com 22:ba7f4131a5e0 1479 void L6470_ENABLE(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 1480 {
davide.aliprandi@st.com 22:ba7f4131a5e0 1481 standby_reset = 1;
davide.aliprandi@st.com 22:ba7f4131a5e0 1482 }
davide.aliprandi@st.com 22:ba7f4131a5e0 1483
davide.aliprandi@st.com 22:ba7f4131a5e0 1484 /*
davide.aliprandi@st.com 22:ba7f4131a5e0 1485 * Puts the device in reset mode.
davide.aliprandi@st.com 22:ba7f4131a5e0 1486 */
davide.aliprandi@st.com 22:ba7f4131a5e0 1487 void L6470_DISABLE(void)
davide.aliprandi@st.com 22:ba7f4131a5e0 1488 {
davide.aliprandi@st.com 22:ba7f4131a5e0 1489 standby_reset = 0;
davide.aliprandi@st.com 22:ba7f4131a5e0 1490 }
davide.aliprandi@st.com 22:ba7f4131a5e0 1491
davide.aliprandi@st.com 22:ba7f4131a5e0 1492 /*
davide.aliprandi@st.com 22:ba7f4131a5e0 1493 * Write and read bytes to/from the component through the SPI at the same time.
davide.aliprandi@st.com 22:ba7f4131a5e0 1494 */
davide.aliprandi@st.com 22:ba7f4131a5e0 1495 void L6470_SPI_Communication(uint8_t *pTxData, uint8_t *pRxData, uint16_t Size, uint32_t Timeout)
davide.aliprandi@st.com 22:ba7f4131a5e0 1496 {
davide.aliprandi@st.com 22:ba7f4131a5e0 1497 ReadWrite(pRxData, pTxData, Size);
davide.aliprandi@st.com 22:ba7f4131a5e0 1498 }
davide.aliprandi@st.com 22:ba7f4131a5e0 1499
davide.aliprandi@st.com 22:ba7f4131a5e0 1500
davide.aliprandi@st.com 22:ba7f4131a5e0 1501 /*** Component's Instance Variables ***/
davide.aliprandi@st.com 22:ba7f4131a5e0 1502
davide.aliprandi@st.com 22:ba7f4131a5e0 1503 /* ACTION 9 --------------------------------------------------------------*
davide.aliprandi@st.com 22:ba7f4131a5e0 1504 * Declare here interrupt related variables, if needed. *
davide.aliprandi@st.com 22:ba7f4131a5e0 1505 * Note that interrupt handling is platform dependent, see *
davide.aliprandi@st.com 22:ba7f4131a5e0 1506 * "Interrupt Related Methods" above. *
davide.aliprandi@st.com 22:ba7f4131a5e0 1507 * *
davide.aliprandi@st.com 22:ba7f4131a5e0 1508 * Example: *
davide.aliprandi@st.com 22:ba7f4131a5e0 1509 * + mbed: *
davide.aliprandi@st.com 22:ba7f4131a5e0 1510 * InterruptIn feature_irq; *
davide.aliprandi@st.com 22:ba7f4131a5e0 1511 *------------------------------------------------------------------------*/
davide.aliprandi@st.com 22:ba7f4131a5e0 1512 /* Flag Interrupt. */
davide.aliprandi@st.com 22:ba7f4131a5e0 1513 InterruptIn flag_irq;
davide.aliprandi@st.com 22:ba7f4131a5e0 1514
davide.aliprandi@st.com 22:ba7f4131a5e0 1515 /* Busy Interrupt. */
davide.aliprandi@st.com 22:ba7f4131a5e0 1516 InterruptIn busy_irq;
davide.aliprandi@st.com 22:ba7f4131a5e0 1517
davide.aliprandi@st.com 22:ba7f4131a5e0 1518 /* ACTION 10 -------------------------------------------------------------*
davide.aliprandi@st.com 22:ba7f4131a5e0 1519 * Declare here other pin related variables, if needed. *
davide.aliprandi@st.com 22:ba7f4131a5e0 1520 * *
davide.aliprandi@st.com 22:ba7f4131a5e0 1521 * Example: *
davide.aliprandi@st.com 22:ba7f4131a5e0 1522 * + mbed: *
davide.aliprandi@st.com 22:ba7f4131a5e0 1523 * DigitalOut standby_reset; *
davide.aliprandi@st.com 22:ba7f4131a5e0 1524 *------------------------------------------------------------------------*/
davide.aliprandi@st.com 22:ba7f4131a5e0 1525 /* Standby/reset pin. */
davide.aliprandi@st.com 22:ba7f4131a5e0 1526 DigitalOut standby_reset;
davide.aliprandi@st.com 22:ba7f4131a5e0 1527
davide.aliprandi@st.com 22:ba7f4131a5e0 1528 /* ACTION 11 -------------------------------------------------------------*
davide.aliprandi@st.com 22:ba7f4131a5e0 1529 * Declare here communication related variables, if needed. *
davide.aliprandi@st.com 22:ba7f4131a5e0 1530 * *
davide.aliprandi@st.com 22:ba7f4131a5e0 1531 * Example: *
davide.aliprandi@st.com 22:ba7f4131a5e0 1532 * + mbed: *
davide.aliprandi@st.com 22:ba7f4131a5e0 1533 * DigitalOut ssel; *
davide.aliprandi@st.com 22:ba7f4131a5e0 1534 * DevSPI &dev_spi; *
davide.aliprandi@st.com 22:ba7f4131a5e0 1535 *------------------------------------------------------------------------*/
davide.aliprandi@st.com 22:ba7f4131a5e0 1536 /* Configuration. */
davide.aliprandi@st.com 22:ba7f4131a5e0 1537 DigitalOut ssel;
davide.aliprandi@st.com 22:ba7f4131a5e0 1538
davide.aliprandi@st.com 22:ba7f4131a5e0 1539 /* IO Device. */
davide.aliprandi@st.com 22:ba7f4131a5e0 1540 DevSPI &dev_spi;
davide.aliprandi@st.com 22:ba7f4131a5e0 1541
davide.aliprandi@st.com 22:ba7f4131a5e0 1542 /* ACTION 12 -------------------------------------------------------------*
davide.aliprandi@st.com 22:ba7f4131a5e0 1543 * Declare here identity related variables, if needed. *
davide.aliprandi@st.com 22:ba7f4131a5e0 1544 * Note that there should be only a unique identifier for each component, *
davide.aliprandi@st.com 22:ba7f4131a5e0 1545 * which should be the "who_am_i" parameter. *
davide.aliprandi@st.com 22:ba7f4131a5e0 1546 *------------------------------------------------------------------------*/
davide.aliprandi@st.com 22:ba7f4131a5e0 1547 /* Identity */
davide.aliprandi@st.com 22:ba7f4131a5e0 1548 uint8_t who_am_i;
davide.aliprandi@st.com 22:ba7f4131a5e0 1549
davide.aliprandi@st.com 22:ba7f4131a5e0 1550 /* ACTION 13 -------------------------------------------------------------*
davide.aliprandi@st.com 22:ba7f4131a5e0 1551 * Declare here the component's static and non-static data, one variable *
davide.aliprandi@st.com 22:ba7f4131a5e0 1552 * per line. *
davide.aliprandi@st.com 22:ba7f4131a5e0 1553 * *
davide.aliprandi@st.com 22:ba7f4131a5e0 1554 * Example: *
davide.aliprandi@st.com 22:ba7f4131a5e0 1555 * float measure; *
davide.aliprandi@st.com 22:ba7f4131a5e0 1556 * int instance_id; *
davide.aliprandi@st.com 22:ba7f4131a5e0 1557 * static int number_of_instances; *
davide.aliprandi@st.com 22:ba7f4131a5e0 1558 *------------------------------------------------------------------------*/
davide.aliprandi@st.com 22:ba7f4131a5e0 1559 /* Data. */
davide.aliprandi@st.com 22:ba7f4131a5e0 1560 uint8_t L6470_Id;
davide.aliprandi@st.com 22:ba7f4131a5e0 1561 const sL6470_Register_t *L6470_Register;
davide.aliprandi@st.com 22:ba7f4131a5e0 1562 const sL6470_ApplicationCommand_t *L6470_ApplicationCommand;
davide.aliprandi@st.com 22:ba7f4131a5e0 1563 const sL6470_Direction_t *L6470_Direction;
davide.aliprandi@st.com 22:ba7f4131a5e0 1564 const sL6470_ACT_t *L6470_ACT;
davide.aliprandi@st.com 22:ba7f4131a5e0 1565 sL6470_StatusRegister_t L6470_StatusRegister;
davide.aliprandi@st.com 22:ba7f4131a5e0 1566 sL6470_StatusRegister_t *pL6470_StatusRegister;
davide.aliprandi@st.com 22:ba7f4131a5e0 1567 StepperMotorRegister_t StepperMotorRegister;
davide.aliprandi@st.com 22:ba7f4131a5e0 1568 prepared_action_t prepared_action;
davide.aliprandi@st.com 22:ba7f4131a5e0 1569
davide.aliprandi@st.com 22:ba7f4131a5e0 1570 /* Static data. */
davide.aliprandi@st.com 22:ba7f4131a5e0 1571 static uint8_t number_of_devices;
davide.aliprandi@st.com 22:ba7f4131a5e0 1572 static const sL6470_Register_t _L6470_Register[L6470REGIDSIZE];
davide.aliprandi@st.com 22:ba7f4131a5e0 1573 static const sL6470_ApplicationCommand_t _L6470_ApplicationCommand[L6470APPCMDIDSIZE];
davide.aliprandi@st.com 22:ba7f4131a5e0 1574 static const sL6470_Direction_t _L6470_Direction[L6470DIRIDSIZE];
davide.aliprandi@st.com 22:ba7f4131a5e0 1575 static const sL6470_ACT_t _L6470_ACT[L6470ACTIDSIZE];
davide.aliprandi@st.com 22:ba7f4131a5e0 1576 static eFlagStatus_t L6470_DaisyChain_HalfPrepared;
davide.aliprandi@st.com 22:ba7f4131a5e0 1577 static sL6470_AppCmdPkg_t L6470_AppCmdPkg[L6470DAISYCHAINSIZE];
davide.aliprandi@st.com 22:ba7f4131a5e0 1578 static uint8_t L6470_DaisyChainSpiTxStruct[L6470MAXSPICMDBYTESIZE][L6470DAISYCHAINSIZE];
davide.aliprandi@st.com 22:ba7f4131a5e0 1579 static uint8_t L6470_DaisyChainSpiRxStruct[L6470MAXSPICMDBYTESIZE][L6470DAISYCHAINSIZE];
davide.aliprandi@st.com 22:ba7f4131a5e0 1580 };
davide.aliprandi@st.com 22:ba7f4131a5e0 1581
davide.aliprandi@st.com 22:ba7f4131a5e0 1582 #endif /* __L6470_CLASS_H */
Davidroid 0:92706998571a 1583
Davidroid 0:92706998571a 1584 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/