/** * @brief Starts a DAC conversion. * @details Starts an asynchronous conversion operation. * @note The buffer is organized as a matrix of M*N elements where M is the * channels number configured into the conversion group and N is the * buffer depth. The samples are sequentially written into the buffer * with no gaps. * * @param[in] dacp pointer to the @p DACDriver object * @param[in] grpp pointer to a @p DACConversionGroup object * @param[in] samples pointer to the samples buffer * @param[in] depth buffer depth (matrix rows number). The buffer depth * must be one or an even number. * * @api */ void dacStartConversion(DACDriver *dacp, const DACConversionGroup *grpp, const dacsample_t *samples, size_t depth) { osalSysLock(); dacStartConversionI(dacp, grpp, samples, depth); osalSysUnlock(); }
/** * @brief Performs a DAC conversion. * @details Performs a synchronous conversion operation. * @note The buffer is organized as a matrix of M*N elements where M is the * channels number configured into the conversion group and N is the * buffer depth. The samples are sequentially written into the buffer * with no gaps. * * @param[in] dacp pointer to the @p DACDriver object * @param[in] grpp pointer to a @p DACConversionGroup object * @param[out] samples pointer to the samples buffer * @param[in] depth buffer depth (matrix rows number). The buffer depth * must be one or an even number. * @return The operation result. * @retval MSG_OK Conversion finished. * @retval MSG_RESET The conversion has been stopped using * @p acdStopConversion() or @p acdStopConversionI(), * the result buffer may contain incorrect data. * @retval MSG_TIMEOUT The conversion has been stopped because an hardware * error. * * @api */ msg_t dacConvert(DACDriver *dacp, const DACConversionGroup *grpp, const dacsample_t *samples, size_t depth) { msg_t msg; osalSysLock(); dacStartConversionI(dacp, grpp, samples, depth); msg = osalThreadSuspendS(&dacp->thread); osalSysUnlock(); return msg; }
/** * @brief Performs a DAC conversion. * @details Performs a synchronous conversion operation. * @note The buffer is organized as a matrix of M*N elements where M is the * channels number configured into the conversion group and N is the * buffer depth. The samples are sequentially written into the buffer * with no gaps. * * @param[in] dacp pointer to the @p DACDriver object * @param[in] grpp pointer to a @p DACConversionGroup object * @param[out] samples pointer to the samples buffer * @param[in] depth buffer depth (matrix rows number). The buffer depth * must be one or an even number. * @return The operation result. * @retval RDY_OK Conversion finished. * @retval RDY_RESET The conversion has been stopped using * @p acdStopConversion() or @p acdStopConversionI(), * the result buffer may contain incorrect data. * @retval RDY_TIMEOUT The conversion has been stopped because an hardware * error. * * @api */ msg_t dacConvert(DACDriver *dacp, const DACConversionGroup *grpp, const dacsample_t *samples, size_t depth) { msg_t msg; chSysLock(); chDbgAssert(dacp->thread == NULL, "dacConvert(), #1", "already waiting"); dacStartConversionI(dacp, grpp, samples, depth); _dac_wait_s(dacp); msg = chThdSelf()->p_u.rdymsg; chSysUnlock(); return msg; }