Controlls of IHM01A1 by Joystick shield
Dependencies: ST_INTERFACES X_NUCLEO_COMMON
Fork of X_NUCLEO_IHM01A1 by
Revision 7:f7e0c3621f77, committed 2015-11-20
- Comitter:
- Davidroid
- Date:
- Fri Nov 20 18:00:03 2015 +0000
- Parent:
- 6:a47569fc7534
- Child:
- 8:42e0b00b1e4d
- Commit message:
- + FLAG interrupt handling added.; + Doxygen documentation ongoing.
Changed in this revision
--- a/Components/Interfaces/Component_class.h Thu Nov 19 10:56:34 2015 +0000
+++ b/Components/Interfaces/Component_class.h Fri Nov 20 18:00:03 2015 +0000
@@ -56,16 +56,16 @@
{
public:
/**
- * @brief Initialization of the component.
- * @param[out] ptr Pointer to device specific initalization structure.
- * @return 0 in case of success, an error code otherwise.
+ * @brief Initializing the component.
+ * @param init pointer to device specific initalization structure.
+ * @retval "0" in case of success, an error code otherwise.
*/
- virtual int Init(void *ptr) = 0;
+ virtual int Init(void *init) = 0;
/**
- * @brief Get ID of the component.
- * @param[out] id Pointer to where to store the ID to.
- * @return 0 in case of success, an error code otherwise.
+ * @brief Getting the ID of the component.
+ * @param id pointer to an allocated variable to store the ID into.
+ * @retval "0" in case of success, an error code otherwise.
*/
virtual int ReadID(uint8_t *id) = 0;
};
--- a/Components/Interfaces/StepperMotor_class.h Thu Nov 19 10:56:34 2015 +0000
+++ b/Components/Interfaces/StepperMotor_class.h Fri Nov 20 18:00:03 2015 +0000
@@ -62,10 +62,18 @@
FWD = 1 /* Forward. */
} direction_t;
- /* Get the status. */
+ /**
+ * @brief Getting the status.
+ * @param None.
+ * @retval None.
+ */
virtual unsigned int GetStatus(void) = 0;
- /* Get the specified parameter. */
+ /**
+ * @brief Getting a parameter.
+ * @param parameter register adress.
+ * @retval a register value.
+ */
virtual unsigned int GetParameter(unsigned int parameter) = 0;
/* Return the current position. */
@@ -92,7 +100,12 @@
/* Get the current direction of rotation. */
virtual direction_t GetDirection(void) = 0;
- /* Set the specified parameter. */
+ /**
+ * @brief Setting a parameter.
+ * @param parameter register adress.
+ * @param value value to be set.
+ * @retval None.
+ */
virtual void SetParameter(unsigned int parameter, unsigned int value) = 0;
/* Set the current position to be the home position. */
@@ -133,6 +146,9 @@
/* Stop the motor and disable the power bridge. */
virtual void HardStop(void) = 0;
+
+ /* Wait while the motor is active. */
+ virtual void WaitWhileActive(void) = 0;
};
#endif /* __STEPPERMOTOR_CLASS_H */
--- a/Components/l6474/l6474_class.cpp Thu Nov 19 10:56:34 2015 +0000
+++ b/Components/l6474/l6474_class.cpp Fri Nov 20 18:00:03 2015 +0000
@@ -102,21 +102,6 @@
}
/**********************************************************
- * @brief Attaches a user callback to the flag Interrupt
- * The call back will be then called each time the status
- * flag pin will be pulled down due to the occurrence of
- * a programmed alarms ( OCD, thermal pre-warning or
- * shutdown, UVLO, wrong command, non-performable command)
- * @param[in] callback Name of the callback to attach
- * to the Flag Interrupt
- * @retval None
- **********************************************************/
-void L6474::L6474_AttachFlagInterrupt(void (*callback)(void))
-{
- flagInterruptCallback = (void (*)(void))callback;
-}
-
-/**********************************************************
* @brief Starts the L6474 library
* @retval COMPONENT_OK in case of success
**********************************************************/
@@ -357,28 +342,6 @@
}
}
-#if 0
-/**********************************************************
- * @brief Resets all L6474 devices
- * @param None
- * @retval None
- **********************************************************/
-void L6474::L6474_ResetAllDevices(void)
-{
- uint8_t loop;
-
- for (loop = 0; loop < numberOfDevices; loop++)
- {
- /* Stop movement and disable power stage*/
- L6474_HardStop(loop);
- }
- L6474_Reset();
- L6474_Delay(1); // Reset pin must be forced low for at least 10us
- L6474_ReleaseReset();
- L6474_Delay(1);
-}
-#endif
-
/**********************************************************
* @brief Runs the motor. It will accelerate from the min
* speed up to the max speed by using the device acceleration.
@@ -551,10 +514,10 @@
/**********************************************************
* @brief Issues the GetParam command to the L6474 of the specified device
- * @param[in] param Register adress (L6474_ABS_POS, L6474_MARK,...)
+ * @param[in] parameter Register adress (L6474_ABS_POS, L6474_MARK,...)
* @retval Register value
**********************************************************/
-uint32_t L6474::L6474_CmdGetParam(uint32_t param)
+uint32_t L6474::L6474_CmdGetParam(L6474_Registers_t parameter)
{
uint32_t i;
uint32_t spiRxData;
@@ -583,21 +546,21 @@
spiRxBursts[3][i] = 0;
}
- switch (param)
+ switch (parameter)
{
case L6474_ABS_POS: ;
case L6474_MARK:
- spiTxBursts[0][spiIndex] = ((uint8_t)L6474_GET_PARAM )| (param);
+ spiTxBursts[0][spiIndex] = ((uint8_t)L6474_GET_PARAM )| (parameter);
maxArgumentNbBytes = 3;
break;
case L6474_EL_POS: ;
case L6474_CONFIG: ;
case L6474_STATUS:
- spiTxBursts[1][spiIndex] = ((uint8_t)L6474_GET_PARAM )| (param);
+ spiTxBursts[1][spiIndex] = ((uint8_t)L6474_GET_PARAM )| (parameter);
maxArgumentNbBytes = 2;
break;
default:
- spiTxBursts[2][spiIndex] = ((uint8_t)L6474_GET_PARAM )| (param);
+ spiTxBursts[2][spiIndex] = ((uint8_t)L6474_GET_PARAM )| (parameter);
maxArgumentNbBytes = 1;
}
@@ -629,7 +592,7 @@
* @retval Status Register value
* @note Once the GetStatus command is performed, the flags of the status register
* are reset. This is not the case when the status register is read with the
- * GetParam command (via the functions L6474ReadStatusRegister or L6474CmdGetParam).
+ * GetParam command (via the functions L6474ReadStatusRegister or L6474_CmdGetParam).
**********************************************************/
uint16_t L6474::L6474_CmdGetStatus(void)
{
@@ -687,11 +650,11 @@
/**********************************************************
* @brief Issues the SetParam command to the L6474 of the specified device
- * @param[in] param Register adress (L6474_ABS_POS, L6474_MARK,...)
+ * @param[in] parameter Register adress (L6474_ABS_POS, L6474_MARK,...)
* @param[in] value Value to set in the register
* @retval None
**********************************************************/
-void L6474::L6474_CmdSetParam(uint32_t param, uint32_t value)
+void L6474::L6474_CmdSetParam(L6474_Registers_t parameter, uint32_t value)
{
uint32_t i;
uint8_t maxArgumentNbBytes = 0;
@@ -715,23 +678,23 @@
spiTxBursts[3][i] = L6474_NOP;
}
- switch (param)
+ switch (parameter)
{
case L6474_ABS_POS: ;
case L6474_MARK:
- spiTxBursts[0][spiIndex] = param;
+ spiTxBursts[0][spiIndex] = parameter;
spiTxBursts[1][spiIndex] = (uint8_t)(value >> 16);
spiTxBursts[2][spiIndex] = (uint8_t)(value >> 8);
maxArgumentNbBytes = 3;
break;
case L6474_EL_POS: ;
case L6474_CONFIG:
- spiTxBursts[1][spiIndex] = param;
+ spiTxBursts[1][spiIndex] = parameter;
spiTxBursts[2][spiIndex] = (uint8_t)(value >> 8);
maxArgumentNbBytes = 2;
break;
default:
- spiTxBursts[2][spiIndex] = param;
+ spiTxBursts[2][spiIndex] = parameter;
maxArgumentNbBytes = 1;
break;
}
@@ -961,29 +924,8 @@
}
else
{
- while(1)
- {
- /* Infinite loop */
- }
- }
-}
-
-/**********************************************************
- * @brief Handlers of the flag interrupt which calls the user callback (if defined)
- * @param None
- * @retval None
- **********************************************************/
-void L6474::L6474_FlagInterruptHandler(void)
-{
- if (flagInterruptCallback != 0)
- {
- /* Set isr flag */
- isrFlag = TRUE;
-
- flagInterruptCallback();
-
- /* Reset isr flag */
- isrFlag = FALSE;
+ /* Aborting the program. */
+ exit(EXIT_FAILURE);
}
}
--- a/Components/l6474/l6474_class.h Thu Nov 19 10:56:34 2015 +0000
+++ b/Components/l6474/l6474_class.h Fri Nov 20 18:00:03 2015 +0000
@@ -88,13 +88,14 @@
/**
* @brief Constructor.
+ * @param flag_irq pin name of the FLAG pin of the component.
* @param standby_reset pin name of the STBY\RST pin of the component.
* @param direction pin name of the DIR pin of the component.
* @param pwm pin name of the PWM pin of the component.
* @param ssel pin name of the SSEL pin of the SPI device to be used for communication.
* @param spi SPI device to be used for communication.
*/
- L6474(PinName standby_reset, PinName direction, PinName pwm, PinName ssel, DevSPI &spi) : StepperMotor(), standby_reset(standby_reset), direction(direction), pwm(pwm), ssel(ssel), dev_spi(spi)
+ L6474(PinName flag_irq, PinName standby_reset, PinName direction, PinName pwm, PinName ssel, DevSPI &spi) : StepperMotor(), flag_irq(flag_irq), standby_reset(standby_reset), direction(direction), pwm(pwm), ssel(ssel), dev_spi(spi)
{
/* ACTION 4 ----------------------------------------------------------*
* Initialize here the component's member variables, one variable per *
@@ -106,7 +107,6 @@
* T0_degC = 0; *
* T1_degC = 0; *
*--------------------------------------------------------------------*/
- flagInterruptCallback = 0;
errorHandlerCallback = 0;
deviceInstance = numberOfDevices;
numberOfDevices++;
@@ -142,24 +142,75 @@
* return COMPONENT_EnableFeature(); *
* } *
*------------------------------------------------------------------------*/
+ /**
+ * @brief Initializing the component.
+ * @param init pointer to device specific initalization structure.
+ * @retval "0" in case of success, an error code otherwise.
+ */
virtual int Init(void *init)
{
return (int) L6474_Init((MOTOR_InitTypeDef *) init);
}
+ /**
+ * @brief Getting the ID of the component.
+ * @param id pointer to an allocated variable to store the ID into.
+ * @retval "0" in case of success, an error code otherwise.
+ */
virtual int ReadID(uint8_t *id)
{
return (int) L6474_ReadID((uint8_t *) id);
}
+ /**
+ * @brief Getting the value of the Status Register.
+ * @param None.
+ * @retval None.
+ * @note The Status Register's flags are cleared, contrary to ReadStatusRegister().
+ */
virtual unsigned int GetStatus(void)
{
return (unsigned int) L6474_CmdGetStatus();
}
+ /**
+ * @brief Getting a parameter.
+ * @param parameter register adress.
+ * @retval a register value.
+ * @note The Status Register's flags are cleared, contrary to ReadStatusRegister().
+ * parameter can be one of the following:
+ * + L6474_ABS_POS
+ * + L6474_EL_POS
+ * + L6474_MARK
+ * + L6474_RESERVED_REG01
+ * + L6474_RESERVED_REG02
+ * + L6474_RESERVED_REG03
+ * + L6474_RESERVED_REG04
+ * + L6474_RESERVED_REG05
+ * + L6474_RESERVED_REG06
+ * + L6474_TVAL
+ * + L6474_RESERVED_REG07
+ * + L6474_RESERVED_REG08
+ * + L6474_RESERVED_REG09
+ * + L6474_RESERVED_REG10
+ * + L6474_T_FAST
+ * + L6474_TON_MIN
+ * + L6474_TOFF_MIN
+ * + L6474_RESERVED_REG11
+ * + L6474_ADC_OUT
+ * + L6474_OCD_TH
+ * + L6474_RESERVED_REG12
+ * + L6474_STEP_MODE
+ * + L6474_ALARM_EN
+ * + L6474_CONFIG
+ * + L6474_STATUS
+ * + L6474_RESERVED_REG13
+ * + L6474_RESERVED_REG14
+ * + L6474_INEXISTENT_REG
+ */
virtual unsigned int GetParameter(unsigned int parameter)
{
- return (unsigned int) L6474_CmdGetParam((unsigned int) parameter);
+ return (unsigned int) L6474_CmdGetParam((L6474_Registers_t) parameter);
}
virtual signed int GetPosition(void)
@@ -202,9 +253,44 @@
return (direction_t) (L6474_GetDirection() == FORWARD ? StepperMotor::FWD : StepperMotor::BWD);
}
+ /**
+ * @brief Setting a parameter.
+ * @param parameter register adress.
+ * @param value value to be set.
+ * @retval None.
+ * @note parameter can be one of the following:
+ * + L6474_ABS_POS
+ * + L6474_EL_POS
+ * + L6474_MARK
+ * + L6474_RESERVED_REG01
+ * + L6474_RESERVED_REG02
+ * + L6474_RESERVED_REG03
+ * + L6474_RESERVED_REG04
+ * + L6474_RESERVED_REG05
+ * + L6474_RESERVED_REG06
+ * + L6474_TVAL
+ * + L6474_RESERVED_REG07
+ * + L6474_RESERVED_REG08
+ * + L6474_RESERVED_REG09
+ * + L6474_RESERVED_REG10
+ * + L6474_T_FAST
+ * + L6474_TON_MIN
+ * + L6474_TOFF_MIN
+ * + L6474_RESERVED_REG11
+ * + L6474_ADC_OUT
+ * + L6474_OCD_TH
+ * + L6474_RESERVED_REG12
+ * + L6474_STEP_MODE
+ * + L6474_ALARM_EN
+ * + L6474_CONFIG
+ * + L6474_STATUS
+ * + L6474_RESERVED_REG13
+ * + L6474_RESERVED_REG14
+ * + L6474_INEXISTENT_REG
+ */
virtual void SetParameter(unsigned int parameter, unsigned int value)
{
- L6474_CmdSetParam((unsigned int) parameter, (unsigned int) value);
+ L6474_CmdSetParam((L6474_Registers_t) parameter, (unsigned int) value);
}
virtual void SetHome(void)
@@ -272,6 +358,21 @@
L6474_HardStop();
}
+ virtual void WaitWhileActive(void)
+ {
+ L6474_WaitWhileActive();
+ }
+
+ /**
+ * @brief Getting the device state.
+ * @param None.
+ * @retval The device state.
+ * @note The device state can be one of the following:
+ * + ACCELERATING
+ * + DECELERATING
+ * + STEADY
+ * + INACTIVE
+ */
virtual motorState_t GetDeviceState(void)
{
return (motorState_t) L6474_GetDeviceState();
@@ -287,16 +388,6 @@
L6474_SetDirection((motorDir_t) (direction == StepperMotor::FWD ? FORWARD : BACKWARD));
}
- virtual void StepClockHandler(void)
- {
- L6474_StepClockHandler();
- }
-
- virtual void WaitWhileActive(void)
- {
- L6474_WaitWhileActive();
- }
-
virtual void CmdDisable(void)
{
L6474_CmdDisable();
@@ -307,49 +398,44 @@
L6474_CmdEnable();
}
- virtual void CmdNop(void)
- {
- L6474_CmdNop();
- }
-
+ /**
+ * @brief Reading the Status Register.
+ * @param None.
+ * @retval None.
+ * @note The Status Register's flags are not cleared, contrary to GetStatus().
+ */
virtual uint16_t ReadStatusRegister(void)
{
return (uint16_t) L6474_ReadStatusRegister();
}
- virtual void ReleaseReset(void)
- {
- L6474_ReleaseReset();
- }
-
- virtual void Reset(void)
+ /**
+ * @brief Selecting the Step Mode.
+ * @param step_mode the Step Mode.
+ * @retval None.
+ * @note step_mode can be one of the following:
+ * + STEP_MODE_FULL
+ * + STEP_MODE_HALF
+ * + STEP_MODE_1_4
+ * + STEP_MODE_1_8
+ * + STEP_MODE_1_16
+ * + STEP_MODE_1_32
+ * + STEP_MODE_1_64
+ * + STEP_MODE_1_128
+ */
+ virtual void SelectStepMode(motorStepMode_t step_mode)
{
- L6474_Reset();
- }
-
- virtual void SelectStepMode(motorStepMode_t stepMod)
- {
- L6474_SelectStepMode((motorStepMode_t) stepMod);
+ L6474_SelectStepMode((motorStepMode_t) step_mode);
}
- virtual void ErrorHandler(uint16_t error)
- {
- L6474_ErrorHandler((uint16_t) error);
- }
-
- virtual void AttachErrorHandler(void (*callback)(uint16_t error))
+ /**
+ * @brief Attaching an error handler.
+ * @param fptr an error handler.
+ * @retval None.
+ */
+ virtual void AttachErrorHandler(void (*fptr)(uint16_t error))
{
- L6474_AttachErrorHandler((void (*)(uint16_t error)) callback);
- }
-
- virtual void AttachFlagInterrupt(void (*callback)(void))
- {
- L6474_AttachFlagInterrupt((void (*)(void)) callback);
- }
-
- virtual void FlagInterruptHandler(void)
- {
- L6474_FlagInterruptHandler();
+ L6474_AttachErrorHandler((void (*)(uint16_t error)) fptr);
}
@@ -359,31 +445,60 @@
* Implement here interrupt related methods, if any. *
* Note that interrupt handling is platform dependent, e.g.: *
* + mbed: *
- * InterruptIn feature_int(pin); //Interrupt object. *
- * feature_int.rise(callback); //Attach a callback. *
- * feature_int.mode(PullNone); //Set interrupt mode. *
- * feature_int.enable_irq(); //Enable interrupt. *
- * feature_int.disable_irq(); //Disable interrupt. *
+ * InterruptIn feature_irq(pin); //Interrupt object. *
+ * feature_irq.rise(callback); //Attach a callback. *
+ * feature_irq.mode(PullNone); //Set interrupt mode. *
+ * feature_irq.enable_irq(); //Enable interrupt. *
+ * feature_irq.disable_irq(); //Disable interrupt. *
* + Arduino: *
* attachInterrupt(pin, callback, RISING); //Attach a callback. *
* detachInterrupt(pin); //Detach a callback. *
* *
* Example (mbed): *
- * void Attach_Feature_IRQ(void (*fptr) (void)) *
+ * void AttachFeatureIRQ(void (*fptr) (void)) *
* { *
- * feature_int.rise(fptr); *
+ * feature_irq.rise(fptr); *
+ * } *
+ * *
+ * void EnableFeatureIRQ(void) *
+ * { *
+ * feature_irq.enable_irq(); *
* } *
* *
- * void Enable_Feature_IRQ(void) *
+ * void DisableFeatureIRQ(void) *
* { *
- * feature_int.enable_irq(); *
- * } *
- * *
- * void Disable_Feature_IRQ(void) *
- * { *
- * feature_int.disable_irq(); *
+ * feature_irq.disable_irq(); *
* } *
*------------------------------------------------------------------------*/
+ /**
+ * @brief Attaching a FLAG interrupt handler.
+ * @param fptr an interrupt handler.
+ * @retval None.
+ */
+ void AttachFlagIRQ(void (*fptr)(void))
+ {
+ flag_irq.rise(fptr);
+ }
+
+ /**
+ * @brief Enabling FLAG interrupt handling.
+ * @param None.
+ * @retval None.
+ */
+ void EnableFlagIRQ(void)
+ {
+ flag_irq.enable_irq();
+ }
+
+ /**
+ * @brief Disabling FLAG interrupt handling.
+ * @param None.
+ * @retval None.
+ */
+ void DisableFlagIRQ(void)
+ {
+ flag_irq.disable_irq();
+ }
protected:
@@ -405,54 +520,52 @@
* DrvStatusTypeDef COMPONENT_EnableFeature(void); //(2) *
* DrvStatusTypeDef COMPONENT_ComputeAverage(void); //(3) *
*------------------------------------------------------------------------*/
- void L6474_AttachErrorHandler(void (*callback)(uint16_t error)); //Attach a user callback to the error handler
- void L6474_AttachFlagInterrupt(void (*callback)(void)); //Attach a user callback to the flag Interrupt
- DrvStatusTypeDef L6474_Init(MOTOR_InitTypeDef *init); //Start the L6474 library
- DrvStatusTypeDef L6474_ReadID(uint8_t *id); //Read Id to get driver instance
- uint16_t L6474_GetAcceleration(void); //Return the acceleration in pps^2
- uint16_t L6474_GetCurrentSpeed(void); //Return the current speed in pps
- uint16_t L6474_GetDeceleration(void); //Return the deceleration in pps^2
- motorState_t L6474_GetDeviceState(void); //Return the device state
- uint8_t L6474_GetFwVersion(void); //Return the FW version
- int32_t L6474_GetMark(void); //Return the mark position
- uint16_t L6474_GetMaxSpeed(void); //Return the max speed in pps
- uint16_t L6474_GetMinSpeed(void); //Return the min speed in pps
- int32_t L6474_GetPosition(void); //Return the ABS_POSITION (32b signed)
- void L6474_GoHome(void); //Move to the home position
- void L6474_GoMark(void); //Move to the Mark position
- void L6474_GoTo(int32_t targetPosition); //Go to the specified position
- void L6474_HardStop(void); //Stop the motor and disable the power bridge
- void L6474_Move(motorDir_t direction, uint32_t stepCount); //Move the motor of the specified number of steps
- void L6474_Run(motorDir_t direction); //Run the motor
- bool L6474_SetAcceleration(uint16_t newAcc); //Set the acceleration in pps^2
- bool L6474_SetDeceleration(uint16_t newDec); //Set the deceleration in pps^2
- void L6474_SetHome(void); //Set current position to be the home position
- void L6474_SetMark(void); //Set current position to be the Markposition
- bool L6474_SetMaxSpeed(uint16_t newMaxSpeed); //Set the max speed in pps
- bool L6474_SetMinSpeed(uint16_t newMinSpeed); //Set the min speed in pps
- bool L6474_SoftStop(void); //Progressively stops the motor
- void L6474_WaitWhileActive(void); //Wait for the device state becomes Inactive
- void L6474_CmdDisable(void); //Send the L6474_DISABLE command
- void L6474_CmdEnable(void); //Send the L6474_ENABLE command
- uint32_t L6474_CmdGetParam(uint32_t param); //Send the L6474_GET_PARAM command
- uint16_t L6474_CmdGetStatus(void); //Send the L6474_GET_STATUS command
- void L6474_CmdNop(void); //Send the L6474_NOP command
- void L6474_CmdSetParam(uint32_t param, uint32_t value); //Send the L6474_SET_PARAM command
- uint16_t L6474_ReadStatusRegister(void); //Read the L6474_STATUS register without clearing the flags
- void L6474_SelectStepMode(motorStepMode_t stepMod); //Step mode selection
- motorDir_t L6474_GetDirection(void); //Get the direction of rotation
- void L6474_SetDirection(motorDir_t direction); //Set the direction of rotation
+ void L6474_AttachErrorHandler(void (*callback)(uint16_t error));
+ DrvStatusTypeDef L6474_Init(MOTOR_InitTypeDef *init);
+ DrvStatusTypeDef L6474_ReadID(uint8_t *id);
+ uint16_t L6474_GetAcceleration(void);
+ uint16_t L6474_GetCurrentSpeed(void);
+ uint16_t L6474_GetDeceleration(void);
+ motorState_t L6474_GetDeviceState(void);
+ uint8_t L6474_GetFwVersion(void);
+ int32_t L6474_GetMark(void);
+ uint16_t L6474_GetMaxSpeed(void);
+ uint16_t L6474_GetMinSpeed(void);
+ int32_t L6474_GetPosition(void);
+ void L6474_GoHome(void);
+ void L6474_GoMark(void);
+ void L6474_GoTo(int32_t targetPosition);
+ void L6474_HardStop(void);
+ void L6474_Move(motorDir_t direction, uint32_t stepCount);
+ void L6474_Run(motorDir_t direction);
+ bool L6474_SetAcceleration(uint16_t newAcc);
+ bool L6474_SetDeceleration(uint16_t newDec);
+ void L6474_SetHome(void);
+ void L6474_SetMark(void);
+ bool L6474_SetMaxSpeed(uint16_t newMaxSpeed);
+ bool L6474_SetMinSpeed(uint16_t newMinSpeed);
+ bool L6474_SoftStop(void);
+ void L6474_WaitWhileActive(void);
+ void L6474_CmdDisable(void);
+ void L6474_CmdEnable(void);
+ uint32_t L6474_CmdGetParam(L6474_Registers_t parameter);
+ uint16_t L6474_CmdGetStatus(void);
+ void L6474_CmdNop(void);
+ void L6474_CmdSetParam(L6474_Registers_t parameter, uint32_t value);
+ uint16_t L6474_ReadStatusRegister(void);
+ void L6474_SelectStepMode(motorStepMode_t stepMod);
+ motorDir_t L6474_GetDirection(void);
+ void L6474_SetDirection(motorDir_t direction);
void L6474_ApplySpeed(uint16_t newSpeed);
void L6474_ComputeSpeedProfile(uint32_t nbSteps);
- int32_t L6474_ConvertPosition(uint32_t abs_position_reg);
+ int32_t L6474_ConvertPosition(uint32_t abs_position_reg);
void L6474_ErrorHandler(uint16_t error);
- void L6474_FlagInterruptHandler(void);
void L6474_SendCommand(uint8_t param);
void L6474_SetRegisterToPredefinedValues(void);
- void L6474_WriteBytes(uint8_t *pByteToTransmit, uint8_t *pReceivedByte);
+ void L6474_WriteBytes(uint8_t *pByteToTransmit, uint8_t *pReceivedByte);
void L6474_SetDeviceParamsToPredefinedValues(void);
void L6474_StartMovement(void);
- void L6474_StepClockHandler(void);
+ void L6474_StepClockHandler(void);
uint8_t L6474_Tval_Current_to_Par(double Tval);
uint8_t L6474_Tmin_Time_to_Par(double Tmin);
@@ -503,99 +616,107 @@
* Implement here other I/O methods beyond those already implemented *
* above, which are declared extern within the component's header file. *
*------------------------------------------------------------------------*/
- /*
- * System call to make the CPU wait.
+ /**
+ * @brief Making the CPU wait.
+ * @param None.
+ * @retval None.
*/
void L6474_Delay(uint32_t delay)
{
- /* TO BE IMPLEMENTED BY USING TARGET PLATFORM'S APIs.*/
wait_ms(delay);
}
- /*
- * System call to enable interrupts.
+ /**
+ * @brief Enabling interrupts.
+ * @param None.
+ * @retval None.
*/
void L6474_EnableIrq(void)
{
- /* TO BE IMPLEMENTED BY USING TARGET PLATFORM'S APIs.*/
__enable_irq();
}
- /*
- * System call to disable interrupts.
+ /**
+ * @brief Disabling interrupts.
+ * @param None.
+ * @retval None.
*/
void L6474_DisableIrq(void)
{
- /* TO BE IMPLEMENTED BY USING TARGET PLATFORM'S APIs.*/
__disable_irq();
}
- /*
- * Sets the frequency of PWM.
- * The frequency is directly the current speed of the device.
+ /**
+ * @brief Setting the frequency of PWM.
+ * The frequency controls directly the speed of the device.
+ * @param newFreq the frequency of PWM.
+ * @retval None.
*/
void L6474_PwmSetFreq(uint16_t newFreq)
{
- /* TO BE IMPLEMENTED BY USING TARGET PLATFORM'S APIs.*/
double period = 1.0f / newFreq;
pwm.period(period);
pwm.write(0.5f);
ticker.attach(this, &L6474::L6474_StepClockHandler, period);
}
- /*
- * Initialises the PWM uses by the specified device.
- * + Device 0 uses PWM1 based on timer 1;
- * + Device 1 uses PWM2 based on timer 2;
- * + Device 2 uses PWM3 based on timer 3.
+ /**
+ * @brief Initialising the PWM.
+ * @param None.
+ * @retval None.
*/
- void L6474_PwmInit(void)
- {
- /* TO BE IMPLEMENTED BY USING TARGET PLATFORM'S APIs.*/
- }
+ void L6474_PwmInit(void) {}
- /*
- * Stops the PWM.
+ /**
+ * @brief Stopping the PWM.
+ * @param None.
+ * @retval None.
*/
void L6474_PwmStop(void)
{
- /* TO BE IMPLEMENTED BY USING TARGET PLATFORM'S APIs.*/
pwm.write(0.0f);
ticker.detach();
}
- /*
- * Puts the device in standby mode.
+ /**
+ * @brief Putting the device in standby mode.
+ * @param None.
+ * @retval None.
*/
void L6474_ReleaseReset(void)
{
- /* TO BE IMPLEMENTED BY USING TARGET PLATFORM'S APIs. */
standby_reset = 1;
}
- /*
- * Puts the device in reset mode.
+ /**
+ * @brief Putting the device in reset mode.
+ * @param None.
+ * @retval None.
*/
void L6474_Reset(void)
{
- /* TO BE IMPLEMENTED BY USING TARGET PLATFORM'S APIs. */
standby_reset = 0;
}
- /*
- * Set the direction of rotation.
+ /**
+ * @brief Setting the direction of rotation.
+ * @param gpioState direction of rotation: "1" for forward, "0" for backward.
+ * @retval None.
*/
void L6474_SetDirectionGpio(uint8_t gpioState)
{
direction = gpioState;
}
- /*
- * Write and read bytes to/from the component through the SPI at the same time.
+ /**
+ * @brief Writing and reading bytes to/from the component through the SPI at the same time.
+ * @param[in] pByteToTransmit pointer to the buffer of data to send.
+ * @param[out] pReceivedByte pointer to the buffer to read data into.
+ * @retval "0" in case of success, "1" otherwise.
*/
uint8_t L6474_SpiWriteBytes(uint8_t *pByteToTransmit, uint8_t *pReceivedByte)
{
- return (uint8_t) ReadWrite(pReceivedByte, pByteToTransmit, numberOfDevices);
+ return (uint8_t) (ReadWrite(pReceivedByte, pByteToTransmit, numberOfDevices) == COMPONENT_OK ? 0 : 1);
}
@@ -611,6 +732,9 @@
/* Type. */
uint8_t type;
+ /* Flag Interrupt. */
+ InterruptIn flag_irq;
+
/* Standby/reset pin. */
DigitalOut standby_reset;
@@ -650,15 +774,21 @@
* float T0_degC; *
* float T1_degC; *
*------------------------------------------------------------------------*/
- void (*flagInterruptCallback)(void);
void (*errorHandlerCallback)(uint16_t error);
deviceParams_t devicePrm;
uint8_t deviceInstance;
+
+ /* Static data. */
static uint8_t numberOfDevices;
+ static uint8_t spiTxBursts[L6474_CMD_ARG_MAX_NB_BYTES][MAX_NUMBER_OF_DEVICES];
+ static uint8_t spiRxBursts[L6474_CMD_ARG_MAX_NB_BYTES][MAX_NUMBER_OF_DEVICES];
+
+
+public:
+
+ /* Static data. */
static bool spiPreemtionByIsr;
static bool isrFlag;
- static uint8_t spiTxBursts[L6474_CMD_ARG_MAX_NB_BYTES][MAX_NUMBER_OF_DEVICES];
- static uint8_t spiRxBursts[L6474_CMD_ARG_MAX_NB_BYTES][MAX_NUMBER_OF_DEVICES];
};
#endif // __L6474_CLASS_H
