Test program for MAX30101 Barely working.

Dependencies:   MAX30101 mbed vt100

Revision:
3:f3d19ad49aee
Parent:
1:fd8bee9b3647
--- a/main.cpp	Mon Mar 27 07:34:32 2017 +0000
+++ b/main.cpp	Mon May 01 00:58:26 2017 +0000
@@ -18,6 +18,30 @@
 MAX30101 *max30101 = 0 ;
 InterruptIn *int0 ;
 
+/* data read test following the pseudo code
+ * written in the datasheet
+ */
+void doPseudo(void)
+{
+    uint32_t data[3] ;
+    uint8_t fifo_wr_ptr, fifo_rd_ptr ;
+    int num_available_samples = 0 ;
+//    int num_samples_to_read = 0 ;
+    int i ;
+
+    fifo_wr_ptr = max30101->getFIFO_WR_PTR() ;
+    fifo_rd_ptr = max30101->getFIFO_RD_PTR() ;
+    num_available_samples = (fifo_wr_ptr + FIFO_DEPTH - fifo_rd_ptr) % FIFO_DEPTH ;
+    printf("=== %d data ===\n", num_available_samples) ;
+    for (i = 0 ; i < num_available_samples ; i++ ) {
+        data[0] = max30101->readFIFO() ; /* LED1 */
+        data[1] = max30101->readFIFO() ; /* LED2 */
+        data[2] = max30101->readFIFO() ; /* LED3 */
+        printf("LED1: 0x%05X, LED2: 0x%05X, LED3: 0x%05X\n",
+            data[0], data[1], data[2]) ;
+    }
+}
+
 void initSPO2(void)
 {
     uint8_t config_byte = 0 ;
@@ -97,6 +121,7 @@
     }
     if (flag & INT_ST_PPG_RGY) { /* New FIFO Data Ready */
         printf("New FIFO Data Ready\n") ;
+        doPseudo() ;
     }
     if (flag & INT_ST_ALC_OVF) { /* Ambient Light Cancellaration Overflow */
         printf("Ambient Light Cancellaration Overflow\n") ;
@@ -164,17 +189,17 @@
     mode =
  //         (0x02  << 5) /* SMP_AVE = 2 -> avarage of 4 data */
           (0x05 << 5) /* SMP_AVE = 5 -> avarage of 32 data */
-//        | (0x01  << 4)  /* FIFO_ROLLOVER_EN = 1 */
-        | (0x00 << 4)  /* FIFO_ROLLOVER_EN = 0 */
+        | (0x01  << 4)  /* FIFO_ROLLOVER_EN = 1 */
+//        | (0x00 << 4)  /* FIFO_ROLLOVER_EN = 0 */
         | (0x0C)        /* FIFO ALMOST FULL at 12 (0x0C) */
         ;
     max30101->setFIFO_CONFIG(mode) ;
     
     max30101->setLED1_PA(0x80) ;
     max30101->setLED2_PA(0x80) ;
-//    max30101->setLED3_PA(0x80) ;
-//    max30101->setPILOT_PA(0x80) ;
-#if 0
+    max30101->setLED3_PA(0x80) ;
+    max30101->setPILOT_PA(0x80) ;
+#if 1
     slot_config = 
           (0x02 << 24) /* SLOT2 LED2(IR) */
         | (0x01 << 16) /* SLOT1 LED1(RED) */
@@ -187,8 +212,6 @@
     max30101->setPROX_INT_THR(mode) ;
 
 //    max30101->setIntEnable(0xF002) ;
-        
-
 }
 
 void reportID(void)
@@ -199,31 +222,6 @@
     printf("MAX30101 ID: 0x%02X, Rev: 0x%02X\n", id, rev) ;
 }
 
-
-/* data read test following the pseudo code
- * written in the datasheet
- */
-void doPseudo(void)
-{
-    uint32_t data[3] ;
-    uint8_t fifo_wr_ptr, fifo_rd_ptr ;
-    int num_available_samples = 0 ;
-//    int num_samples_to_read = 0 ;
-    int i ;
-
-    fifo_wr_ptr = max30101->getFIFO_WR_PTR() ;
-    fifo_rd_ptr = max30101->getFIFO_RD_PTR() ;
-    num_available_samples = (fifo_wr_ptr + FIFO_DEPTH - fifo_rd_ptr) % FIFO_DEPTH ;
-    printf("=== %d data ===\n", num_available_samples) ;
-    for (i = 0 ; i < num_available_samples ; i++ ) {
-        data[0] = max30101->readFIFO() ; /* LED1 */
-        data[1] = max30101->readFIFO() ; /* LED2 */
-        data[2] = max30101->readFIFO() ; /* LED3 */
-        printf("LED1: 0x%05X, LED2: 0x%05X, LED3: 0x%05X\n",
-            data[0], data[1], data[2]) ;
-    }
-}
-
 void doInt(void)
 {
     uint16_t flag ;
@@ -261,22 +259,22 @@
     
     init() ;
     
-    printf("%s : %s\n", BOARD_NAME, __DATE__) ;
+    printf("test MAX30101 for %s (%s)\n", BOARD_NAME, __DATE__) ;
     reportID() ;
 
     initSPO2() ;
     int0->fall(&SPO2_isr) ;
     max30101->setMODE_CONFIG(MODE_SPO2) ; 
-    max30101->setIntEnable( INT_EN_A_FULL | INT_EN_DIE_TEMP_RDY ) ;
+    max30101->setIntEnable( INT_EN_A_FULL | INT_EN_DIE_TEMP_RDY | INT_ST_PPG_RGY ) ;
     int_config = max30101->getIntEnable() ;
     printf("Int enable: 0x%04X\n", int_config) ;
-    flag = max30101->getIntStatus() ;
+    printf("Temperature, Interrupt flags\n") ;
 
     while(1) {
       max30101->setTEMP_EN() ; /* trigger temperature read */
         temp = max30101->getTEMP() ;
         flag = max30101->getIntStatus() ;
-        printf("Temp = %.2f  interrupt flags = 0x%02X\n", temp, flag) ;
+        printf("%.2f, 0x%02X\n", temp, flag) ;
       wait(1) ;
     }
 }