parent
ddb367b97a
commit
29c3173150
|
@ -4,3 +4,6 @@
|
|||
[submodule "lib/sensors"]
|
||||
path = lib/sensors
|
||||
url = git@git.minori.work:Embedded_Projects/imsensors.git
|
||||
[submodule "lib/lcd"]
|
||||
path = lib/lcd
|
||||
url = https://git.minori.work/Embedded_Drivers/epd-spi.git
|
||||
|
|
|
@ -52,7 +52,6 @@ set(TARGET_SOURCES
|
|||
"board/peripherals.c"
|
||||
"board/pin_mux.c"
|
||||
"src/main.c"
|
||||
"src/pah8001_impl.c"
|
||||
"src/sensors_impl.c"
|
||||
"src/util_systick.c"
|
||||
)
|
||||
|
@ -82,9 +81,10 @@ set(TARGET_C_INCLUDES
|
|||
# Shared libraries linked with application
|
||||
set(TARGET_LIBS
|
||||
"imsensors"
|
||||
"m"
|
||||
"power_cm4_hardabi"
|
||||
"pah8001"
|
||||
"c"
|
||||
"m"
|
||||
"nosys"
|
||||
)
|
||||
|
||||
# Shared library and linker script search paths
|
||||
|
@ -92,14 +92,11 @@ set(TARGET_LIB_DIRECTORIES
|
|||
"SDK/devices/LPC54102/gcc"
|
||||
)
|
||||
|
||||
# Device specific settings, goes to CFLAGS and LDFLAGS
|
||||
set(TARGET_CFLAGS_HARDWARE "-mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16")
|
||||
|
||||
# Conditional flags
|
||||
# DEBUG
|
||||
set(CMAKE_C_FLAGS_DEBUG "-DDEBUG -O0 -g")
|
||||
set(CMAKE_CXX_FLAGS_DEBUG "-DDEBUG -O0 -g")
|
||||
set(CMAKE_ASM_FLAGS_DEBUG "-DDEBUG -O0 -g")
|
||||
set(CMAKE_C_FLAGS_DEBUG "-DDEBUG -Og -g")
|
||||
set(CMAKE_CXX_FLAGS_DEBUG "-DDEBUG -Og -g")
|
||||
set(CMAKE_ASM_FLAGS_DEBUG "-DDEBUG -Og -g")
|
||||
|
||||
# RELEASE
|
||||
set(CMAKE_C_FLAGS_RELEASE "-DNDEBUG -O2 -flto")
|
||||
|
@ -108,16 +105,16 @@ set(CMAKE_ASM_FLAGS_RELEASE "-DNDEBUG -O2 -flto")
|
|||
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "-flto")
|
||||
|
||||
# Final compiler flags
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${TARGET_CFLAGS_HARDWARE} -Wall -fno-common -fno-builtin -ffreestanding -fdata-sections -ffunction-sections")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${TARGET_CFLAGS_HARDWARE} -Wall -fno-common -fno-builtin -ffreestanding -fdata-sections -ffunction-sections")
|
||||
set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} ${CMAKE_C_FLAGS} -x assembler-with-cpp")
|
||||
set(CMAKE_EXE_LINKER_FLAGS "-specs=nano.specs -specs=nosys.specs -lnosys -Wl,--gc-sections -Wl,--print-memory-usage -Wl,--no-warn-rwx-segments")
|
||||
|
||||
add_subdirectory(lib/pixart_pah8001ei)
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -fno-common -fno-builtin -ffreestanding -fdata-sections -ffunction-sections")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -fno-common -fno-builtin -ffreestanding -fdata-sections -ffunction-sections")
|
||||
set(CMAKE_ASM_FLAGS "${CMAKE_C_FLAGS} -x assembler-with-cpp")
|
||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--gc-sections")
|
||||
|
||||
set(IMSENSORS_FLOAT_SUPPORT YES)
|
||||
add_subdirectory(lib/sensors)
|
||||
|
||||
add_subdirectory(lib/lcd)
|
||||
|
||||
# Shared sources, includes and definitions
|
||||
add_compile_definitions(${TARGET_C_DEFINES})
|
||||
include_directories(${TARGET_C_INCLUDES})
|
||||
|
@ -128,18 +125,27 @@ link_libraries(${TARGET_LIBS})
|
|||
|
||||
# Create ELF
|
||||
add_executable("${CMAKE_PROJECT_NAME}_FLASH.elf" ${TARGET_SOURCES})
|
||||
target_compile_definitions("${CMAKE_PROJECT_NAME}_FLASH.elf"
|
||||
PRIVATE ${TARGET_C_DEFINES_XIP}
|
||||
)
|
||||
target_link_options("${CMAKE_PROJECT_NAME}_FLASH.elf"
|
||||
PRIVATE "-T${TARGET_LDSCRIPT_FLASH}"
|
||||
PRIVATE "-Wl,--Map=${CMAKE_PROJECT_NAME}_FLASH.map"
|
||||
)
|
||||
set_property(TARGET "${CMAKE_PROJECT_NAME}_FLASH.elf" APPEND
|
||||
PROPERTY ADDITIONAL_CLEAN_FILES "${CMAKE_PROJECT_NAME}_FLASH.map"
|
||||
)
|
||||
add_custom_command(OUTPUT "${CMAKE_PROJECT_NAME}_FLASH.hex"
|
||||
COMMAND ${CMAKE_OBJCOPY} "-O" "ihex" "${CMAKE_PROJECT_NAME}_FLASH.elf" "${CMAKE_PROJECT_NAME}_FLASH.hex"
|
||||
DEPENDS "${CMAKE_PROJECT_NAME}_FLASH.elf"
|
||||
)
|
||||
set_property(TARGET "${CMAKE_PROJECT_NAME}_FLASH.elf" APPEND
|
||||
PROPERTY ADDITIONAL_CLEAN_FILES "${CMAKE_PROJECT_NAME}_FLASH.map"
|
||||
)
|
||||
add_custom_target("${CMAKE_PROJECT_NAME}_FLASH_HEX" DEPENDS "${CMAKE_PROJECT_NAME}_FLASH.hex")
|
||||
if(DEFINED TARGET_TOOLCHAIN_SIZE)
|
||||
add_custom_command(TARGET "${CMAKE_PROJECT_NAME}_FLASH.elf" POST_BUILD
|
||||
COMMAND ${TARGET_TOOLCHAIN_SIZE} "${CMAKE_PROJECT_NAME}_FLASH.elf"
|
||||
)
|
||||
endif()
|
||||
|
||||
|
||||
# Create ELF
|
||||
add_executable("${CMAKE_PROJECT_NAME}_RAM.elf" ${TARGET_SOURCES})
|
||||
|
@ -147,7 +153,7 @@ target_link_options("${CMAKE_PROJECT_NAME}_RAM.elf"
|
|||
PRIVATE "-T${TARGET_LDSCRIPT_RAM}"
|
||||
PRIVATE "-Wl,--Map=${CMAKE_PROJECT_NAME}_RAM.map"
|
||||
)
|
||||
set_property(TARGET "${CMAKE_PROJECT_NAME}_FLASH.elf" APPEND
|
||||
set_property(TARGET "${CMAKE_PROJECT_NAME}_RAM.elf" APPEND
|
||||
PROPERTY ADDITIONAL_CLEAN_FILES "${CMAKE_PROJECT_NAME}_RAM.map"
|
||||
)
|
||||
add_custom_command(OUTPUT "${CMAKE_PROJECT_NAME}_RAM.hex"
|
||||
|
@ -155,3 +161,9 @@ add_custom_command(OUTPUT "${CMAKE_PROJECT_NAME}_RAM.hex"
|
|||
DEPENDS "${CMAKE_PROJECT_NAME}_RAM.elf"
|
||||
)
|
||||
add_custom_target("${CMAKE_PROJECT_NAME}_RAM_HEX" DEPENDS "${CMAKE_PROJECT_NAME}_RAM.hex")
|
||||
if(DEFINED TARGET_TOOLCHAIN_SIZE)
|
||||
add_custom_command(TARGET "${CMAKE_PROJECT_NAME}_RAM.elf" POST_BUILD
|
||||
COMMAND ${TARGET_TOOLCHAIN_SIZE} "${CMAKE_PROJECT_NAME}_RAM.elf"
|
||||
)
|
||||
endif()
|
||||
|
||||
|
|
2
SDK
2
SDK
|
@ -1 +1 @@
|
|||
Subproject commit 5540a4c296a16ba1fd7bbe78dec73165903fc94d
|
||||
Subproject commit ada43e86a127cf8ad552012e98a4eeb63d717606
|
|
@ -1,10 +1,17 @@
|
|||
set(CMAKE_C_COMPILER arm-none-eabi-gcc)
|
||||
set(CMAKE_CXX_COMPILER arm-none-eabi-g++)
|
||||
|
||||
# Make CMake happy about those compilers
|
||||
set(CMAKE_TRY_COMPILE_TARGET_TYPE "STATIC_LIBRARY")
|
||||
|
||||
# Poor old Windows...
|
||||
if(WIN32)
|
||||
set(CMAKE_SYSTEM_NAME "Generic")
|
||||
endif()
|
||||
|
||||
set(CMAKE_C_COMPILER arm-none-eabi-gcc)
|
||||
set(CMAKE_CXX_COMPILER arm-none-eabi-g++)
|
||||
|
||||
# Optionally set size binary name, for elf section size reporting.
|
||||
set(TARGET_TOOLCHAIN_SIZE arm-none-eabi-size)
|
||||
|
||||
set(CMAKE_C_FLAGS_INIT "-mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16")
|
||||
set(CMAKE_CXX_FLAGS_INIT "-mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16")
|
||||
set(CMAKE_EXE_LINKER_FLAGS_INIT "-specs=nano.specs -specs=nosys.specs -Wl,--print-memory-usage -Wl,--no-warn-rwx-segments")
|
||||
|
||||
# Make CMake happy about those compilers
|
||||
set(CMAKE_TRY_COMPILE_TARGET_TYPE "STATIC_LIBRARY")
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
Subproject commit 7d0de59c3bba1766cc7d2417e5ae11d5a0f82372
|
|
@ -1,14 +0,0 @@
|
|||
cmake_minimum_required(VERSION 3.10)
|
||||
|
||||
project(pah8001)
|
||||
|
||||
set(PAH8001_SOURCES
|
||||
"src/pixart_pah8001ei.c"
|
||||
)
|
||||
|
||||
set(PAH8001_INCLUDES
|
||||
"include"
|
||||
)
|
||||
|
||||
add_library(${PROJECT_NAME} ${PAH8001_SOURCES})
|
||||
target_include_directories(${PROJECT_NAME} PUBLIC ${PAH8001_INCLUDES})
|
|
@ -1,29 +0,0 @@
|
|||
#ifndef PIXART_PAH8001EI_H
|
||||
#define PIXART_PAH8001EI_H
|
||||
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
typedef enum {
|
||||
PAH_RET_OK,
|
||||
PAH_RET_FAIL,
|
||||
} pah_ret_t;
|
||||
|
||||
typedef pah_ret_t (*pah_ops_init_t)(void *pdev);
|
||||
typedef pah_ret_t (*pah_ops_read_t)(void *pdev, uint8_t reg, uint8_t *value, uint16_t len);
|
||||
typedef pah_ret_t (*pah_ops_write_t)(void *pdev, uint8_t reg, uint8_t *value, uint16_t len);
|
||||
|
||||
typedef struct {
|
||||
pah_ops_init_t init;
|
||||
pah_ops_read_t read;
|
||||
pah_ops_write_t write;
|
||||
} pah_ops_t;
|
||||
|
||||
typedef struct {
|
||||
pah_ops_t ops;
|
||||
void *pdev;
|
||||
} pah_t;
|
||||
|
||||
pah_ret_t pah8001_init(pah_t *pah);
|
||||
|
||||
#endif
|
|
@ -1,27 +0,0 @@
|
|||
#include "pixart_pah8001ei.h"
|
||||
|
||||
#define PAH8001_R_CONFIG 0x06
|
||||
#define PAH8001_R_CONFIG_RESET_Pos 7
|
||||
#define PAH8001_R_CONFIG_RESET_Msk (1U << PAH8001_R_CONFIG_RESET_Pos)
|
||||
#define PAH8001_R_CONFIG_POWERDOWN_Pos 3
|
||||
#define PAH8001_R_CONFIG_POWERDOWN_Msk (1U << PAH8001_R_CONFIG_POWERDOWN_Pos)
|
||||
|
||||
#define PAH8001_ERROR_CHECK(x) \
|
||||
if (x != PAH_RET_OK) return PAH_RET_FAIL
|
||||
|
||||
static pah_ret_t pah8001_reset(pah_t *pah) {
|
||||
uint8_t wdata = PAH8001_R_CONFIG_RESET_Msk | 2U;
|
||||
PAH8001_ERROR_CHECK(pah->ops.write(pah->pdev, PAH8001_R_CONFIG, &wdata, 0x01));
|
||||
|
||||
wdata = PAH8001_R_CONFIG_POWERDOWN_Msk | 2U;
|
||||
PAH8001_ERROR_CHECK(pah->ops.write(pah->pdev, PAH8001_R_CONFIG, &wdata, 0x01));
|
||||
|
||||
return PAH_RET_OK;
|
||||
}
|
||||
|
||||
pah_ret_t pah8001_init(pah_t *pah) {
|
||||
PAH8001_ERROR_CHECK(pah->ops.init(pah->pdev));
|
||||
|
||||
PAH8001_ERROR_CHECK(pah8001_reset(pah));
|
||||
return PAH_RET_OK;
|
||||
}
|
|
@ -1 +1 @@
|
|||
Subproject commit 6ee72440c713226cbcff2e9e148c8f61ea04b3e4
|
||||
Subproject commit 954c38ac5a47033762f3ea7d5e1eef86d4265ee8
|
70
src/main.c
70
src/main.c
|
@ -6,35 +6,27 @@
|
|||
/* Debug console */
|
||||
#include "fsl_debug_console.h"
|
||||
|
||||
/* PPG */
|
||||
#include "pixart_pah8001ei.h"
|
||||
|
||||
/* Utils */
|
||||
#include "util_systick.h"
|
||||
|
||||
/* Sensors */
|
||||
#include "imsensors/dht/dht_bme280.h"
|
||||
#include "imsensors/ppg/ppg_pah8001.h"
|
||||
|
||||
pah_ret_t pah8001_impl_init(void *pdev);
|
||||
pah_ret_t pah8001_impl_write(void *pdev, uint8_t reg, uint8_t *value, uint16_t len);
|
||||
pah_ret_t pah8001_impl_read(void *pdev, uint8_t reg, uint8_t *value, uint16_t len);
|
||||
|
||||
ims_ret_t sensors_impl_i2c_xfer(void *pdev, uint16_t addr, ims_i2c_xfer_desc_t *xfer);
|
||||
ims_ret_t sensors_impl_i2c_xfer(void *pdev, ims_i2c_xfer_desc_t *xfer);
|
||||
ims_ret_t sensors_impl_delay(void *pdev, uint32_t msec);
|
||||
|
||||
pah_t s_pah = {
|
||||
.ops =
|
||||
ims_pah8001_t s_pah = {
|
||||
.pdev = (void *)0x33,
|
||||
.cb =
|
||||
{
|
||||
.init = pah8001_impl_init,
|
||||
.write = pah8001_impl_write,
|
||||
.read = pah8001_impl_read,
|
||||
.i2c_xfer = sensors_impl_i2c_xfer,
|
||||
.delay = sensors_impl_delay,
|
||||
},
|
||||
.pdev = NULL,
|
||||
};
|
||||
|
||||
ims_bme280_t s_bme = {
|
||||
.user_data = NULL,
|
||||
.i2c_addr = 0x77,
|
||||
.pdev = (void *)0x77,
|
||||
.cb =
|
||||
{
|
||||
.i2c_xfer = sensors_impl_i2c_xfer,
|
||||
|
@ -43,12 +35,12 @@ ims_bme280_t s_bme = {
|
|||
};
|
||||
|
||||
ims_bme280_t s_bmp = {
|
||||
.user_data = NULL,
|
||||
.i2c_addr = 0x76,
|
||||
.cb = {
|
||||
.i2c_xfer = sensors_impl_i2c_xfer,
|
||||
.delay = sensors_impl_delay,
|
||||
},
|
||||
.pdev = (void *)0x76,
|
||||
.cb =
|
||||
{
|
||||
.i2c_xfer = sensors_impl_i2c_xfer,
|
||||
.delay = sensors_impl_delay,
|
||||
},
|
||||
};
|
||||
|
||||
int main(void) {
|
||||
|
@ -62,7 +54,9 @@ int main(void) {
|
|||
|
||||
PRINTF("Hello world!!\r\n");
|
||||
|
||||
pah8001_init(&s_pah);
|
||||
ims_pah8001_init(&s_pah);
|
||||
|
||||
ims_pah8001_power(&s_pah, true);
|
||||
|
||||
ims_bme280_init(&s_bme);
|
||||
ims_bme280_init(&s_bmp);
|
||||
|
@ -70,19 +64,31 @@ int main(void) {
|
|||
ims_bme280_config_t dht_cfg;
|
||||
|
||||
ims_bme280_preset_config(&dht_cfg, IMS_BME280_PRESET_WEATHER);
|
||||
ims_bme280_apply_config(&s_bme, &dht_cfg);
|
||||
ims_bme280_apply_config(&s_bmp, &dht_cfg);
|
||||
ims_bme280_result_float_t r_bme_float;
|
||||
ims_bme280_result_float_t r_bmp_float;
|
||||
ims_bme280_config(&s_bme, &dht_cfg);
|
||||
ims_bme280_config(&s_bmp, &dht_cfg);
|
||||
ims_bme280_result_t r_bme_float;
|
||||
ims_bme280_result_t r_bmp_float;
|
||||
|
||||
bool ppg_touched;
|
||||
uint8_t hr_alg;
|
||||
|
||||
for (;;) {
|
||||
ims_bme280_measure_float(&s_bme, &r_bme_float);
|
||||
ims_bme280_measure_float(&s_bmp, &r_bmp_float);
|
||||
ims_bme280_read_forced(&s_bme, &r_bme_float);
|
||||
ims_bme280_read_forced(&s_bmp, &r_bmp_float);
|
||||
|
||||
PRINTF("BME T: %3.2f, H:%3.02f, P: %5.02f\r\n", r_bme_float.temperature, r_bme_float.humidity, r_bme_float.pressure);
|
||||
PRINTF("BMP T: %3.2f, H:%3.02f, P: %5.02f\r\n", r_bmp_float.temperature, r_bmp_float.humidity, r_bmp_float.pressure);
|
||||
ims_pah8001_touched(&s_pah, &ppg_touched);
|
||||
|
||||
util_systick_delay(500);
|
||||
if(ppg_touched) {
|
||||
ims_pah8001_read_alg_hr(&s_pah, IMS_PPG_ALG_A, &hr_alg);
|
||||
PRINTF("PPG: Touched, ALG_A: %d, ", hr_alg);
|
||||
ims_pah8001_read_alg_hr(&s_pah, IMS_PPG_ALG_C, &hr_alg);
|
||||
PRINTF("ALG_C: %d\r\n", hr_alg);
|
||||
}
|
||||
|
||||
PRINTF("BME: %03.02f %03.02f %05.02f\r\n", r_bme_float.temperature, r_bme_float.humidity, r_bme_float.pressure);
|
||||
PRINTF("BMP: %03.02f --.-- %05.02f\r\n", r_bmp_float.temperature, r_bmp_float.pressure);
|
||||
|
||||
util_systick_delay(100);
|
||||
GPIO_PortToggle(BOARD_INITPINS_LED_R_GPIO, BOARD_INITPINS_LED_R_PORT, BOARD_INITPINS_LED_R_GPIO_PIN_MASK);
|
||||
}
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
#include "imsensors/sensors_common.h"
|
||||
#include "imsensors/common/sensors_common.h"
|
||||
|
||||
/* SDK drivers */
|
||||
#include "fsl_i2c.h"
|
||||
|
@ -7,7 +7,9 @@
|
|||
/* Utils */
|
||||
#include "util_systick.h"
|
||||
|
||||
ims_ret_t sensors_impl_i2c_xfer(void *pdev, uint16_t addr, ims_i2c_xfer_desc_t *xfer) {
|
||||
ims_ret_t sensors_impl_i2c_xfer(void *pdev, ims_i2c_xfer_desc_t *xfer) {
|
||||
uint16_t addr = ((uint32_t)pdev & 0xFFU);
|
||||
|
||||
if (xfer->tx_size > 0) {
|
||||
if (I2C_MasterStart(I2C0, addr, kI2C_Write) != kStatus_Success) {
|
||||
goto xfer_fail;
|
||||
|
|
Loading…
Reference in New Issue