diff options
| author | Aditya Naik | 2020-08-03 14:42:06 -0400 |
|---|---|---|
| committer | Aditya Naik | 2020-08-03 14:42:06 -0400 |
| commit | 11a52e4e88bcad1e6bddcf02f78e1cc5eaaec508 (patch) | |
| tree | d7f725c30e618994a0650607ede73ab3efc72c67 /ports | |
| parent | 81b3f3d5336eab67e8eb21bb4011e552f3895a4e (diff) | |
RTOS skeleton with (UNIX) POSIX calls. Reorg of stream files
Diffstat (limited to 'ports')
| -rw-r--r-- | ports/posix/makefile | 12 | ||||
| -rw-r--r-- | ports/posix/src/stream_stdio.c | 18 | ||||
| -rw-r--r-- | ports/stm32f4/makefile | 5 | ||||
| -rw-r--r-- | ports/stm32f4/src/stream_i2c.c | 37 |
4 files changed, 72 insertions, 0 deletions
diff --git a/ports/posix/makefile b/ports/posix/makefile new file mode 100644 index 0000000..9031b76 --- /dev/null +++ b/ports/posix/makefile @@ -0,0 +1,12 @@ + + +PREFIX = + +LDFLAGS = $(LIBDIR) $(LIBS) + +C_INCLUDES += \ +-Ilib/FreeRTOS/FreeRTOS/Source/portable/ThirdParty/GCC/Posix/ \ + +C_SOURCES += \ +lib/FreeRTOS/FreeRTOS/Source/portable/ThirdParty/GCC/Posix/port.c \ +ports/posix/src/stream_stdio.c diff --git a/ports/posix/src/stream_stdio.c b/ports/posix/src/stream_stdio.c new file mode 100644 index 0000000..efa4b13 --- /dev/null +++ b/ports/posix/src/stream_stdio.c @@ -0,0 +1,18 @@ +#include <stdio.h> +#include "stream_stdio.h" +#include "stream.h" + +int stdio_read(uint8_t* buf, size_t count, void **vptr, void *sptr) +{ + int x; + for (x = 0; x < count; x++) { + scanf("%c", &buf[x]); + } + return 0; +} + +int stdio_write(uint8_t* buf, size_t count, void **vptr, void *sptr) +{ + printf("%s\n", buf); + return 0; +} diff --git a/ports/stm32f4/makefile b/ports/stm32f4/makefile index c3701b9..df447d1 100644 --- a/ports/stm32f4/makefile +++ b/ports/stm32f4/makefile @@ -1,11 +1,15 @@ # Makefile for the STM32F4 port +PREFIX = arm-none-eabi- + # These variables are dependent on the target MCU LDSCRIPT=STM32F405RGTx_FLASH.ld ASM_FILE=startup_stm32f405xx.s C_DEFS += \ -DSTM32F405xx +LDFLAGS = $(MCU) -specs=nosys.specs -specs=nano.specs -u _printf_float -T$(PORT_DIR)/$(LDSCRIPT) $(LIBDIR) $(LIBS) -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref -Wl,--gc-sections + FLOAT-ABI = -mfloat-abi=hard CPU = -mcpu=cortex-m4 FPU = -mfpu=fpv4-sp-d16 @@ -34,6 +38,7 @@ lib/f4/stm32f4xx_hal_uart.c \ ports/stm32f4/src/stm32f4xx_it.c \ ports/stm32f4/src/stm32f4xx_hal_msp.c \ ports/stm32f4/src/system_stm32f4xx.c \ +ports/stm32f4/src/stream_i2c.c C_INCLUDES += \ -Ilib/f4 \ diff --git a/ports/stm32f4/src/stream_i2c.c b/ports/stm32f4/src/stream_i2c.c new file mode 100644 index 0000000..3e8fc95 --- /dev/null +++ b/ports/stm32f4/src/stream_i2c.c @@ -0,0 +1,37 @@ +#include "stream_i2c.h" +#include "port.h" +#include "stream.h" + +int i2c_read(uint8_t* buf, size_t count, void **vptr, void *sptr) +{ + p_stream_t *stream = (p_stream_t*)sptr; + I2C_HandleTypeDef dev = *(I2C_HandleTypeDef*)stream->props[0]; + + uint16_t addr = *(uint16_t*)vptr[0]; + uint32_t timeout = *(uint32_t*)vptr[1]; + uint16_t AF_limit = *(uint32_t*)vptr[2]; + + int error, AF_counter = 0; + while (HAL_I2C_Master_Receive(&dev, addr, buf, count, timeout) != HAL_OK) { + if ((error = HAL_I2C_GetError(&dev)) != HAL_I2C_ERROR_AF) { + return error; + } + else if (++AF_counter > AF_limit) { + return HAL_I2C_ERROR_AF; + } + } + return 0; +} + +int i2c_write(uint8_t* buf, size_t count, void **vptr, void *sptr) +{ + p_stream_t *stream = (p_stream_t*)sptr; + I2C_HandleTypeDef dev = *(I2C_HandleTypeDef*)stream->props[0]; + uint16_t addr = *(uint16_t*)vptr[1]; + uint32_t timeout = *(uint32_t*)vptr[2]; + + while (HAL_I2C_Master_Transmit(&dev, addr, buf, count, timeout) != HAL_OK) { + return HAL_I2C_GetError(&dev); + } + return 0; +} |
