Driver of ST X-NUCLEO-OUT01A1 Industrial Digital output expansion board based on ISO8200BQ component.

Dependents:   HelloWorld_OUT01A1

Committer:
nikapov
Date:
Mon Feb 12 17:22:42 2018 +0000
Revision:
0:c77427077cff
Initial revision.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nikapov 0:c77427077cff 1 /**
nikapov 0:c77427077cff 2 ******************************************************************************
nikapov 0:c77427077cff 3 * @file ISO8200BQ.cpp
nikapov 0:c77427077cff 4 * @author ST CLab
nikapov 0:c77427077cff 5 * @version V1.0.0
nikapov 0:c77427077cff 6 * @date 1 February 2018
nikapov 0:c77427077cff 7 * @brief Implementation of a ISO8200BQ class
nikapov 0:c77427077cff 8 ******************************************************************************
nikapov 0:c77427077cff 9 * @attention
nikapov 0:c77427077cff 10 *
nikapov 0:c77427077cff 11 * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
nikapov 0:c77427077cff 12 *
nikapov 0:c77427077cff 13 * Redistribution and use in source and binary forms, with or without modification,
nikapov 0:c77427077cff 14 * are permitted provided that the following conditions are met:
nikapov 0:c77427077cff 15 * 1. Redistributions of source code must retain the above copyright notice,
nikapov 0:c77427077cff 16 * this list of conditions and the following disclaimer.
nikapov 0:c77427077cff 17 * 2. Redistributions in binary form must reproduce the above copyright notice,
nikapov 0:c77427077cff 18 * this list of conditions and the following disclaimer in the documentation
nikapov 0:c77427077cff 19 * and/or other materials provided with the distribution.
nikapov 0:c77427077cff 20 * 3. Neither the name of STMicroelectronics nor the names of its contributors
nikapov 0:c77427077cff 21 * may be used to endorse or promote products derived from this software
nikapov 0:c77427077cff 22 * without specific prior written permission.
nikapov 0:c77427077cff 23 *
nikapov 0:c77427077cff 24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
nikapov 0:c77427077cff 25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
nikapov 0:c77427077cff 26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
nikapov 0:c77427077cff 27 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
nikapov 0:c77427077cff 28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
nikapov 0:c77427077cff 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
nikapov 0:c77427077cff 30 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
nikapov 0:c77427077cff 31 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
nikapov 0:c77427077cff 32 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
nikapov 0:c77427077cff 33 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
nikapov 0:c77427077cff 34 *
nikapov 0:c77427077cff 35 ******************************************************************************
nikapov 0:c77427077cff 36 */
nikapov 0:c77427077cff 37
nikapov 0:c77427077cff 38 /* Includes ------------------------------------------------------------------*/
nikapov 0:c77427077cff 39
nikapov 0:c77427077cff 40 #include "ISO8200BQ.h"
nikapov 0:c77427077cff 41
nikapov 0:c77427077cff 42
nikapov 0:c77427077cff 43 /* Class Implementation ------------------------------------------------------*/
nikapov 0:c77427077cff 44
nikapov 0:c77427077cff 45 /** Constructor
nikapov 0:c77427077cff 46 * @param OUT_EN Output enable pin.
nikapov 0:c77427077cff 47 * @param N_SYNC Input-to-output synchronization signal. Active low.
nikapov 0:c77427077cff 48 * @param N_LOAD Load input data signal. Active low.
nikapov 0:c77427077cff 49 */
nikapov 0:c77427077cff 50
nikapov 0:c77427077cff 51 ISO8200BQ::ISO8200BQ(PinName OUT_EN, PinName N_SYNC,
nikapov 0:c77427077cff 52 PinName N_LOAD) : _out_en(OUT_EN), _n_sync(N_SYNC), _n_load(N_LOAD)
nikapov 0:c77427077cff 53 {
nikapov 0:c77427077cff 54 /* start with the component disabled*/
nikapov 0:c77427077cff 55 _out_en = 0;
nikapov 0:c77427077cff 56 };
nikapov 0:c77427077cff 57
nikapov 0:c77427077cff 58 /**
nikapov 0:c77427077cff 59 * @brief Getting the ID of the component.
nikapov 0:c77427077cff 60 * @param id Pointer to an allocated variable to store the ID into.
nikapov 0:c77427077cff 61 * @retval "0" in case of success, an error code otherwise.
nikapov 0:c77427077cff 62 */
nikapov 0:c77427077cff 63 int ISO8200BQ::read_id(uint8_t *id = NULL)
nikapov 0:c77427077cff 64 {
nikapov 0:c77427077cff 65 return 0;
nikapov 0:c77427077cff 66 }
nikapov 0:c77427077cff 67
nikapov 0:c77427077cff 68 /**
nikapov 0:c77427077cff 69 *
nikapov 0:c77427077cff 70 * @brief One time device initialization
nikapov 0:c77427077cff 71 *
nikapov 0:c77427077cff 72 * @param void
nikapov 0:c77427077cff 73 * @retval "0" in case of success, an error code otherwise.
nikapov 0:c77427077cff 74 */
nikapov 0:c77427077cff 75 int ISO8200BQ::init(void *init)
nikapov 0:c77427077cff 76 {
nikapov 0:c77427077cff 77 /* initalize with SYNC and LOAD signals disabled*/
nikapov 0:c77427077cff 78 _n_sync = _n_load = 1;
nikapov 0:c77427077cff 79 return 0;
nikapov 0:c77427077cff 80 }
nikapov 0:c77427077cff 81
nikapov 0:c77427077cff 82 /**
nikapov 0:c77427077cff 83 *
nikapov 0:c77427077cff 84 * @brief Enable/Disable all outputs
nikapov 0:c77427077cff 85 *
nikapov 0:c77427077cff 86 * @param enable Enable the outputs when true, disable otherwise
nikapov 0:c77427077cff 87 */
nikapov 0:c77427077cff 88 void ISO8200BQ::enable_outputs(bool enable) {
nikapov 0:c77427077cff 89 _out_en = enable ? 1 : 0;
nikapov 0:c77427077cff 90 }
nikapov 0:c77427077cff 91
nikapov 0:c77427077cff 92 /**
nikapov 0:c77427077cff 93 *
nikapov 0:c77427077cff 94 * @brief Get outputs enabling status
nikapov 0:c77427077cff 95 *
nikapov 0:c77427077cff 96 * @retval Returns true if outputs are enabled, false otherwise
nikapov 0:c77427077cff 97 */
nikapov 0:c77427077cff 98 bool ISO8200BQ::are_outputs_enabled (void) {
nikapov 0:c77427077cff 99 return (_out_en == 0) ? false : true;
nikapov 0:c77427077cff 100 }
nikapov 0:c77427077cff 101
nikapov 0:c77427077cff 102 /**
nikapov 0:c77427077cff 103 *
nikapov 0:c77427077cff 104 * @brief Load input pin status into input buffer (synch mode)
nikapov 0:c77427077cff 105 *
nikapov 0:c77427077cff 106 */
nikapov 0:c77427077cff 107 void ISO8200BQ::sync_mode_load_inputs (void) {
nikapov 0:c77427077cff 108 _n_load = 1; //disabled
nikapov 0:c77427077cff 109 _n_sync = 1; //disabled
nikapov 0:c77427077cff 110 wait_us(20); //tdis(sync)
nikapov 0:c77427077cff 111 _n_load = 0; //enabled
nikapov 0:c77427077cff 112 }
nikapov 0:c77427077cff 113
nikapov 0:c77427077cff 114 /**
nikapov 0:c77427077cff 115 *
nikapov 0:c77427077cff 116 * @brief Update outputs accordingly to input buffer (synch mode)
nikapov 0:c77427077cff 117 *
nikapov 0:c77427077cff 118 */
nikapov 0:c77427077cff 119 void ISO8200BQ::sync_mode_update_outputs(void) {
nikapov 0:c77427077cff 120 wait_us(100); // tw(load)
nikapov 0:c77427077cff 121 _n_load = 1; //disabled
nikapov 0:c77427077cff 122 wait_us(1); //tsu(load)
nikapov 0:c77427077cff 123 _n_sync = 0; //enabled
nikapov 0:c77427077cff 124 wait_us(100); // tw(sync)
nikapov 0:c77427077cff 125 _n_sync = 1; // trigger output updates (on rising edge)
nikapov 0:c77427077cff 126 }
nikapov 0:c77427077cff 127
nikapov 0:c77427077cff 128 /**
nikapov 0:c77427077cff 129 *
nikapov 0:c77427077cff 130 * @brief Update outputs accordingly to input pins (direct mode)
nikapov 0:c77427077cff 131 *
nikapov 0:c77427077cff 132 */
nikapov 0:c77427077cff 133 void ISO8200BQ::direct_mode (void) {
nikapov 0:c77427077cff 134 _n_load = 0; //enabled
nikapov 0:c77427077cff 135 _n_sync = 0; //enabled
nikapov 0:c77427077cff 136 wait_us(1); //tinld
nikapov 0:c77427077cff 137 }
nikapov 0:c77427077cff 138
nikapov 0:c77427077cff 139