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 SYS EvKit by Emre Eken

MAX30001-MAX32630FTHR ECG Evaluation System

The MAX30001 EVKIT SYS-MBED Evaluation System (EV System) is used to evaluates the MAX30001 sensor, which is an ECG (electrocardiogram), biopotential and bioimpedance analog front end solution for wearable applications. The full evaluation system consists of the MAX32630FTHR board, MAX30001 EVKIT sensor board and the evaluation software. The evaluation kit features ECG, PACE, R-to-R (R-peak timing) detection; bioimpedance (BioZ) AFE; and raw data logging.

The MAX30001 EVKIT evaluation system is assembled, tested and contains the necessary circuitry and connections to evaluate the MAX30001 ECG sensor.

When evaluated as an evaluation system, the MAX32630FTHR board provides the necessary logic rails, master clock, SPI, USB-to-Serial interfaces that are needed to evaluate the MAX30001 sensor board. MAX32630FTHR can be used as an independent development platform.

Communication between the PC and the MAX32630FTHR board is facilitated by a Windows 7, Windows 8 and Windows 10 compatible software that provides a simple and intuitive graphical user interface (GUI).

For more information, visit the wiki pages by clicking the wiki tab above and MAX30001EVSYS product page.

C++ source code, library for the MAX30001 ECG drivers are in the links at the bottom of this page. The sample code includes the ability to log data to the SD card of the MAX32630FTHR.

MAX30001 EVKIT Pinout Connections

/media/uploads/EmreE/max30001_sensor_board_connector_pinout.png

Where to Buy

MAX30001EVSYS-Buy

Committer:
Emre.Eken
Date:
Tue Jul 24 15:15:22 2018 +0300
Revision:
11:1dde68750ed1
Parent:
0:8e4630a71eb1
Files' hierarchy is changed.

Who changed what in which revision?

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