mirror of
https://github.com/openmv/openmv.git
synced 2025-11-04 14:49:50 +08:00
Fix more sources to use HAL
This commit is contained in:
parent
51458b1c2e
commit
c1dab26fca
45
src/Makefile
45
src/Makefile
@ -33,9 +33,9 @@ CFLAGS += -O2 -ggdb3 -DNDEBUG
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
# Compiler Flags
|
# Compiler Flags
|
||||||
CFLAGS += -std=gnu99 -Wall -mlittle-endian -mthumb -nostartfiles -mabi=aapcs-linux
|
CFLAGS += -std=gnu99 -Wall -mlittle-endian -mthumb -nostartfiles -mabi=aapcs-linux -fdata-sections -ffunction-sections
|
||||||
CFLAGS += -fsingle-precision-constant -Wdouble-promotion -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard
|
CFLAGS += -fsingle-precision-constant -Wdouble-promotion -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard
|
||||||
CFLAGS += -DARM_MATH_CM4 -D__FPU_PRESENT=1 -D__FPU_USED=1 -DUSE_USB_FS -DUSE_DEVICE_MODE -DUSE_USB_OTG_ID=0 -DSTM32F407xx -DHSE_VALUE=12000000
|
CFLAGS += -DARM_MATH_CM4 -D__FPU_PRESENT=1 -D__FPU_PRESENT -D__FPU_USED=1 -DUSE_USB_FS -DUSE_DEVICE_MODE -DUSE_USB_OTG_ID=0 -DSTM32F407xx -DHSE_VALUE=12000000
|
||||||
|
|
||||||
CFLAGS += -I. -Iinclude
|
CFLAGS += -I. -Iinclude
|
||||||
CFLAGS += -I$(TOP_DIR)/$(CMSIS_DIR)/include/
|
CFLAGS += -I$(TOP_DIR)/$(CMSIS_DIR)/include/
|
||||||
@ -58,7 +58,7 @@ CFLAGS += -I$(TOP_DIR)/$(OMV_DIR)/img/
|
|||||||
|
|
||||||
# Linker Flags
|
# Linker Flags
|
||||||
|
|
||||||
LDFLAGS = -mcpu=cortex-m4 -mabi=aapcs-linux -mthumb -mlittle-endian -mfloat-abi=hard -mfpu=fpv4-sp-d16 -nostdlib -Wl,-T$(OMV_DIR)/stm32f407.ld
|
LDFLAGS = -mcpu=cortex-m4 -mabi=aapcs-linux -mthumb -mlittle-endian -mfloat-abi=hard -mfpu=fpv4-sp-d16 -nostdlib -Wl,-T$(OMV_DIR)/stm32f407.ld -Wl,--gc-sections
|
||||||
|
|
||||||
# Sources
|
# Sources
|
||||||
#SRC_C = $(addprefix $(CMSIS_DIR)/src/st/,\
|
#SRC_C = $(addprefix $(CMSIS_DIR)/src/st/,\
|
||||||
@ -67,6 +67,16 @@ LDFLAGS = -mcpu=cortex-m4 -mabi=aapcs-linux -mthumb -mlittle-endian -mfloat-abi=
|
|||||||
|
|
||||||
|
|
||||||
OBJ += $(wildcard $(BUILD)/$(CMSIS_DIR)/src/st/*.o)
|
OBJ += $(wildcard $(BUILD)/$(CMSIS_DIR)/src/st/*.o)
|
||||||
|
OBJ += $(wildcard $(BUILD)/$(CMSIS_DIR)/src/dsp/CommonTables/*.o)
|
||||||
|
#OBJ += $(wildcard $(BUILD)/$(CMSIS_DIR)/src/dsp/ComplexMathFunctions/*.o)
|
||||||
|
#OBJ += $(wildcard $(BUILD)/$(CMSIS_DIR)/src/dsp/ControllerFunctions/*.o)
|
||||||
|
OBJ += $(wildcard $(BUILD)/$(CMSIS_DIR)/src/dsp/FastMathFunctions/*.o)
|
||||||
|
#OBJ += $(wildcard $(BUILD)/$(CMSIS_DIR)/src/dsp/FilteringFunctions/*.o)
|
||||||
|
OBJ += $(wildcard $(BUILD)/$(CMSIS_DIR)/src/dsp/MatrixFunctions/*.o)
|
||||||
|
#OBJ += $(wildcard $(BUILD)/$(CMSIS_DIR)/src/dsp/StatisticsFunctions/*.o)
|
||||||
|
#OBJ += $(wildcard $(BUILD)/$(CMSIS_DIR)/src/dsp/SupportFunctions/*.o)
|
||||||
|
#OBJ += $(wildcard $(BUILD)/$(CMSIS_DIR)/src/dsp/TransformFunctions/*.o)
|
||||||
|
|
||||||
OBJ += $(wildcard $(BUILD)/$(STHAL_DIR)/src/*.o)
|
OBJ += $(wildcard $(BUILD)/$(STHAL_DIR)/src/*.o)
|
||||||
OBJ += $(wildcard $(BUILD)/$(FATFS_DIR)/src/*.o)
|
OBJ += $(wildcard $(BUILD)/$(FATFS_DIR)/src/*.o)
|
||||||
OBJ += $(wildcard $(BUILD)/$(FATFS_DIR)/src/option/*.o)
|
OBJ += $(wildcard $(BUILD)/$(FATFS_DIR)/src/option/*.o)
|
||||||
@ -101,16 +111,12 @@ OBJ += $(addprefix $(BUILD)/$(MICROPY_DIR)/,\
|
|||||||
math.o \
|
math.o \
|
||||||
mathsincos.o \
|
mathsincos.o \
|
||||||
rtc.o \
|
rtc.o \
|
||||||
rng.o \
|
|
||||||
pin.o \
|
pin.o \
|
||||||
pin_named_pins.o \
|
pin_named_pins.o \
|
||||||
timer.o \
|
timer.o \
|
||||||
i2c.o \
|
|
||||||
spi.o \
|
|
||||||
servo.o\
|
servo.o\
|
||||||
extint.o \
|
extint.o \
|
||||||
adc.o \
|
adc.o \
|
||||||
modos.o \
|
|
||||||
modstm.o \
|
modstm.o \
|
||||||
modtime.o \
|
modtime.o \
|
||||||
pins_$(TARGET).o \
|
pins_$(TARGET).o \
|
||||||
@ -128,18 +134,41 @@ OBJ += $(addprefix $(BUILD)/$(MICROPY_DIR)/usbdev/,\
|
|||||||
|
|
||||||
OBJ += $(addprefix $(BUILD)/$(OMV_DIR)/, \
|
OBJ += $(addprefix $(BUILD)/$(OMV_DIR)/, \
|
||||||
main.o \
|
main.o \
|
||||||
systick.o\
|
xalloc.o \
|
||||||
|
array.o \
|
||||||
usbdbg.o \
|
usbdbg.o \
|
||||||
|
systick.o \
|
||||||
sccb.o \
|
sccb.o \
|
||||||
ov9650.o \
|
ov9650.o \
|
||||||
ov2640.o \
|
ov2640.o \
|
||||||
sensor.o \
|
sensor.o \
|
||||||
led.o \
|
led.o \
|
||||||
|
rng.o \
|
||||||
|
)
|
||||||
|
|
||||||
|
OBJ += $(addprefix $(BUILD)/$(OMV_DIR)/img/,\
|
||||||
|
blob.o \
|
||||||
|
fmath.o \
|
||||||
|
haar.o \
|
||||||
|
imlib.o \
|
||||||
|
integral.o \
|
||||||
|
kmeans.o \
|
||||||
|
lab.o \
|
||||||
|
median.o \
|
||||||
|
point.o \
|
||||||
|
ppm.o \
|
||||||
|
rectangle.o \
|
||||||
|
surf.o \
|
||||||
|
template.o \
|
||||||
)
|
)
|
||||||
|
|
||||||
OBJ += $(addprefix $(BUILD)/$(OMV_DIR)/py/, \
|
OBJ += $(addprefix $(BUILD)/$(OMV_DIR)/py/, \
|
||||||
py_led.o \
|
py_led.o \
|
||||||
py_sensor.o \
|
py_sensor.o \
|
||||||
|
py_image.o \
|
||||||
|
py_file.o \
|
||||||
|
py_time.o \
|
||||||
|
py_clock.o \
|
||||||
)
|
)
|
||||||
|
|
||||||
###################################################
|
###################################################
|
||||||
|
|||||||
@ -1,16 +1,17 @@
|
|||||||
# Sources
|
# Sources
|
||||||
SRCS = src/st/startup_stm32f407xx.s
|
SRC_S = src/st/startup_stm32f407xx.s
|
||||||
#SRCS += $(wildcard src/CommonTables/*.c)
|
SRC_C += $(wildcard src/dsp/CommonTables/*.c)
|
||||||
#SRCS += $(wildcard src/ComplexMathFunctions/*.c)
|
#SRC_C += $(wildcard src/dsp/ComplexMathFunctions/*.c)
|
||||||
#SRCS += $(wildcard src/ControllerFunctions/*.c)
|
#SRC_C += $(wildcard src/dsp/ControllerFunctions/*.c)
|
||||||
#SRCS += $(wildcard src/FastMathFunctions/*.c)
|
SRC_C += $(wildcard src/dsp/FastMathFunctions/*.c)
|
||||||
#SRCS += $(wildcard src/FilteringFunctions/*.c)
|
#SRC_C += $(wildcard src/dsp/FilteringFunctions/*.c)
|
||||||
#SRCS += $(wildcard src/MatrixFunctions/*.c)
|
SRC_C += $(wildcard src/dsp/MatrixFunctions/*.c)
|
||||||
#SRCS += $(wildcard src/StatisticsFunctions/*.c)
|
#SRC_C += $(wildcard src/dsp/StatisticsFunctions/*.c)
|
||||||
#SRCS += $(wildcard src/SupportFunctions/*.c)
|
#SRC_C += $(wildcard src/dsp/SupportFunctions/*.c)
|
||||||
#SRCS += $(wildcard src/TransformFunctions/*.c)
|
#SRC_C += $(wildcard src/dsp/TransformFunctions/*.c)
|
||||||
|
|
||||||
OBJS = $(addprefix $(BUILD)/, $(SRCS:.s=.o))
|
OBJS = $(addprefix $(BUILD)/, $(SRC_S:.s=.o))
|
||||||
|
OBJS += $(addprefix $(BUILD)/, $(SRC_C:.c=.o))
|
||||||
OBJ_DIRS = $(sort $(dir $(OBJS)))
|
OBJ_DIRS = $(sort $(dir $(OBJS)))
|
||||||
|
|
||||||
all: | $(OBJ_DIRS) $(OBJS)
|
all: | $(OBJ_DIRS) $(OBJS)
|
||||||
|
|||||||
@ -1,21 +1,41 @@
|
|||||||
# Sources
|
# Sources
|
||||||
SRCS += $(addprefix , \
|
SRCS += $(addprefix , \
|
||||||
main.c \
|
main.c \
|
||||||
systick.c\
|
xalloc.c \
|
||||||
|
array.c \
|
||||||
usbdbg.c \
|
usbdbg.c \
|
||||||
|
systick.c \
|
||||||
sccb.c \
|
sccb.c \
|
||||||
ov9650.c \
|
ov9650.c \
|
||||||
ov2640.c \
|
ov2640.c \
|
||||||
sensor.c \
|
sensor.c \
|
||||||
led.c \
|
led.c \
|
||||||
|
rng.c \
|
||||||
)
|
)
|
||||||
|
|
||||||
SRCS += $(addprefix img/, \
|
SRCS += $(addprefix img/, \
|
||||||
|
blob.c \
|
||||||
|
fmath.c \
|
||||||
|
haar.c \
|
||||||
|
imlib.c \
|
||||||
|
integral.c \
|
||||||
|
kmeans.c \
|
||||||
|
lab.c \
|
||||||
|
median.c \
|
||||||
|
point.c \
|
||||||
|
ppm.c \
|
||||||
|
rectangle.c \
|
||||||
|
surf.c \
|
||||||
|
template.c \
|
||||||
)
|
)
|
||||||
|
|
||||||
SRCS += $(addprefix py/, \
|
SRCS += $(addprefix py/, \
|
||||||
py_led.c \
|
py_led.c \
|
||||||
py_sensor.c \
|
py_sensor.c \
|
||||||
|
py_image.c \
|
||||||
|
py_file.c \
|
||||||
|
py_time.c \
|
||||||
|
py_clock.c \
|
||||||
)
|
)
|
||||||
|
|
||||||
OBJS = $(addprefix $(BUILD)/, $(SRCS:.c=.o))
|
OBJS = $(addprefix $(BUILD)/, $(SRCS:.c=.o))
|
||||||
|
|||||||
@ -1,4 +1,3 @@
|
|||||||
#include <libmp.h>
|
|
||||||
#include "xalloc.h"
|
#include "xalloc.h"
|
||||||
#include "imlib.h"
|
#include "imlib.h"
|
||||||
#include <arm_math.h>
|
#include <arm_math.h>
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
#include <libmp.h>
|
#include <ff.h>
|
||||||
|
#include <stdio.h>
|
||||||
#include "xalloc.h"
|
#include "xalloc.h"
|
||||||
#include "imlib.h"
|
#include "imlib.h"
|
||||||
#include <arm_math.h>
|
#include <arm_math.h>
|
||||||
|
|||||||
@ -1,4 +1,3 @@
|
|||||||
#include <libmp.h>
|
|
||||||
#include "xalloc.h"
|
#include "xalloc.h"
|
||||||
#include "imlib.h"
|
#include "imlib.h"
|
||||||
#include <arm_math.h>
|
#include <arm_math.h>
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
#include <libmp.h>
|
#include <ff.h>
|
||||||
|
#include <stdio.h>
|
||||||
#include "xalloc.h"
|
#include "xalloc.h"
|
||||||
#include "imlib.h"
|
#include "imlib.h"
|
||||||
#include "mdefs.h"
|
#include "mdefs.h"
|
||||||
|
|||||||
@ -1,4 +1,3 @@
|
|||||||
#include <libmp.h>
|
|
||||||
#include "xalloc.h"
|
#include "xalloc.h"
|
||||||
#include "imlib.h"
|
#include "imlib.h"
|
||||||
#include <arm_math.h>
|
#include <arm_math.h>
|
||||||
|
|||||||
@ -22,21 +22,20 @@
|
|||||||
#include "timer.h"
|
#include "timer.h"
|
||||||
#include "pin.h"
|
#include "pin.h"
|
||||||
#include "extint.h"
|
#include "extint.h"
|
||||||
#include "usrsw.h"
|
|
||||||
#include "usb.h"
|
#include "usb.h"
|
||||||
#include "rtc.h"
|
#include "rtc.h"
|
||||||
#include "storage.h"
|
#include "storage.h"
|
||||||
#include "sdcard.h"
|
#include "sdcard.h"
|
||||||
#include "ff.h"
|
#include "ff.h"
|
||||||
#include "lcd.h"
|
|
||||||
#include "mdefs.h"
|
#include "mdefs.h"
|
||||||
|
|
||||||
|
#include "led.h"
|
||||||
|
#include "rng.h"
|
||||||
|
#include "sensor.h"
|
||||||
#include "usbdbg.h"
|
#include "usbdbg.h"
|
||||||
|
|
||||||
#include "led.h"
|
|
||||||
#include "py_led.h"
|
#include "py_led.h"
|
||||||
|
#include "py_time.h"
|
||||||
#include "sensor.h"
|
|
||||||
#include "py_sensor.h"
|
#include "py_sensor.h"
|
||||||
|
|
||||||
int errno;
|
int errno;
|
||||||
@ -110,12 +109,17 @@ STATIC mp_obj_t pyb_usb_mode(mp_obj_t usb_mode) {
|
|||||||
|
|
||||||
MP_DEFINE_CONST_FUN_OBJ_1(pyb_usb_mode_obj, pyb_usb_mode);
|
MP_DEFINE_CONST_FUN_OBJ_1(pyb_usb_mode_obj, pyb_usb_mode);
|
||||||
|
|
||||||
|
STATIC mp_obj_t py_vcp_is_connected(void ) {
|
||||||
|
return MP_BOOL(usb_vcp_is_connected());
|
||||||
|
}
|
||||||
|
STATIC MP_DEFINE_CONST_FUN_OBJ_0(py_vcp_is_connected_obj, py_vcp_is_connected);
|
||||||
|
|
||||||
static const char fresh_main_py[] =
|
static const char fresh_main_py[] =
|
||||||
"# main.py -- put your code here!\n"
|
"# main.py -- put your code here!\n"
|
||||||
"import led, sensor\n"
|
"import led, sensor\n"
|
||||||
"led.on(led.BLUE)\n"
|
"led.on(led.BLUE)\n"
|
||||||
"sensor.set_pixformat(sensor.RGB565)\n"
|
"sensor.set_pixformat(sensor.RGB565)\n"
|
||||||
"while (True):\n"
|
"while (vcp_is_connected()==False):\n"
|
||||||
" image = sensor.snapshot()\n"
|
" image = sensor.snapshot()\n"
|
||||||
;
|
;
|
||||||
|
|
||||||
@ -146,7 +150,7 @@ typedef struct {
|
|||||||
static const module_t exported_modules[] ={
|
static const module_t exported_modules[] ={
|
||||||
{MP_QSTR_sensor,py_sensor_init},
|
{MP_QSTR_sensor,py_sensor_init},
|
||||||
{MP_QSTR_led, py_led_init},
|
{MP_QSTR_led, py_led_init},
|
||||||
// {MP_QSTR_time, py_time_init},
|
{MP_QSTR_time, py_time_init},
|
||||||
// {MP_QSTR_gpio, py_gpio_init},
|
// {MP_QSTR_gpio, py_gpio_init},
|
||||||
// {MP_QSTR_spi, py_spi_init},
|
// {MP_QSTR_spi, py_spi_init},
|
||||||
{0, NULL}
|
{0, NULL}
|
||||||
@ -333,15 +337,12 @@ soft_reset:
|
|||||||
|
|
||||||
timer_init0();
|
timer_init0();
|
||||||
|
|
||||||
|
rng_init();
|
||||||
usbdbg_init();
|
usbdbg_init();
|
||||||
|
|
||||||
#if MICROPY_HW_ENABLE_RNG
|
|
||||||
//rng_init0();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Add functions to the global python namespace */
|
/* Add functions to the global python namespace */
|
||||||
// mp_store_global(qstr_from_str("open"), mp_make_function_n(2, py_file_open));
|
// mp_store_global(qstr_from_str("open"), mp_make_function_n(2, py_file_open));
|
||||||
// mp_store_global(qstr_from_str("vcp_connected"), mp_make_function_n(0, py_vcp_connected));
|
mp_store_global(qstr_from_str("vcp_is_connected"), mp_make_function_n(0, py_vcp_is_connected));
|
||||||
// mp_store_global(qstr_from_str("info"), mp_make_function_n(0, py_info));
|
// mp_store_global(qstr_from_str("info"), mp_make_function_n(0, py_info));
|
||||||
// mp_store_global(qstr_from_str("gc_collect"), mp_make_function_n(0, py_gc_collect));
|
// mp_store_global(qstr_from_str("gc_collect"), mp_make_function_n(0, py_gc_collect));
|
||||||
// mp_store_global(qstr_from_str("Image"), mp_make_function_n(1, py_image_load_image));
|
// mp_store_global(qstr_from_str("Image"), mp_make_function_n(1, py_image_load_image));
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
#include <libmp.h>
|
#include <mp.h>
|
||||||
#include "systick.h"
|
#include "systick.h"
|
||||||
#include "py_clock.h"
|
#include "py_clock.h"
|
||||||
|
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
#include <libmp.h>
|
#include <mp.h>
|
||||||
#include "py_assert.h"
|
#include "py_assert.h"
|
||||||
#include "py_file.h"
|
#include "py_file.h"
|
||||||
typedef struct _py_file_obj_t {
|
typedef struct _py_file_obj_t {
|
||||||
|
|||||||
@ -4,6 +4,7 @@
|
|||||||
#include "sensor.h"
|
#include "sensor.h"
|
||||||
#include "py_assert.h"
|
#include "py_assert.h"
|
||||||
#include "py_image.h"
|
#include "py_image.h"
|
||||||
|
#include "ff.h"
|
||||||
|
|
||||||
extern struct sensor_dev sensor;
|
extern struct sensor_dev sensor;
|
||||||
static const mp_obj_type_t py_cascade_type;
|
static const mp_obj_type_t py_cascade_type;
|
||||||
|
|||||||
@ -15,11 +15,9 @@ static mp_obj_t py_sensor_reset() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static mp_obj_t py_sensor_snapshot() {
|
static mp_obj_t py_sensor_snapshot() {
|
||||||
// mp_obj_t image = py_image(0, 0, 0, 0);
|
mp_obj_t image = py_image(0, 0, 0, 0);
|
||||||
// sensor_snapshot((struct image*) py_image_cobj(image));
|
sensor_snapshot((struct image*) py_image_cobj(image));
|
||||||
// return image;
|
return image;
|
||||||
sensor_snapshot(0);
|
|
||||||
return mp_const_none;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static mp_obj_t py_sensor_set_pixformat(mp_obj_t pixformat) {
|
static mp_obj_t py_sensor_set_pixformat(mp_obj_t pixformat) {
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
#include <libmp.h>
|
#include <mp.h>
|
||||||
#include "systick.h"
|
#include "systick.h"
|
||||||
#include "py_time.h"
|
#include "py_time.h"
|
||||||
#include "py_clock.h"
|
#include "py_clock.h"
|
||||||
|
|||||||
@ -1,19 +1,26 @@
|
|||||||
#include <stm32f4xx_rng.h>
|
#include <stm32f4xx_hal.h>
|
||||||
#include <stm32f4xx_rcc.h>
|
|
||||||
#include "rng.h"
|
#include "rng.h"
|
||||||
|
|
||||||
|
static RNG_HandleTypeDef RNGHandle;
|
||||||
|
|
||||||
void rng_init()
|
void rng_init()
|
||||||
{
|
{
|
||||||
RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_RNG, ENABLE);
|
__RNG_CLK_ENABLE();
|
||||||
RNG_Cmd(ENABLE);
|
|
||||||
|
RNGHandle.Instance = RNG;
|
||||||
|
__HAL_RNG_ENABLE(&RNGHandle);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t rng_randint(uint32_t min, uint32_t max)
|
uint32_t rng_randint(uint32_t min, uint32_t max)
|
||||||
{
|
{
|
||||||
uint32_t rand;
|
uint32_t rand=0;
|
||||||
if (min==max) {
|
if (min==max) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
rand = RNG_GetRandomNumber();
|
|
||||||
|
// Wait until the RNG is ready
|
||||||
|
while (HAL_RNG_GetState(&RNGHandle) != RNG_FLAG_DRDY);
|
||||||
|
|
||||||
|
rand = HAL_RNG_GetRandomNumber(&RNGHandle);
|
||||||
return (rand%(max-min))+min;
|
return (rand%(max-min))+min;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -349,11 +349,16 @@ int sensor_snapshot(struct image *image)
|
|||||||
/* Enable the Frame capture complete interrupt */
|
/* Enable the Frame capture complete interrupt */
|
||||||
__HAL_DCMI_ENABLE_IT(&DCMIHandle, DCMI_IT_FRAME);
|
__HAL_DCMI_ENABLE_IT(&DCMIHandle, DCMI_IT_FRAME);
|
||||||
|
|
||||||
|
if (sensor.pixformat==PIXFORMAT_GRAYSCALE) {
|
||||||
|
HAL_DCMI_Start_DMA(&DCMIHandle, DCMI_MODE_SNAPSHOT, (uint32_t) fb->pixels+(fb->w * fb->h), (fb->w * fb->h * 2)/4);
|
||||||
|
} else {
|
||||||
HAL_DCMI_Start_DMA(&DCMIHandle, DCMI_MODE_SNAPSHOT, (uint32_t) fb->pixels, (fb->w * fb->h * 2)/4);
|
HAL_DCMI_Start_DMA(&DCMIHandle, DCMI_MODE_SNAPSHOT, (uint32_t) fb->pixels, (fb->w * fb->h * 2)/4);
|
||||||
|
}
|
||||||
|
|
||||||
/* Wait for frame */
|
/* Wait for frame */
|
||||||
while (HAL_DCMI_GetState(&DCMIHandle) == HAL_DCMI_STATE_BUSY);
|
while (HAL_DCMI_GetState(&DCMIHandle) == HAL_DCMI_STATE_BUSY);
|
||||||
|
|
||||||
|
#if 0
|
||||||
if (sensor.pixformat == PIXFORMAT_GRAYSCALE) {
|
if (sensor.pixformat == PIXFORMAT_GRAYSCALE) {
|
||||||
/* Extract Y channel from YUYV */
|
/* Extract Y channel from YUYV */
|
||||||
for (int i=0; i<(fb->w * fb->h); i++) {
|
for (int i=0; i<(fb->w * fb->h); i++) {
|
||||||
@ -361,10 +366,22 @@ int sensor_snapshot(struct image *image)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// image->w = fb->w;
|
#endif
|
||||||
// image->h = fb->h;
|
|
||||||
// image->bpp = fb->bpp;
|
if (sensor.pixformat == PIXFORMAT_GRAYSCALE) {
|
||||||
// image->pixels = fb->pixels;
|
int i;
|
||||||
|
/* extract Y channel */
|
||||||
|
for (i=0; i<(fb->w * fb->h); i++) {
|
||||||
|
fb->pixels[i] = fb->pixels[i*2+(fb->w * fb->h)];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (image != NULL) {
|
||||||
|
image->w = fb->w;
|
||||||
|
image->h = fb->h;
|
||||||
|
image->bpp = fb->bpp;
|
||||||
|
image->pixels = fb->pixels;
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -23,4 +23,5 @@ uint32_t systick_current_millis()
|
|||||||
bool sys_tick_has_passed(uint32_t stc, uint32_t delay_ms)
|
bool sys_tick_has_passed(uint32_t stc, uint32_t delay_ms)
|
||||||
{
|
{
|
||||||
systick_sleep(delay_ms);
|
systick_sleep(delay_ms);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
#include <libmp.h>
|
#include <mp.h>
|
||||||
#include "mdefs.h"
|
#include "mdefs.h"
|
||||||
#include "xalloc.h"
|
#include "xalloc.h"
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user