Host software for the MAX30001 ECG, PACE, biopotential, bioimpedance, R-to-R peak sensor. Hosted on the MAX32630FTHR.

Dependencies:   SDFileSystem USBDevice max32630fthr

Fork of MAX30001-MAX32630FTHR-ECG-EVKIT by Maxim Integrated

Committer:
Emre.Eken@IST-LT-35101.maxim-ic.internal
Date:
Thu Apr 05 10:53:26 2018 +0300
Revision:
0:8e4630a71eb1
mbed os 5.8.1 compatible

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 2 /*******************************************************************************
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 3 * Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved.
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 4 *
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 5 * Permission is hereby granted, free of charge, to any person obtaining a
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 6 * copy of this software and associated documentation files (the "Software"),
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 7 * to deal in the Software without restriction, including without limitation
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 8 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 9 * and/or sell copies of the Software, and to permit persons to whom the
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 10 * Software is furnished to do so, subject to the following conditions:
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 11 *
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 12 * The above copyright notice and this permission notice shall be included
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 13 * in all copies or substantial portions of the Software.
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 14 *
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 16 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 17 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 18 * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 19 * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 20 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 21 * OTHER DEALINGS IN THE SOFTWARE.
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 22 *
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 23 * Except as contained in this notice, the name of Maxim Integrated
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 24 * Products, Inc. shall not be used except as stated in the Maxim Integrated
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 25 * Products, Inc. Branding Policy.
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 26 *
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 27 * The mere transfer of this software does not imply any licenses
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 28 * of trade secrets, proprietary technology, copyrights, patents,
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 29 * trademarks, maskwork rights, or any other form of intellectual
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 30 * property whatsoever. Maxim Integrated Products, Inc. retains all
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 31 * ownership rights.
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 32 *******************************************************************************
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 33 */
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 34
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 35 #include "mbed.h"
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 36 #include "MAX30001.h"
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 37
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 38 MAX30001 *MAX30001::instance = NULL;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 39
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 40
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 41 //******************************************************************************
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 42 MAX30001::MAX30001(PinName mosi, PinName miso, PinName sclk, PinName cs)
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 43 {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 44 m_spi = new SPI(mosi, miso, sclk);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 45 m_cs = new DigitalOut(cs, 1);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 46
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 47 m_spi->frequency(3000000);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 48 spi_owner = true;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 49 functionpointer.attach(&spiHandler);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 50 onDataAvailableCallback = NULL;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 51 instance = this;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 52 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 53
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 54
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 55 //******************************************************************************
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 56 MAX30001::MAX30001(SPI *spi, DigitalOut *cs)
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 57 {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 58 m_spi = spi;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 59 m_cs = cs;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 60 spi->frequency(3000000);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 61 spi_owner = false;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 62 functionpointer.attach(&spiHandler);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 63 onDataAvailableCallback = NULL;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 64 instance = this;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 65 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 66
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 67
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 68 //******************************************************************************
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 69 MAX30001::~MAX30001(void) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 70
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 71 if (spi_owner) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 72 delete m_spi;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 73 delete m_cs;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 74 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 75 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 76
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 77 //******************************************************************************
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 78 int MAX30001::max30001_Rbias_FMSTR_Init(uint8_t En_rbias, uint8_t Rbiasv,
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 79 uint8_t Rbiasp, uint8_t Rbiasn,
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 80 uint8_t Fmstr) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 81 if (max30001_reg_read(CNFG_GEN, &max30001_cnfg_gen.all) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 82 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 83 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 84
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 85 max30001_cnfg_gen.bit.en_rbias = En_rbias;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 86 max30001_cnfg_gen.bit.rbiasv = Rbiasv;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 87 max30001_cnfg_gen.bit.rbiasp = Rbiasp;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 88 max30001_cnfg_gen.bit.rbiasn = Rbiasn;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 89 max30001_cnfg_gen.bit.fmstr = Fmstr;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 90
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 91 if (max30001_reg_write(CNFG_GEN, max30001_cnfg_gen.all) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 92 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 93 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 94 return 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 95 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 96
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 97 //******************************************************************************
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 98 int MAX30001::max30001_CAL_InitStart(uint8_t En_Vcal, uint8_t Vmode,
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 99 uint8_t Vmag, uint8_t Fcal, uint16_t Thigh,
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 100 uint8_t Fifty) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 101 // CNFG_CAL
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 102 if (max30001_reg_read(CNFG_CAL, &max30001_cnfg_cal.all) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 103 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 104 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 105
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 106 max30001_cnfg_cal.bit.vmode = Vmode;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 107 max30001_cnfg_cal.bit.vmag = Vmag;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 108 max30001_cnfg_cal.bit.fcal = Fcal;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 109 max30001_cnfg_cal.bit.thigh = Thigh;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 110 max30001_cnfg_cal.bit.fifty = Fifty;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 111
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 112 if (max30001_reg_write(CNFG_CAL, max30001_cnfg_cal.all) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 113 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 114 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 115
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 116 // RTOS uses a 32768HZ clock. 32768ticks represents 1secs. 1sec/10 =
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 117 // 100msecs.
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 118 wait(1.0 / 10.0);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 119
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 120 if (max30001_reg_read(CNFG_CAL, &max30001_cnfg_cal.all) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 121 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 122 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 123
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 124 max30001_cnfg_cal.bit.en_vcal = En_Vcal;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 125
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 126 if (max30001_reg_write(CNFG_CAL, max30001_cnfg_cal.all) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 127 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 128 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 129
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 130 // RTOS uses a 32768HZ clock. 32768ticks represents 1secs. 1sec/10 =
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 131 // 100msecs.
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 132 wait(1.0 / 10.0);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 133
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 134 return 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 135 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 136
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 137 //******************************************************************************
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 138 int MAX30001::max30001_CAL_Stop(void) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 139
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 140 if (max30001_reg_read(CNFG_CAL, &max30001_cnfg_cal.all) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 141 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 142 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 143
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 144 max30001_cnfg_cal.bit.en_vcal = 0; // Disable VCAL, all other settings are left unaffected
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 145
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 146 if (max30001_reg_write(CNFG_CAL, max30001_cnfg_cal.all) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 147 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 148 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 149
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 150 return 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 151 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 152 //******************************************************************************
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 153 //******************************************************************************
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 154 int MAX30001::max30001_INT_assignment(max30001_intrpt_Location_t en_enint_loc, max30001_intrpt_Location_t en_eovf_loc, max30001_intrpt_Location_t en_fstint_loc,
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 155 max30001_intrpt_Location_t en_dcloffint_loc, max30001_intrpt_Location_t en_bint_loc, max30001_intrpt_Location_t en_bovf_loc,
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 156 max30001_intrpt_Location_t en_bover_loc, max30001_intrpt_Location_t en_bundr_loc, max30001_intrpt_Location_t en_bcgmon_loc,
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 157 max30001_intrpt_Location_t en_pint_loc, max30001_intrpt_Location_t en_povf_loc, max30001_intrpt_Location_t en_pedge_loc,
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 158 max30001_intrpt_Location_t en_lonint_loc, max30001_intrpt_Location_t en_rrint_loc, max30001_intrpt_Location_t en_samp_loc,
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 159 max30001_intrpt_type_t intb_Type, max30001_intrpt_type_t int2b_Type)
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 160
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 161
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 162 {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 163 // INT1
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 164
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 165 if (max30001_reg_read(EN_INT, &max30001_en_int.all) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 166 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 167 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 168
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 169 // max30001_en_int2.bit.en_pint = 0b1; // Keep this off...
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 170
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 171 max30001_en_int.bit.en_eint = 0b1 & en_enint_loc;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 172 max30001_en_int.bit.en_eovf = 0b1 & en_eovf_loc;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 173 max30001_en_int.bit.en_fstint = 0b1 & en_fstint_loc;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 174
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 175 max30001_en_int.bit.en_dcloffint = 0b1 & en_dcloffint_loc;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 176 max30001_en_int.bit.en_bint = 0b1 & en_bint_loc;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 177 max30001_en_int.bit.en_bovf = 0b1 & en_bovf_loc;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 178
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 179 max30001_en_int.bit.en_bover = 0b1 & en_bover_loc;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 180 max30001_en_int.bit.en_bundr = 0b1 & en_bundr_loc;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 181 max30001_en_int.bit.en_bcgmon = 0b1 & en_bcgmon_loc;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 182
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 183 max30001_en_int.bit.en_pint = 0b1 & en_pint_loc;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 184 max30001_en_int.bit.en_povf = 0b1 & en_povf_loc;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 185 max30001_en_int.bit.en_pedge = 0b1 & en_pedge_loc;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 186
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 187 max30001_en_int.bit.en_lonint = 0b1 & en_lonint_loc;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 188 max30001_en_int.bit.en_rrint = 0b1 & en_rrint_loc;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 189 max30001_en_int.bit.en_samp = 0b1 & en_samp_loc;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 190
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 191 max30001_en_int.bit.intb_type = intb_Type;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 192
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 193 if (max30001_reg_write(EN_INT, max30001_en_int.all) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 194 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 195 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 196
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 197 // INT2
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 198
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 199 if (max30001_reg_read(EN_INT2, &max30001_en_int2.all) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 200 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 201 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 202
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 203 max30001_en_int2.bit.en_eint = 0b1 & (en_enint_loc >> 1);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 204 max30001_en_int2.bit.en_eovf = 0b1 & (en_eovf_loc >> 1);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 205 max30001_en_int2.bit.en_fstint = 0b1 & (en_fstint_loc >> 1);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 206
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 207 max30001_en_int2.bit.en_dcloffint = 0b1 & (en_dcloffint_loc >> 1);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 208 max30001_en_int2.bit.en_bint = 0b1 & (en_bint_loc >> 1);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 209 max30001_en_int2.bit.en_bovf = 0b1 & (en_bovf_loc >> 1);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 210
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 211 max30001_en_int2.bit.en_bover = 0b1 & (en_bover_loc >> 1);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 212 max30001_en_int2.bit.en_bundr = 0b1 & (en_bundr_loc >> 1);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 213 max30001_en_int2.bit.en_bcgmon = 0b1 & (en_bcgmon_loc >> 1);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 214
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 215 max30001_en_int2.bit.en_pint = 0b1 & (en_pint_loc >> 1);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 216 max30001_en_int2.bit.en_povf = 0b1 & (en_povf_loc >> 1);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 217 max30001_en_int2.bit.en_pedge = 0b1 & (en_pedge_loc >> 1);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 218
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 219 max30001_en_int2.bit.en_lonint = 0b1 & (en_lonint_loc >> 1);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 220 max30001_en_int2.bit.en_rrint = 0b1 & (en_rrint_loc >> 1);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 221 max30001_en_int2.bit.en_samp = 0b1 & (en_samp_loc >> 1);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 222
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 223 max30001_en_int2.bit.intb_type = int2b_Type;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 224
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 225 if (max30001_reg_write(EN_INT2, max30001_en_int2.all) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 226 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 227 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 228
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 229 return 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 230 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 231
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 232 //******************************************************************************
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 233 int MAX30001::max30001_ECG_InitStart(uint8_t En_ecg, uint8_t Openp,
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 234 uint8_t Openn, uint8_t Pol,
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 235 uint8_t Calp_sel, uint8_t Caln_sel,
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 236 uint8_t E_fit, uint8_t Rate, uint8_t Gain,
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 237 uint8_t Dhpf, uint8_t Dlpf) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 238
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 239 // CNFG_EMUX
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 240
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 241 if (max30001_reg_read(CNFG_EMUX, &max30001_cnfg_emux.all) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 242 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 243 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 244
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 245 max30001_cnfg_emux.bit.openp = Openp;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 246 max30001_cnfg_emux.bit.openn = Openn;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 247 max30001_cnfg_emux.bit.pol = Pol;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 248 max30001_cnfg_emux.bit.calp_sel = Calp_sel;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 249 max30001_cnfg_emux.bit.caln_sel = Caln_sel;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 250
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 251 if (max30001_reg_write(CNFG_EMUX, max30001_cnfg_emux.all) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 252 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 253 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 254
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 255 /**** ENABLE CHANNELS ****/
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 256 // CNFG_GEN
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 257
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 258 if (max30001_reg_read(CNFG_GEN, &max30001_cnfg_gen.all) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 259 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 260 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 261
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 262 max30001_cnfg_gen.bit.en_ecg = En_ecg; // 0b1
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 263
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 264 // fmstr is default
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 265
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 266 if (max30001_reg_write(CNFG_GEN, max30001_cnfg_gen.all) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 267 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 268 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 269
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 270 /**** Wait for PLL Lock & References to settle down ****/
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 271
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 272 max30001_timeout = 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 273
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 274 do {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 275 if (max30001_reg_read(STATUS, &max30001_status.all) == -1) // Wait and spin for PLL to lock...
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 276 {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 277 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 278 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 279 } while (max30001_status.bit.pllint == 1 && max30001_timeout++ <= 1000);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 280
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 281 // MNGR_INT
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 282
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 283 if (max30001_reg_read(MNGR_INT, &max30001_mngr_int.all) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 284 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 285 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 286
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 287 max30001_mngr_int.bit.e_fit = E_fit; // 31
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 288
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 289 if (max30001_reg_write(MNGR_INT, max30001_mngr_int.all) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 290 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 291 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 292
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 293 // CNFG_ECG
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 294
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 295 if (max30001_reg_read(CNFG_ECG, &max30001_cnfg_ecg.all) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 296 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 297 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 298
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 299 max30001_cnfg_ecg.bit.rate = Rate;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 300 max30001_cnfg_ecg.bit.gain = Gain;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 301 max30001_cnfg_ecg.bit.dhpf = Dhpf;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 302 max30001_cnfg_ecg.bit.dlpf = Dlpf;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 303
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 304 if (max30001_reg_write(CNFG_ECG, max30001_cnfg_ecg.all) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 305 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 306 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 307
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 308 return 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 309 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 310
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 311 //******************************************************************************
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 312 int MAX30001::max30001_ECGFast_Init(uint8_t Clr_Fast, uint8_t Fast, uint8_t Fast_Th) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 313 if (max30001_reg_read(MNGR_INT, &max30001_mngr_int.all) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 314 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 315 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 316
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 317 max30001_mngr_int.bit.clr_fast = Clr_Fast;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 318
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 319 if (max30001_reg_write(MNGR_INT, max30001_mngr_int.all) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 320 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 321 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 322
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 323 if (max30001_reg_read(MNGR_DYN, &max30001_mngr_dyn.all) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 324 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 325 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 326
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 327 max30001_mngr_dyn.bit.fast = Fast;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 328 max30001_mngr_dyn.bit.fast_th = Fast_Th;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 329
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 330 if (max30001_reg_write(MNGR_INT, max30001_mngr_int.all) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 331 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 332 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 333
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 334 return 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 335 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 336
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 337 //******************************************************************************
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 338 int MAX30001::max30001_Stop_ECG(void) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 339
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 340 if (max30001_reg_read(CNFG_GEN, &max30001_cnfg_gen.all) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 341 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 342 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 343
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 344 max30001_cnfg_gen.bit.en_ecg = 0; // Stop ECG
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 345
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 346 // fmstr is default
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 347
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 348 if (max30001_reg_write(CNFG_GEN, max30001_cnfg_gen.all) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 349 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 350 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 351
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 352 return 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 353 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 354
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 355 //******************************************************************************
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 356 int MAX30001::max30001_PACE_InitStart(uint8_t En_pace, uint8_t Clr_pedge,
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 357 uint8_t Pol, uint8_t Gn_diff_off,
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 358 uint8_t Gain, uint8_t Aout_lbw,
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 359 uint8_t Aout, uint8_t Dacp,
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 360 uint8_t Dacn) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 361
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 362 /**** SET MASTER FREQUENCY, ENABLE CHANNELS ****/
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 363
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 364 // CNFG_GEN
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 365
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 366 if (max30001_reg_read(CNFG_GEN, &max30001_cnfg_gen.all) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 367 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 368 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 369
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 370 max30001_cnfg_gen.bit.en_pace = En_pace; // 0b1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 371
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 372 if (max30001_reg_write(CNFG_GEN, max30001_cnfg_gen.all) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 373 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 374 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 375
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 376 /**** Wait for PLL Lock & References to settle down ****/
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 377 max30001_timeout = 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 378
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 379 do {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 380 if (max30001_reg_read(STATUS, &max30001_status.all) ==
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 381 -1) // Wait and spin for PLL to lock...
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 382 {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 383 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 384 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 385
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 386 } while (max30001_status.bit.pllint == 1 && max30001_timeout++ <= 1000);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 387
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 388 // MNGR_INT
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 389
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 390 if (max30001_reg_read(MNGR_INT, &max30001_mngr_int.all) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 391 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 392 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 393
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 394 max30001_mngr_int.bit.clr_pedge = Clr_pedge; // 0b0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 395
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 396 if (max30001_reg_write(MNGR_INT, max30001_mngr_int.all) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 397 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 398 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 399
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 400 /* Put: CNFG_PACE */
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 401
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 402 max30001_reg_read(CNFG_PACE, &max30001_cnfg_pace.all);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 403
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 404 max30001_cnfg_pace.bit.pol = Pol;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 405 max30001_cnfg_pace.bit.gn_diff_off = Gn_diff_off;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 406 max30001_cnfg_pace.bit.gain = Gain;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 407 max30001_cnfg_pace.bit.aout_lbw = Aout_lbw;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 408 max30001_cnfg_pace.bit.aout = Aout;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 409 max30001_cnfg_pace.bit.dacp = Dacp;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 410 max30001_cnfg_pace.bit.dacn = Dacn;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 411
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 412 max30001_reg_write(CNFG_PACE, max30001_cnfg_pace.all);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 413
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 414 return 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 415 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 416 //******************************************************************************
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 417 int MAX30001::max30001_Stop_PACE(void) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 418
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 419 if (max30001_reg_read(CNFG_GEN, &max30001_cnfg_gen.all) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 420 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 421 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 422
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 423 max30001_cnfg_gen.bit.en_pace = 0; // Stop PACE
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 424
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 425 if (max30001_reg_write(CNFG_GEN, max30001_cnfg_gen.all) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 426 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 427 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 428
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 429 return 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 430 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 431
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 432 //******************************************************************************
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 433 int MAX30001::max30001_BIOZ_InitStart(
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 434 uint8_t En_bioz, uint8_t Openp, uint8_t Openn, uint8_t Calp_sel,
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 435 uint8_t Caln_sel, uint8_t CG_mode, uint8_t B_fit, uint8_t Rate,
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 436 uint8_t Ahpf, uint8_t Ext_rbias, uint8_t Gain, uint8_t Dhpf, uint8_t Dlpf,
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 437 uint8_t Fcgen, uint8_t Cgmon, uint8_t Cgmag, uint8_t Phoff, uint8_t Inapow_mode) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 438
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 439 // CNFG_BMUX
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 440
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 441 if (max30001_reg_read(CNFG_BMUX, &max30001_cnfg_bmux.all) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 442 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 443 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 444
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 445 max30001_cnfg_bmux.bit.openp = Openp; // 0b1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 446 max30001_cnfg_bmux.bit.openn = Openn; // 0b1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 447 max30001_cnfg_bmux.bit.calp_sel = Calp_sel; // 0b10;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 448 max30001_cnfg_bmux.bit.caln_sel = Caln_sel; // 0b11;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 449 max30001_cnfg_bmux.bit.cg_mode = CG_mode; // 0b00;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 450
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 451 if (max30001_reg_write(CNFG_BMUX, max30001_cnfg_bmux.all) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 452 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 453 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 454
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 455 /**** SET MASTER FREQUENCY, ENABLE CHANNELS ****/
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 456
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 457 // CNFG_GEN
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 458
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 459 if (max30001_reg_read(CNFG_GEN, &max30001_cnfg_gen.all) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 460 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 461 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 462
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 463 max30001_cnfg_gen.bit.en_bioz = En_bioz;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 464
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 465 // fmstr is default
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 466
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 467 if (max30001_reg_write(CNFG_GEN, max30001_cnfg_gen.all) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 468 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 469 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 470
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 471 /**** Wait for PLL Lock & References to settle down ****/
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 472
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 473 max30001_timeout = 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 474
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 475 do {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 476 if (max30001_reg_read(STATUS, &max30001_status.all) ==
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 477 -1) // Wait and spin for PLL to lock...
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 478 {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 479 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 480 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 481
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 482 } while (max30001_status.bit.pllint == 1 && max30001_timeout++ <= 1000);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 483
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 484 /**** Start of CNFG_BIOZ ****/
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 485
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 486 // MNGR_INT
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 487
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 488 if (max30001_reg_read(MNGR_INT, &max30001_mngr_int.all) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 489 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 490 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 491
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 492 max30001_mngr_int.bit.b_fit = B_fit; //;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 493
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 494 if (max30001_reg_write(MNGR_INT, max30001_mngr_int.all) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 495 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 496 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 497
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 498 // CNFG_BIOZ
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 499
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 500 if (max30001_reg_read(CNFG_BIOZ, &max30001_cnfg_bioz.all) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 501 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 502 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 503
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 504 max30001_cnfg_bioz.bit.rate = Rate;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 505 max30001_cnfg_bioz.bit.ahpf = Ahpf;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 506 max30001_cnfg_bioz.bit.ext_rbias = Ext_rbias;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 507 max30001_cnfg_bioz.bit.gain = Gain;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 508 max30001_cnfg_bioz.bit.dhpf = Dhpf;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 509 max30001_cnfg_bioz.bit.dlpf = Dlpf;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 510 max30001_cnfg_bioz.bit.fcgen = Fcgen;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 511 max30001_cnfg_bioz.bit.cgmon = Cgmon;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 512 max30001_cnfg_bioz.bit.cgmag = Cgmag;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 513 max30001_cnfg_bioz.bit.phoff = Phoff;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 514 max30001_cnfg_bioz.bit.inapow_mode = Inapow_mode;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 515
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 516 if (max30001_reg_write(CNFG_BIOZ, max30001_cnfg_bioz.all) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 517 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 518 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 519
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 520 return 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 521 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 522
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 523 //******************************************************************************
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 524 int MAX30001::max30001_Stop_BIOZ(void) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 525
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 526 if (max30001_reg_read(CNFG_GEN, &max30001_cnfg_gen.all) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 527 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 528 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 529
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 530 max30001_cnfg_gen.bit.en_bioz = 0; // Stop BIOZ
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 531
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 532 if (max30001_reg_write(CNFG_GEN, max30001_cnfg_gen.all) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 533 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 534 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 535
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 536 return 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 537 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 538
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 539 //******************************************************************************
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 540 int MAX30001::max30001_BIOZ_InitBist(uint8_t En_bist, uint8_t Rnom,
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 541 uint8_t Rmod, uint8_t Fbist) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 542
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 543 // CNFG_BMUX
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 544
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 545 if (max30001_reg_read(CNFG_BMUX, &max30001_cnfg_bmux.all) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 546 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 547 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 548
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 549 max30001_cnfg_bmux.bit.en_bist = En_bist;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 550 max30001_cnfg_bmux.bit.rnom = Rnom;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 551 max30001_cnfg_bmux.bit.rmod = Rmod;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 552 max30001_cnfg_bmux.bit.fbist = Fbist;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 553
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 554 if (max30001_reg_write(CNFG_BMUX, max30001_cnfg_bmux.all) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 555 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 556 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 557
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 558 return 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 559 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 560 //******************************************************************************
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 561 int MAX30001::max30001_RtoR_InitStart(uint8_t En_rtor, uint8_t Wndw,
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 562 uint8_t Gain, uint8_t Pavg, uint8_t Ptsf,
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 563 uint8_t Hoff, uint8_t Ravg, uint8_t Rhsf,
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 564 uint8_t Clr_rrint) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 565
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 566 // MNGR_INT
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 567
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 568 if (max30001_reg_read(MNGR_INT, &max30001_mngr_int.all) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 569 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 570 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 571
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 572 max30001_mngr_int.bit.clr_rrint =
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 573 Clr_rrint; // 0b01 & 0b00 are for interrupt mode...
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 574 // 0b10 is for monitoring mode... it just overwrites the data...
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 575
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 576 if (max30001_reg_write(MNGR_INT, max30001_mngr_int.all) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 577 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 578 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 579
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 580 // RTOR1
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 581 if (max30001_reg_read(CNFG_RTOR1, &max30001_cnfg_rtor1.all) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 582 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 583 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 584
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 585 max30001_cnfg_rtor1.bit.wndw = Wndw;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 586 max30001_cnfg_rtor1.bit.gain = Gain;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 587 max30001_cnfg_rtor1.bit.en_rtor = En_rtor;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 588 max30001_cnfg_rtor1.bit.pavg = Pavg;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 589 max30001_cnfg_rtor1.bit.ptsf = Ptsf;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 590
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 591 if (max30001_reg_write(CNFG_RTOR1, max30001_cnfg_rtor1.all) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 592 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 593 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 594 // RTOR2
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 595
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 596 if (max30001_reg_read(CNFG_RTOR2, &max30001_cnfg_rtor2.all) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 597 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 598 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 599 max30001_cnfg_rtor2.bit.hoff = Hoff;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 600 max30001_cnfg_rtor2.bit.ravg = Ravg;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 601 max30001_cnfg_rtor2.bit.rhsf = Rhsf;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 602
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 603 if (max30001_reg_write(CNFG_RTOR2, max30001_cnfg_rtor2.all) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 604 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 605 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 606
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 607 return 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 608 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 609
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 610 //******************************************************************************
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 611 int MAX30001::max30001_Stop_RtoR(void) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 612
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 613 if (max30001_reg_read(CNFG_RTOR1, &max30001_cnfg_rtor1.all) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 614 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 615 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 616
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 617 max30001_cnfg_rtor1.bit.en_rtor = 0; // Stop RtoR
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 618
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 619 if (max30001_reg_write(CNFG_RTOR1, max30001_cnfg_rtor1.all) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 620 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 621 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 622
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 623 return 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 624 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 625
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 626 //******************************************************************************
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 627 int MAX30001::max30001_PLL_lock(void) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 628 // Spin to see PLLint become zero to indicate a lock.
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 629
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 630 max30001_timeout = 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 631
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 632 do {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 633 if (max30001_reg_read(STATUS, &max30001_status.all) ==
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 634 -1) // Wait and spin for PLL to lock...
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 635 {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 636 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 637 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 638
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 639 } while (max30001_status.bit.pllint == 1 && max30001_timeout++ <= 1000);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 640
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 641 return 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 642 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 643
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 644 //******************************************************************************
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 645 int MAX30001::max30001_sw_rst(void) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 646 // SW reset for the MAX30001 chip
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 647
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 648 if (max30001_reg_write(SW_RST, 0x000000) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 649 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 650 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 651
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 652 return 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 653 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 654
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 655 //******************************************************************************
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 656 int MAX30001::max30001_synch(void) { // For synchronization
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 657 if (max30001_reg_write(SYNCH, 0x000000) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 658 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 659 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 660 return 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 661 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 662
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 663 //******************************************************************************
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 664 int MAX30001::max300001_fifo_rst(void) { // Resets the FIFO
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 665 if (max30001_reg_write(FIFO_RST, 0x000000) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 666 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 667 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 668 return 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 669 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 670
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 671 //******************************************************************************
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 672 // int MAX30001::max30001_reg_write(uint8_t addr, uint32_t data)
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 673 int MAX30001::max30001_reg_write(MAX30001_REG_map_t addr, uint32_t data) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 674
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 675 uint8_t result[4];
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 676 uint8_t data_array[4];
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 677 int32_t success = 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 678
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 679 data_array[0] = (addr << 1) & 0xff;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 680
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 681 data_array[3] = data & 0xff;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 682 data_array[2] = (data >> 8) & 0xff;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 683 data_array[1] = (data >> 16) & 0xff;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 684
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 685 success = SPI_Transmit(&data_array[0], 4, &result[0], 4);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 686
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 687 if (success != 0) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 688 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 689 } else {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 690 return 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 691 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 692 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 693
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 694 //******************************************************************************
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 695 // int MAX30001::max30001_reg_read(uint8_t addr, uint32_t *return_data)
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 696 int MAX30001::max30001_reg_read(MAX30001_REG_map_t addr,
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 697 uint32_t *return_data) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 698 uint8_t result[4];
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 699 uint8_t data_array[1];
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 700 int32_t success = 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 701
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 702 data_array[0] = ((addr << 1) & 0xff) | 1; // For Read, Or with 1
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 703 success = SPI_Transmit(&data_array[0], 1, &result[0], 4);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 704 *return_data = /*result[0] + */ (uint32_t)(result[1] << 16) +
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 705 (result[2] << 8) + result[3];
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 706 if (success != 0) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 707 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 708 } else {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 709 return 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 710 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 711 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 712
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 713 //******************************************************************************
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 714 int MAX30001::max30001_Enable_DcLeadOFF_Init(int8_t En_dcloff, int8_t Ipol,
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 715 int8_t Imag, int8_t Vth) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 716 // the leads are not touching the body
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 717
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 718 // CNFG_EMUX, Set ECGP and ECGN for external hook up...
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 719
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 720 if (max30001_reg_read(CNFG_GEN, &max30001_cnfg_gen.all) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 721 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 722 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 723
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 724 max30001_cnfg_gen.bit.en_dcloff = En_dcloff;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 725 max30001_cnfg_gen.bit.ipol = Ipol;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 726 max30001_cnfg_gen.bit.imag = Imag;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 727 max30001_cnfg_gen.bit.vth = Vth;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 728
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 729 if (max30001_reg_write(CNFG_GEN, max30001_cnfg_gen.all) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 730 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 731 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 732
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 733 return 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 734 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 735
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 736 //******************************************************************************
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 737 int MAX30001::max30001_Disable_DcLeadOFF(void) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 738 if (max30001_reg_read(CNFG_GEN, &max30001_cnfg_gen.all) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 739 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 740 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 741
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 742 max30001_cnfg_gen.bit.en_dcloff = 0; // Turned off the dc lead off.
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 743
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 744 if (max30001_reg_write(CNFG_GEN, max30001_cnfg_gen.all) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 745 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 746 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 747
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 748 return 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 749 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 750
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 751 //******************************************************************************
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 752 int MAX30001::max30001_BIOZ_Enable_ACLeadOFF_Init(uint8_t En_bloff,
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 753 uint8_t Bloff_hi_it,
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 754 uint8_t Bloff_lo_it) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 755
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 756 // CNFG_GEN
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 757 if (max30001_reg_read(CNFG_GEN, &max30001_cnfg_gen.all) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 758 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 759 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 760
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 761 max30001_cnfg_gen.bit.en_bloff = En_bloff;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 762
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 763 if (max30001_reg_write(CNFG_GEN, max30001_cnfg_gen.all) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 764 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 765 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 766
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 767 // MNGR_DYN
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 768 if (max30001_reg_read(MNGR_DYN, &max30001_mngr_dyn.all) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 769 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 770 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 771
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 772 max30001_mngr_dyn.bit.bloff_hi_it = Bloff_hi_it;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 773 max30001_mngr_dyn.bit.bloff_lo_it = Bloff_lo_it;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 774
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 775 if (max30001_reg_write(MNGR_DYN, max30001_mngr_dyn.all) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 776 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 777 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 778
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 779 return 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 780 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 781
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 782 //******************************************************************************
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 783 int MAX30001::max30001_BIOZ_Disable_ACleadOFF(void) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 784 // CNFG_GEN
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 785 if (max30001_reg_read(CNFG_GEN, &max30001_cnfg_gen.all) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 786 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 787 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 788
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 789 max30001_cnfg_gen.bit.en_bloff = 0b0; // Turns of the BIOZ AC Lead OFF feature
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 790
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 791 if (max30001_reg_write(CNFG_GEN, max30001_cnfg_gen.all) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 792 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 793 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 794
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 795 return 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 796 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 797
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 798 //******************************************************************************
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 799 int MAX30001::max30001_BIOZ_Enable_BCGMON(void) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 800 // CNFG_BIOZ
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 801 if (max30001_reg_read(CNFG_BIOZ, &max30001_cnfg_bioz.all) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 802 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 803 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 804
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 805 max30001_cnfg_bioz.bit.cgmon = 1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 806
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 807 if (max30001_reg_write(CNFG_BIOZ, max30001_cnfg_bioz.all) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 808 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 809 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 810
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 811 max30001_reg_read(CNFG_BIOZ, &max30001_cnfg_bioz.all);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 812
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 813 return 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 814 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 815
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 816 #if 1
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 817 //******************************************************************************
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 818 int MAX30001::max30001_Enable_LeadON(int8_t Channel) // Channel: ECG = 0b01, BIOZ = 0b10, Disable = 0b00
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 819 {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 820
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 821 if (max30001_reg_read(CNFG_GEN, &max30001_cnfg_gen.all) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 822 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 823 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 824
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 825 max30001_cnfg_gen.bit.en_ecg = 0b0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 826 max30001_cnfg_gen.bit.en_bioz = 0b0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 827 max30001_cnfg_gen.bit.en_pace = 0b0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 828
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 829 max30001_cnfg_gen.bit.en_ulp_lon = Channel; // BIOZ ULP lead on detection...
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 830
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 831 if (max30001_reg_write(CNFG_GEN, max30001_cnfg_gen.all) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 832 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 833 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 834
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 835 max30001_reg_read(CNFG_GEN, &max30001_cnfg_gen.all);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 836
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 837 max30001_reg_read(STATUS, &max30001_status.all);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 838
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 839 return 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 840 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 841 //******************************************************************************
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 842 int MAX30001::max30001_Disable_LeadON(void) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 843
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 844 if (max30001_reg_read(CNFG_GEN, &max30001_cnfg_gen.all) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 845 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 846 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 847
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 848 max30001_cnfg_gen.bit.en_ulp_lon = 0b0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 849
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 850 if (max30001_reg_write(CNFG_GEN, max30001_cnfg_gen.all) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 851 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 852 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 853
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 854 return 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 855 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 856 #endif
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 857 //******************************************************************************
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 858 #define LEADOFF_SERVICE_TIME 0x2000 // 0x1000 = 1 second
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 859 #define LEADOFF_NUMSTATES 2
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 860 uint32_t leadoffState = 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 861 uint32_t max30001_LeadOffoldTime = 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 862 void MAX30001::max30001_ServiceLeadoff(uint32_t currentTime) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 863
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 864 uint32_t delta_Time;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 865
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 866 delta_Time = currentTime - max30001_LeadOffoldTime;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 867
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 868 if (delta_Time > LEADOFF_SERVICE_TIME) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 869 switch (leadoffState) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 870 case 0: /* switch to ECG DC Lead OFF */
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 871 max30001_Enable_DcLeadOFF_Init(0b01, 0b0, 0b001, 0b00);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 872 break;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 873
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 874 case 1: /* switch to BIOZ DC Lead OFF */
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 875 max30001_Enable_DcLeadOFF_Init(0b10, 0b0, 0b001, 0b00);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 876 break;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 877 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 878
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 879 leadoffState++;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 880 leadoffState %= LEADOFF_NUMSTATES;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 881
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 882 max30001_LeadOffoldTime = currentTime;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 883 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 884 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 885 //******************************************************************************
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 886 #define LEADON_SERVICE_TIME 0x2000 // 0x1000 = 1 second
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 887 #define LEADON_NUMSTATES 2
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 888 uint32_t leadOnState = 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 889 uint32_t max30001_LeadOnoldTime = 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 890 void MAX30001::max30001_ServiceLeadON(uint32_t currentTime) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 891
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 892 uint32_t delta_Time;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 893
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 894 delta_Time = currentTime - max30001_LeadOnoldTime;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 895
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 896 if (delta_Time > LEADON_SERVICE_TIME) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 897 switch (leadOnState) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 898 case 0: /* switch to ECG DC Lead ON */
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 899 max30001_Enable_LeadON(0b01);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 900 break;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 901
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 902 case 1: /* switch to BIOZ DC Lead ON */
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 903 max30001_Enable_LeadON(0b10);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 904 break;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 905 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 906
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 907 leadOnState++;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 908 leadOnState %= LEADON_NUMSTATES;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 909
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 910 max30001_LeadOnoldTime = currentTime;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 911 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 912 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 913
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 914 //******************************************************************************
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 915 int MAX30001::max30001_FIFO_LeadONOff_Read(void) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 916
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 917 uint8_t result[32 * 3]; // 32words - 3bytes each
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 918 uint8_t paceResult[6 * 3];
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 919 uint8_t data_array[4];
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 920 int32_t success = 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 921 int i, j;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 922
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 923 uint32_t total_databytes;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 924 uint8_t i_index;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 925 uint8_t data_chunk;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 926 uint8_t loop_logic;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 927
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 928 uint8_t etag, ptag, btag;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 929
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 930 uint8_t adr;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 931
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 932 //int8_t ReadAllPaceOnce;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 933 bool anyPaceDetected = false;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 934 static uint8_t dcloffint_OneShot = 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 935 static uint8_t acloffint_OneShot = 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 936 static uint8_t bcgmon_OneShot = 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 937 static uint8_t acleadon_OneShot = 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 938
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 939 int8_t ret_val;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 940
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 941 if (max30001_status.bit.eint == 1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 942 adr = ECG_FIFO_BURST;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 943 data_array[0] = ((adr << 1) & 0xff) | 1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 944
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 945 // The SPI routine only sends out data of 32 bytes in size. Therefore the
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 946 // data is being read in
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 947 // smaller chunks in this routine...
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 948
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 949 total_databytes = (max30001_mngr_int.bit.e_fit + 1) * 3;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 950
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 951 i_index = 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 952 loop_logic = 1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 953
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 954 while (loop_logic) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 955 if (total_databytes > 30) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 956 data_chunk = 30;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 957 total_databytes = total_databytes - 30;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 958 } else {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 959 data_chunk = total_databytes;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 960 loop_logic = 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 961 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 962
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 963 /* The extra 1 byte is for the extra byte that comes out of the SPI */
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 964 success = SPI_Transmit(&data_array[0], 1, &result[i_index], (data_chunk + 1)); // Make a copy of the FIFO over here...
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 965
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 966 if (success != 0) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 967 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 968 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 969
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 970 /* This is important, because every transaction above creates an empty
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 971 * redundant data at result[0] */
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 972 for (j = i_index; j < (data_chunk + i_index); j++) /* get rid of the 1 extra byte by moving the whole array up one */
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 973 {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 974 result[j] = result[j + 1];
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 975 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 976
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 977 i_index = i_index + 30; /* point to the next array location to put the data in */
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 978 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 979
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 980 //ReadAllPaceOnce = 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 981
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 982 /* Put the content of the FIFO based on the EFIT value, We ignore the
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 983 * result[0] and start concatenating indexes: 1,2,3 - 4,5,6 - 7,8,9 - */
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 984 for (i = 0, j = 0; i < max30001_mngr_int.bit.e_fit + 1; i++, j = j + 3) // index1=23-16 bit, index2=15-8 bit, index3=7-0 bit
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 985 {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 986 max30001_ECG_FIFO_buffer[i] = ((uint32_t)result[j] << 16) + (result[j + 1] << 8) + result[j + 2];
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 987
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 988 etag = (0b00111000 & result[j + 2]) >> 3;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 989 ptag = 0b00000111 & result[j + 2];
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 990
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 991 if (ptag != 0b111 ){//&& ReadAllPaceOnce == 0) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 992
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 993 //ReadAllPaceOnce = 1; // This will prevent extra read of PACE, once group
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 994 // 0-5 is read ONCE.
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 995 readPace(ptag, paceResult); // BUG: result data from ECG is being overwritten by the PACE data
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 996 anyPaceDetected = true;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 997 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 998 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 999
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1000 if (anyPaceDetected)
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1001 dataAvailable(MAX30001_DATA_PACE, max30001_PACE, 18); // Send out the Pace data once only
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1002
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1003 if (etag != 0b110) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1004
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1005 dataAvailable(MAX30001_DATA_ECG, max30001_ECG_FIFO_buffer, (max30001_mngr_int.bit.e_fit + 1));
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1006 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1007
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1008 } /* End of ECG init */
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1009
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1010 /* RtoR */
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1011
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1012 if (max30001_status.bit.rrint == 1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1013 if (max30001_reg_read(RTOR, &max30001_RtoR_data) == -1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1014 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1015 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1016
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1017 max30001_RtoR_data = (0x00FFFFFF & max30001_RtoR_data) >> 10;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1018
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1019 hspValMax30001.R2R = (uint16_t)max30001_RtoR_data;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1020 hspValMax30001.fmstr = (uint16_t)max30001_cnfg_gen.bit.fmstr;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1021
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1022 dataAvailable(MAX30001_DATA_RTOR, &max30001_RtoR_data, 1);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1023 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1024
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1025 // Handling BIOZ data...
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1026
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1027 if (max30001_status.bit.bint == 1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1028 adr = 0x22;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1029 data_array[0] = ((adr << 1) & 0xff) | 1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1030
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1031 /* [(BFIT+1)*3byte]+1extra byte due to the addr */
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1032
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1033 if (SPI_Transmit(&data_array[0], 1, &result[0],((max30001_mngr_int.bit.b_fit + 1) * 3) + 1) == -1) // Make a copy of the FIFO over here...
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1034
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1035 {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1036 return -1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1037 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1038
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1039 btag = 0b00000111 & result[3];
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1040
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1041 /* Put the content of the FIFO based on the BFIT value, We ignore the
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1042 * result[0] and start concatenating indexes: 1,2,3 - 4,5,6 - 7,8,9 - */
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1043 for (i = 0, j = 0; i < max30001_mngr_int.bit.b_fit + 1; i++, j = j + 3) // index1=23-16 bit, index2=15-8 bit, index3=7-0 bit
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1044 {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1045 max30001_BIOZ_FIFO_buffer[i] = ((uint32_t)result[j + 1] << 16) + (result[j + 2] << 8) + result[j + 3];
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1046 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1047
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1048 if (btag != 0b110) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1049 dataAvailable(MAX30001_DATA_BIOZ, max30001_BIOZ_FIFO_buffer, 8);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1050 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1051 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1052
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1053 ret_val = 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1054
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1055 if (max30001_status.bit.dcloffint == 1) // ECG/BIOZ Lead Off
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1056 {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1057 dcloffint_OneShot = 1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1058 max30001_DCLeadOff = 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1059 max30001_DCLeadOff = max30001_DCLeadOff | (max30001_cnfg_gen.bit.en_dcloff << 8) | (max30001_status.all & 0x00000F);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1060 dataAvailable(MAX30001_DATA_LEADOFF_DC, &max30001_DCLeadOff, 1);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1061
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1062 ret_val = 0b100;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1063
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1064 } else if (dcloffint_OneShot == 1 && max30001_status.bit.dcloffint == 0) // Just send once when it comes out of dc lead off
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1065 {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1066 max30001_DCLeadOff = 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1067 max30001_DCLeadOff = max30001_DCLeadOff | (max30001_cnfg_gen.bit.en_dcloff << 8) | (max30001_status.all & 0x00000F);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1068 dataAvailable(MAX30001_DATA_LEADOFF_DC, &max30001_DCLeadOff, 1);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1069 dcloffint_OneShot = 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1070 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1071
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1072 if (max30001_status.bit.bover == 1 || max30001_status.bit.bundr == 1) // BIOZ AC Lead Off
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1073 {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1074 acloffint_OneShot = 1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1075 max30001_ACLeadOff = 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1076 max30001_ACLeadOff =
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1077 max30001_ACLeadOff | ((max30001_status.all & 0x030000) >> 16);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1078 dataAvailable(MAX30001_DATA_LEADOFF_AC, &max30001_ACLeadOff, 1);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1079
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1080 ret_val = 0b1000;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1081 } else if (acloffint_OneShot == 1 && max30001_status.bit.bover == 0 && max30001_status.bit.bundr == 0) // Just send once when it comes out of ac lead off
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1082 {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1083 max30001_ACLeadOff = 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1084 max30001_ACLeadOff = max30001_ACLeadOff | ((max30001_status.all & 0x030000) >> 16);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1085 dataAvailable(MAX30001_DATA_LEADOFF_AC, &max30001_ACLeadOff, 1);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1086 acloffint_OneShot = 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1087 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1088
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1089 if (max30001_status.bit.bcgmon == 1) // BIOZ BCGMON check
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1090 {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1091 bcgmon_OneShot = 1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1092 max30001_bcgmon = 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1093 max30001_bcgmon = max30001_bcgmon | ((max30001_status.all & 0x000030) >> 4);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1094 dataAvailable(MAX30001_DATA_BCGMON, &max30001_bcgmon, 1);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1095
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1096 ret_val = 0b10000;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1097 } else if (bcgmon_OneShot == 1 && max30001_status.bit.bcgmon == 0) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1098 max30001_bcgmon = 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1099 max30001_bcgmon = max30001_bcgmon | ((max30001_status.all & 0x000030) >> 4);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1100 bcgmon_OneShot = 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1101 dataAvailable(MAX30001_DATA_BCGMON, &max30001_bcgmon, 1);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1102 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1103
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1104 #if 0
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1105 if(max30001_status.bit.lonint == 1) // AC LeadON Check
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1106 {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1107 max30001_LeadOn = 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1108 max30001_reg_read(STATUS,&max30001_status.all); // Reading is important
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1109 max30001_LeadOn = max30001_LeadOn | (max30001_cnfg_gen.bit.en_ulp_lon << 8) | ((max30001_status.all & 0x000800) >> 11); // 0b01 will mean ECG Lead On, 0b10 will mean BIOZ Lead On
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1110 // LEAD ON has been detected... Now take actions
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1111 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1112 #endif
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1113
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1114 if (max30001_status.bit.lonint == 1 &&
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1115 acleadon_OneShot == 0) // AC LeadON Check, when lead is on
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1116 {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1117 max30001_LeadOn = 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1118 max30001_reg_read(STATUS, &max30001_status.all); // Reading is important
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1119 max30001_LeadOn =
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1120 max30001_LeadOn | (max30001_cnfg_gen.bit.en_ulp_lon << 8) |
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1121 ((max30001_status.all & 0x000800) >>
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1122 11); // 0b01 will mean ECG Lead On, 0b10 will mean BIOZ Lead On
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1123
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1124 // LEAD ON has been detected... Now take actions
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1125 acleadon_OneShot = 1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1126 dataAvailable(MAX30001_DATA_ACLEADON, &max30001_LeadOn, 1); // One shot data will be sent...
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1127 } else if (max30001_status.bit.lonint == 0 && acleadon_OneShot == 1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1128 max30001_LeadOn = 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1129 max30001_reg_read(STATUS, &max30001_status.all);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1130 max30001_LeadOn =
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1131 max30001_LeadOn | (max30001_cnfg_gen.bit.en_ulp_lon << 8) | ((max30001_status.all & 0x000800) >> 11); // 0b01 will mean ECG Lead On, 0b10 will mean BIOZ Lead On
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1132 dataAvailable(MAX30001_DATA_ACLEADON, &max30001_LeadOn, 1); // One shot data will be sent...
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1133 acleadon_OneShot = 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1134 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1135
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1136 return ret_val;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1137 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1138
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1139 //******************************************************************************
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1140 uint32_t MAX30001::readPace(int group, uint8_t* result) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1141 uint8_t data_array[4];
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1142 uint32_t success;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1143 int adr = PACE0_FIFO_BURST + group*4;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1144
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1145 if (group >= 6)
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1146 return (uint32_t)-1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1147
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1148 data_array[0] = ((adr << 1) & 0xff) | 1; // For Read Or with 1
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1149 success = SPI_Transmit(&data_array[0], 1, &result[0], 10);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1150
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1151 max30001_PACE[group * 3 + 0] = (uint32_t)(result[1] << 16) + (result[2] << 8) + result[3];
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1152 max30001_PACE[group * 3 + 1] = (uint32_t)(result[4] << 16) + (result[5] << 8) + result[6];
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1153 max30001_PACE[group * 3 + 2] = (uint32_t)(result[7] << 16) + (result[8] << 8) + result[9];
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1154
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1155 return success;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1156 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1157
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1158 //******************************************************************************
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1159
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1160 //******************************************************************************
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1161
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1162 int MAX30001::max30001_int_handler(void) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1163
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1164 static uint32_t InitReset = 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1165
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1166 int8_t return_value;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1167 bool check_one_more = true;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1168
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1169 status_check:
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1170 max30001_reg_read(STATUS, &max30001_status.all);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1171
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1172 // Inital Reset and any FIFO over flow invokes a FIFO reset
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1173 if (InitReset == 0 || max30001_status.bit.eovf == 1 || max30001_status.bit.bovf == 1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1174 // Do a FIFO Reset
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1175 max30001_reg_write(FIFO_RST, 0x000000);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1176
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1177 InitReset++;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1178 return 2;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1179 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1180
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1181 return_value = 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1182
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1183 // The four data handling goes on over here
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1184 if (max30001_status.bit.eint == 1 || max30001_status.bit.pint == 1 || max30001_status.bit.bint == 1 || max30001_status.bit.rrint == 1
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1185 || max30001_status.bit.dcloffint == 1 || max30001_status.bit.bover == 1 || max30001_status.bit.bundr == 1
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1186 || max30001_status.bit.bcgmon == 1 || max30001_status.bit.lonint == 1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1187 return_value = return_value | max30001_FIFO_LeadONOff_Read();
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1188 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1189 /*
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1190 // ECG/BIOZ DC Lead Off test
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1191 if (max30001_status.bit.dcloffint == 1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1192 return_value = return_value | max30001_FIFO_LeadONOff_Read();
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1193 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1194
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1195 // BIOZ AC Lead Off test
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1196 if (max30001_status.bit.bover == 1 || max30001_status.bit.bundr == 1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1197 return_value = return_value | max30001_FIFO_LeadONOff_Read();
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1198 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1199
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1200 // BIOZ DRVP/N test using BCGMON.
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1201 if (max30001_status.bit.bcgmon == 1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1202 return_value = return_value | max30001_FIFO_LeadONOff_Read();
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1203 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1204
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1205 if (max30001_status.bit.lonint == 1) // ECG Lead ON test: i.e. the leads are touching the body...
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1206 {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1207
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1208 max30001_FIFO_LeadONOff_Read();
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1209 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1210 */
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1211 if (check_one_more) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1212 check_one_more = false;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1213 goto status_check;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1214 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1215 return return_value;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1216 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1217
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1218 /// function pointer to the async callback
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1219 static event_callback_t functionpointer;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1220 /// flag used to indicate an async xfer has taken place
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1221 static volatile int xferFlag = 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1222
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1223 /**
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1224 * @brief Callback handler for SPI async events
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1225 * @param events description of event that occurred
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1226 */
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1227
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1228
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1229 static void spiHandler(int events) { xferFlag = 1; }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1230
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1231 /**
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1232 * @brief Transmit and recieve QUAD SPI data
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1233 * @param tx_buf pointer to transmit byte buffer
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1234 * @param tx_size number of bytes to transmit
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1235 * @param rx_buf pointer to the recieve buffer
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1236 * @param rx_size number of bytes to recieve
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1237 */
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1238 int MAX30001::SPI_Transmit(const uint8_t *tx_buf, uint32_t tx_size, uint8_t *rx_buf, uint32_t rx_size)
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1239 {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1240 m_cs->write(0);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1241 for(int i = 0; i < tx_size; i++)
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1242 {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1243 m_spi->write(tx_buf[i]);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1244 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1245 for(int i = 0; i < (rx_size - tx_size); i++)
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1246 {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1247 rx_buf[i + 1] = m_spi->write(0xFF);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1248 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1249 m_cs->write(1);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1250
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1251 return 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1252 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1253
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1254 //******************************************************************************
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1255 void MAX30001::max30001_ReadHeartrateData(max30001_t *_hspValMax30001) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1256 _hspValMax30001->R2R = hspValMax30001.R2R;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1257 _hspValMax30001->fmstr = hspValMax30001.fmstr;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1258 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1259
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1260 //******************************************************************************
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1261 void MAX30001::onDataAvailable(PtrFunction _onDataAvailable) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1262 onDataAvailableCallback = _onDataAvailable;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1263 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1264
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1265 /**
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1266 * @brief Used to notify an external function that interrupt data is available
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1267 * @param id type of data available
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1268 * @param buffer 32-bit buffer that points to the data
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1269 * @param length length of 32-bit elements available
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1270 */
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1271 void MAX30001::dataAvailable(uint32_t id, uint32_t *buffer, uint32_t length) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1272 if (onDataAvailableCallback != NULL) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1273 (*onDataAvailableCallback)(id, buffer, length);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1274 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1275 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1276
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1277 /**
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1278 * @brief Callback handler for SPI async events
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1279 * @param events description of event that occurred
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1280 */
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1281 void MAX30001::spiHandler(int events) { xferFlag = 1; }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1282
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1283 //******************************************************************************
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1284 static int allowInterrupts = 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1285
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1286 void MAX30001Mid_IntB_Handler(void) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1287 if (allowInterrupts == 0) return;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1288 MAX30001::instance->max30001_int_handler();
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1289 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1290
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1291 void MAX30001Mid_Int2B_Handler(void) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1292 if (allowInterrupts == 0) return;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1293 MAX30001::instance->max30001_int_handler();
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1294 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1295
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1296 void MAX30001_AllowInterrupts(int state) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1297 allowInterrupts = state;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1298 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1299