13 #include "I2C_Interface.h" 27 #define debug_print(msg) do { if (DEBUG_TEST) UART_Debug_PutString(msg);} while (0) 42 void (*print_ptr)(
const char*) = &(UART_Debug_PutString);
43 uint8_t active_leds = 1;
44 uint8_t rp, wp, flag = 0;
47 debug_print(
"**************************\r\n");
48 debug_print(
" MAX30101 SAMPLE RATE \r\n");
49 debug_print(
"**************************\r\n");
51 if (MAX30101_IsDevicePresent() == MAX30101_OK)
54 debug_print(
"Device found on I2C bus\r\n");
55 Connection_LED_Write(1);
58 uint8_t rev_id, part_id = 0;
59 MAX30101_ReadPartID(&part_id);
60 MAX30101_ReadRevisionID(&rev_id);
61 sprintf(msg,
"Revision ID: 0x%02X\r\n", rev_id);
63 sprintf(msg,
"Part ID: 0x%02X\r\n", part_id);
66 debug_print(
"Registers before configuration\r\n");
67 MAX30101_LogRegisters(print_ptr);
76 MAX30101_DisableALCOverflowInt();
77 MAX30101_DisableTempReadyInt();
78 MAX30101_DisablePPGReadyInt();
79 MAX30101_EnableFIFOAFullInt();
82 MAX30101_SetFIFOAlmostFull(32);
85 MAX30101_EnableFIFORollover();
88 MAX30101_SetSampleAverage(MAX30101_SAMPLE_AVG_1);
91 MAX30101_SetLEDPulseAmplitude(MAX30101_LED_1, 0x1F);
93 MAX30101_SetLEDPulseAmplitude(MAX30101_LED_2, 0x1F);
95 MAX30101_SetLEDPulseAmplitude(MAX30101_LED_3, 0x1F);
97 MAX30101_SetLEDPulseAmplitude(MAX30101_LED_4, 0x1F);
100 MAX30101_SetSpO2ADCRange(MAX30101_ADC_RANGE_4096);
103 MAX30101_SetSpO2PulseWidth(MAX30101_PULSEWIDTH_69);
106 MAX30101_SetSpO2SampleRate(MAX30101_SAMPLE_RATE_3200);
109 MAX30101_SetMode(MAX30101_HR_MODE);
112 MAX30101_DisableSlots();
114 debug_print(
"Registers after configuration\r\n");
115 MAX30101_LogRegisters(print_ptr);
118 debug_print(
"\r\n\r\n");
121 MAX30101_ClearFIFO();
123 uint32_t start_time = 0;
127 uint16_t samples = 0;
128 start_time = Timer_SR_ReadCounter();
130 while (samples < 100)
132 MAX30101_ReadReadPointer(&rp);
133 MAX30101_ReadWritePointer(&wp);
135 int num_samples = wp - rp;
138 samples += num_samples;
139 uint8_t raw_bytes[num_samples*active_leds*3];
140 MAX30101_ReadRawFIFOBytes(num_samples, active_leds, raw_bytes);
143 uint32_t end_time = Timer_SR_ReadCounter();
144 int32_t diff = start_time - end_time;
145 float sr = (float)(samples) / (diff/1000000.0);
146 sprintf(msg,
"Hz: %d.%d\r\n", (
int)(sr),((
int)(sr*100)%100));