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
HSP/Devices/MAX30001/MAX30001/MAX30001.cpp@0:8e4630a71eb1, 2018-04-05 (annotated)
- 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?
| User | Revision | Line number | New 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 |
