Added BME280/BMP280 sensor tests.

This commit is contained in:
imi415 2022-07-22 23:49:47 +08:00
parent 5d48dd82b7
commit 13985fff92
Signed by: imi415
GPG Key ID: 17F01E106F9F5E0A
7 changed files with 126 additions and 8 deletions

11
.clang-format Normal file
View File

@ -0,0 +1,11 @@
BasedOnStyle: Google
IndentWidth: 4
AlignConsecutiveMacros: Consecutive
AlignConsecutiveDeclarations: true
AlignConsecutiveAssignments: true
BreakBeforeBraces: Custom
BraceWrapping:
AfterEnum: false
AfterStruct: false
SplitEmptyFunction: false
ColumnLimit: 120

6
.gitignore vendored Normal file
View File

@ -0,0 +1,6 @@
/board/*.bak
/build
/cmake-build-*
/.vscode
/*.jdebug*
/*.jflash

3
.gitmodules vendored
View File

@ -1,3 +1,6 @@
[submodule "SDK"]
path = SDK
url = https://git.minori.work/Embedded_SDK/MCUXpresso_LPC54102.git
[submodule "lib/sensors"]
path = lib/sensors
url = git@git.minori.work:Embedded_Projects/imsensors.git

View File

@ -1,6 +1,6 @@
cmake_minimum_required(VERSION 3.10)
project(lpc54102_hello)
project(wearable_functional_test)
enable_language(CXX)
enable_language(ASM)
@ -53,6 +53,7 @@ set(TARGET_SOURCES
"board/pin_mux.c"
"src/main.c"
"src/pah8001_impl.c"
"src/sensors_impl.c"
)
set(TARGET_C_DEFINES
@ -79,6 +80,7 @@ set(TARGET_C_INCLUDES
set(TARGET_LIBS
"power_cm4_hardabi"
"pah8001"
"imsensors"
)
# Shared library and linker script search paths
@ -109,6 +111,9 @@ set(CMAKE_EXE_LINKER_FLAGS "-specs=nano.specs -specs=nosys.specs -Wl,--gc-sectio
add_subdirectory(lib/pixart_pah8001ei)
set(IMSENSORS_FLOAT_SUPPORT YES)
add_subdirectory(lib/sensors)
# Shared sources, includes and definitions
add_compile_definitions(${TARGET_C_DEFINES})
include_directories(${TARGET_C_INCLUDES})
@ -121,17 +126,25 @@ link_libraries(${TARGET_LIBS})
add_executable("${CMAKE_PROJECT_NAME}_FLASH.elf" ${TARGET_SOURCES})
target_link_options("${CMAKE_PROJECT_NAME}_FLASH.elf"
PRIVATE "-T${TARGET_LDSCRIPT_FLASH}"
PRIVATE "-Wl,--Map=${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")
# Create ELF
add_executable("${CMAKE_PROJECT_NAME}_RAM.elf" ${TARGET_SOURCES})
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
PROPERTY ADDITIONAL_CLEAN_FILES "${CMAKE_PROJECT_NAME}_RAM.map"
)
add_custom_command(OUTPUT "${CMAKE_PROJECT_NAME}_RAM.hex"
COMMAND ${CMAKE_OBJCOPY} "-O" "ihex" "${CMAKE_PROJECT_NAME}_RAM.elf" "${CMAKE_PROJECT_NAME}_RAM.hex"

1
lib/sensors Submodule

@ -0,0 +1 @@
Subproject commit 6ee72440c713226cbcff2e9e148c8f61ea04b3e4

View File

@ -3,23 +3,51 @@
#include "peripherals.h"
#include "pin_mux.h"
/* Debug console */
#include "fsl_debug_console.h"
/* PPG */
#include "pixart_pah8001ei.h"
/* Sensors */
#include "imsensors/dht/dht_bme280.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_delay(void *pdev, uint32_t msec);
pah_t s_pah = {
.ops = {
.init = pah8001_impl_init,
.write = pah8001_impl_write,
.read = pah8001_impl_read,
},
.ops =
{
.init = pah8001_impl_init,
.write = pah8001_impl_write,
.read = pah8001_impl_read,
},
.pdev = NULL,
};
ims_bme280_t s_bme = {
.user_data = NULL,
.i2c_addr = 0x77,
.cb =
{
.i2c_xfer = sensors_impl_i2c_xfer,
.delay = sensors_impl_delay,
},
};
ims_bme280_t s_bmp = {
.user_data = NULL,
.i2c_addr = 0x76,
.cb = {
.i2c_xfer = sensors_impl_i2c_xfer,
.delay = sensors_impl_delay,
},
};
int main(void) {
BOARD_InitBootPins();
BOARD_BootClockRUN();
@ -31,7 +59,19 @@ int main(void) {
pah8001_init(&s_pah);
for(;;) {
__WFI();
ims_bme280_init(&s_bme);
ims_bme280_init(&s_bmp);
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;
for (;;) {
ims_bme280_measure_float(&s_bme, &r_bme_float);
ims_bme280_measure_float(&s_bmp, &r_bmp_float);
}
}

44
src/sensors_impl.c Normal file
View File

@ -0,0 +1,44 @@
#include "imsensors/sensors_common.h"
/* SDK drivers */
#include "fsl_i2c.h"
ims_ret_t sensors_impl_i2c_xfer(void *pdev, uint16_t addr, ims_i2c_xfer_desc_t *xfer) {
if (xfer->tx_size > 0) {
if (I2C_MasterStart(I2C0, addr, kI2C_Write) != kStatus_Success) {
return IMS_FAIL;
}
if (I2C_MasterWriteBlocking(I2C0, xfer->tx_data, xfer->tx_size, kI2C_TransferNoStopFlag) != kStatus_Success) {
return IMS_FAIL;
}
}
if (xfer->rx_size > 0) {
if (xfer->tx_size > 0) {
if (I2C_MasterRepeatedStart(I2C0, addr, kI2C_Read) != kStatus_Success) {
return IMS_FAIL;
}
} else {
if (I2C_MasterStart(I2C0, addr, kI2C_Read) != kStatus_Success) {
return IMS_FAIL;
}
}
if (I2C_MasterReadBlocking(I2C0, xfer->rx_data, xfer->rx_size, kI2C_TransferNoStopFlag) != kStatus_Success) {
return IMS_FAIL;
}
}
if (I2C_MasterStop(I2C0) != kStatus_Success) {
return IMS_FAIL;
}
return IMS_SUCCESS;
}
ims_ret_t sensors_impl_delay(void *pdev, uint32_t msec) {
SDK_DelayAtLeastUs(msec * 20);
return IMS_SUCCESS;
}