Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: max32630fthr USBDevice
main.cpp@8:2005014df05c, 2020-03-02 (annotated)
- Committer:
- saleiferis
- Date:
- Mon Mar 02 04:42:12 2020 +0000
- Revision:
- 8:2005014df05c
- Parent:
- 7:4debec043316
- Child:
- 9:171171516ebd
interrupt
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| saleiferis | 0:89ec48e52250 | 1 | #include "mbed.h" |
| saleiferis | 0:89ec48e52250 | 2 | #include "math.h" |
| saleiferis | 0:89ec48e52250 | 3 | #include "max32630fthr.h" |
| saleiferis | 0:89ec48e52250 | 4 | #include "max86150.h" |
| saleiferis | 0:89ec48e52250 | 5 | #include "I2C.h" |
| saleiferis | 0:89ec48e52250 | 6 | #include "ble/BLE.h" |
| saleiferis | 0:89ec48e52250 | 7 | #include "ble/Gap.h" |
| saleiferis | 7:4debec043316 | 8 | //#include "ble/services/HeartRateService.h" |
| saleiferis | 7:4debec043316 | 9 | #include "ECGService.h" |
| saleiferis | 1:6e6f7e3cc1e1 | 10 | #include <events/mbed_events.h> |
| saleiferis | 1:6e6f7e3cc1e1 | 11 | #include "bt32630.h" |
| saleiferis | 0:89ec48e52250 | 12 | |
| saleiferis | 0:89ec48e52250 | 13 | //Register definitions |
| saleiferis | 0:89ec48e52250 | 14 | #define MAX86150_Addr 0xBC //updated per I2Cscanner, 8 bit version of 7 bit code 0x5E |
| saleiferis | 0:89ec48e52250 | 15 | #define InterruptStatusReg1 0x00 //Interrupt status byte 0 (read both bytes 0x00 and 0x01 when checking int status) |
| saleiferis | 0:89ec48e52250 | 16 | #define InterruptStatusReg2 0x01 |
| saleiferis | 0:89ec48e52250 | 17 | #define InterruptEnableReg1 0x02 //Interrupt enable byte 0 |
| saleiferis | 0:89ec48e52250 | 18 | #define InterruptEnableReg2 0x03 |
| saleiferis | 0:89ec48e52250 | 19 | #define FIFOWritePointerReg 0x04 |
| saleiferis | 0:89ec48e52250 | 20 | #define OverflowCounterReg 0x05 |
| saleiferis | 0:89ec48e52250 | 21 | #define FIFOReadPointerReg 0x06 |
| saleiferis | 0:89ec48e52250 | 22 | #define FIFODataReg 0x07 |
| saleiferis | 0:89ec48e52250 | 23 | #define FIFOConfigReg 0x08 |
| saleiferis | 0:89ec48e52250 | 24 | #define FIFODataControlReg1 0x09 |
| saleiferis | 0:89ec48e52250 | 25 | #define FIFODataControlReg2 0x0A |
| saleiferis | 0:89ec48e52250 | 26 | #define SystemControlReg 0x0D |
| saleiferis | 0:89ec48e52250 | 27 | #define ppgConfigReg0 0x0E |
| saleiferis | 0:89ec48e52250 | 28 | #define ppgConfigReg1 0x0F |
| saleiferis | 0:89ec48e52250 | 29 | #define ProxIntThreshReg 0x10 |
| saleiferis | 0:89ec48e52250 | 30 | #define LED1PulseAmpReg 0x11 |
| saleiferis | 0:89ec48e52250 | 31 | #define LED2PulseAmpReg 0x12 |
| saleiferis | 0:89ec48e52250 | 32 | #define LEDRangeReg 0x14 |
| saleiferis | 0:89ec48e52250 | 33 | #define LEDPilotPAReg 0x15 |
| saleiferis | 0:89ec48e52250 | 34 | #define EcgConfigReg1 0x3C |
| saleiferis | 0:89ec48e52250 | 35 | #define EcgConfigReg2 0x3D |
| saleiferis | 0:89ec48e52250 | 36 | #define EcgConfigReg3 0x3E |
| saleiferis | 0:89ec48e52250 | 37 | #define EcgConfigReg4 0x3F |
| saleiferis | 0:89ec48e52250 | 38 | #define PartIDReg 0xFF |
| saleiferis | 0:89ec48e52250 | 39 | #define maxi2cFreq 1000000 |
| saleiferis | 0:89ec48e52250 | 40 | #define recommendedi2cFreq 400000 |
| saleiferis | 0:89ec48e52250 | 41 | #define interrupt_pin P5_0 //INTB pin --see InterruptIn declaration |
| saleiferis | 0:89ec48e52250 | 42 | #define maxECGrate 0 |
| saleiferis | 0:89ec48e52250 | 43 | #define normECGrate 1 |
| saleiferis | 0:89ec48e52250 | 44 | //#define BaudRate 921600 |
| saleiferis | 0:89ec48e52250 | 45 | //#define BaudRate 256000 |
| saleiferis | 0:89ec48e52250 | 46 | //#define BaudRate 250000 |
| saleiferis | 0:89ec48e52250 | 47 | #define BaudRate 9600 |
| saleiferis | 0:89ec48e52250 | 48 | //#define BaudRate 115200 |
| saleiferis | 0:89ec48e52250 | 49 | //#define BaudRate 57600 |
| saleiferis | 0:89ec48e52250 | 50 | //also try 921600, 460800 230400 |
| saleiferis | 0:89ec48e52250 | 51 | const int16_t i2cBufferSize=32; //32 was stable. In this rev exploring 36 |
| saleiferis | 8:2005014df05c | 52 | void ISR_AFULL(); |
| saleiferis | 0:89ec48e52250 | 53 | |
| saleiferis | 0:89ec48e52250 | 54 | |
| saleiferis | 0:89ec48e52250 | 55 | //I2C i2c(I2C_SDA,I2C_SCL); |
| saleiferis | 0:89ec48e52250 | 56 | |
| saleiferis | 0:89ec48e52250 | 57 | |
| saleiferis | 0:89ec48e52250 | 58 | Serial pc(USBTX,USBRX,NULL,BaudRate); //open serial port (optionally add device name and baud rate after specifying TX and RX pins) |
| saleiferis | 8:2005014df05c | 59 | InterruptIn intPin(P5_5); |
| saleiferis | 0:89ec48e52250 | 60 | I2C i2c(I2C2_SDA, I2C2_SCL); |
| saleiferis | 8:2005014df05c | 61 | MAX86150 max86150Sensor; |
| saleiferis | 0:89ec48e52250 | 62 | |
| saleiferis | 8:2005014df05c | 63 | volatile bool intFlag = false; |
| saleiferis | 1:6e6f7e3cc1e1 | 64 | |
| saleiferis | 1:6e6f7e3cc1e1 | 65 | //// Bluetooth Init |
| saleiferis | 1:6e6f7e3cc1e1 | 66 | //BLE& ble = BLE::Instance(); |
| saleiferis | 1:6e6f7e3cc1e1 | 67 | static events::EventQueue event_queue(/* event count */ 16 * EVENTS_EVENT_SIZE); |
| saleiferis | 1:6e6f7e3cc1e1 | 68 | |
| saleiferis | 8:2005014df05c | 69 | void ISR_AFULL() |
| saleiferis | 8:2005014df05c | 70 | { |
| saleiferis | 8:2005014df05c | 71 | intFlag = true; |
| saleiferis | 8:2005014df05c | 72 | |
| saleiferis | 8:2005014df05c | 73 | } |
| saleiferis | 0:89ec48e52250 | 74 | ////////// |
| saleiferis | 0:89ec48e52250 | 75 | int main(){ |
| saleiferis | 0:89ec48e52250 | 76 | //i2c.frequency(recommendedi2cFreq); |
| saleiferis | 4:4233f5538abf | 77 | //max86150Sensor.softReset(); |
| saleiferis | 4:4233f5538abf | 78 | //wait_ms(3000); |
| saleiferis | 0:89ec48e52250 | 79 | max86150Sensor.begin(i2c, recommendedi2cFreq, MAX86150_Addr); |
| saleiferis | 0:89ec48e52250 | 80 | wait_ms(300); |
| saleiferis | 4:4233f5538abf | 81 | |
| saleiferis | 0:89ec48e52250 | 82 | //unsigned char partID = max86150Sensor.readPartID(); |
| saleiferis | 0:89ec48e52250 | 83 | unsigned char partID = max86150Sensor.readRegister8(MAX86150_Addr,0xFF); |
| saleiferis | 0:89ec48e52250 | 84 | pc.printf("Part ID is: %X\n",partID); |
| saleiferis | 1:6e6f7e3cc1e1 | 85 | |
| saleiferis | 1:6e6f7e3cc1e1 | 86 | |
| saleiferis | 1:6e6f7e3cc1e1 | 87 | //***** SETUP SENSOR |
| saleiferis | 0:89ec48e52250 | 88 | max86150Sensor.setup(); //Configure sensor |
| saleiferis | 1:6e6f7e3cc1e1 | 89 | //max86150Sensor.writeRegister8(MAX86150_Addr,0x0D,0x04); //it as 0x01 |
| saleiferis | 4:4233f5538abf | 90 | wait_ms(300); |
| saleiferis | 4:4233f5538abf | 91 | pc.printf("SYSCONTOL REG: %x\n", max86150Sensor.readRegister8(MAX86150_Addr,0x0D)); |
| saleiferis | 4:4233f5538abf | 92 | while(max86150Sensor.readRegister8(MAX86150_Addr,0x0D) != 0x04) |
| saleiferis | 4:4233f5538abf | 93 | { |
| saleiferis | 4:4233f5538abf | 94 | pc.printf("SYS CTRL not set properly\n"); |
| saleiferis | 4:4233f5538abf | 95 | wait_ms(200); |
| saleiferis | 4:4233f5538abf | 96 | } |
| saleiferis | 1:6e6f7e3cc1e1 | 97 | |
| saleiferis | 1:6e6f7e3cc1e1 | 98 | //*************************************************************\\ |
| saleiferis | 1:6e6f7e3cc1e1 | 99 | |
| saleiferis | 0:89ec48e52250 | 100 | //wait_ms(2000); |
| saleiferis | 1:6e6f7e3cc1e1 | 101 | //pc.printf("SYS CTRL REG: %x\n",max86150Sensor.readRegister8(MAX86150_Addr,0x0D)); |
| saleiferis | 1:6e6f7e3cc1e1 | 102 | //uint8_t readPointer = max86150Sensor.getReadPointer(); |
| saleiferis | 1:6e6f7e3cc1e1 | 103 | //uint8_t writePointer = max86150Sensor.getWritePointer(); |
| saleiferis | 1:6e6f7e3cc1e1 | 104 | //pc.printf("WRT_PTR: %X ... READ_PTR: %X",writePointer,readPointer); |
| saleiferis | 1:6e6f7e3cc1e1 | 105 | //pc.printf("SYS CTRL REG: %x\n",max86150Sensor.readRegister8(MAX86150_Addr,0x0D)); |
| saleiferis | 2:a96a53e6c6a3 | 106 | |
| saleiferis | 4:4233f5538abf | 107 | |
| saleiferis | 1:6e6f7e3cc1e1 | 108 | //******* SETUP BLUETOOTH ********* |
| saleiferis | 2:a96a53e6c6a3 | 109 | |
| saleiferis | 2:a96a53e6c6a3 | 110 | |
| saleiferis | 2:a96a53e6c6a3 | 111 | eventQueue.call_every(1, periodicCallback); //it was 500 |
| saleiferis | 1:6e6f7e3cc1e1 | 112 | BLE &ble = BLE::Instance(); |
| saleiferis | 1:6e6f7e3cc1e1 | 113 | ble.onEventsToProcess(scheduleBleEventsProcessing); |
| saleiferis | 1:6e6f7e3cc1e1 | 114 | ble.init(bleInitComplete); |
| saleiferis | 1:6e6f7e3cc1e1 | 115 | //pc.printf("Before dispatch forever"); |
| saleiferis | 8:2005014df05c | 116 | //eventQueue.dispatch_forever(); |
| saleiferis | 4:4233f5538abf | 117 | |
| saleiferis | 8:2005014df05c | 118 | intPin.fall(&ISR_AFULL); |
| saleiferis | 8:2005014df05c | 119 | |
| saleiferis | 8:2005014df05c | 120 | max86150Sensor.readRegister8(MAX86150_Addr,0x00); |
| saleiferis | 8:2005014df05c | 121 | while(1){ |
| saleiferis | 8:2005014df05c | 122 | if (intFlag){ |
| saleiferis | 8:2005014df05c | 123 | pc.printf("intFLagged\n"); |
| saleiferis | 8:2005014df05c | 124 | intFlag = false; |
| saleiferis | 8:2005014df05c | 125 | max86150Sensor.readRegister8(MAX86150_Addr,0x00); |
| saleiferis | 8:2005014df05c | 126 | } |
| saleiferis | 8:2005014df05c | 127 | |
| saleiferis | 8:2005014df05c | 128 | } |
| saleiferis | 1:6e6f7e3cc1e1 | 129 | |
| saleiferis | 1:6e6f7e3cc1e1 | 130 | /// Get sensor data |
| saleiferis | 4:4233f5538abf | 131 | /* |
| saleiferis | 0:89ec48e52250 | 132 | while(1){ |
| saleiferis | 0:89ec48e52250 | 133 | if(max86150Sensor.check()>0) |
| saleiferis | 0:89ec48e52250 | 134 | { |
| saleiferis | 4:4233f5538abf | 135 | pc.printf("%d\n",max86150Sensor.getFIFOECG()); |
| saleiferis | 0:89ec48e52250 | 136 | } |
| saleiferis | 1:6e6f7e3cc1e1 | 137 | wait_us(500); |
| saleiferis | 1:6e6f7e3cc1e1 | 138 | } |
| saleiferis | 4:4233f5538abf | 139 | */ |
| saleiferis | 0:89ec48e52250 | 140 | |
| saleiferis | 0:89ec48e52250 | 141 | |
| saleiferis | 0:89ec48e52250 | 142 | |
| saleiferis | 0:89ec48e52250 | 143 | } |