mirror of
https://github.com/cesanta/mongoose.git
synced 2026-11-08 16:11:18 +00:00
Improve ESP flasher baud rate setting
Use old baud rate and autodetected divider to calculate new divider. This works better with higher baud rates and drifting clocks. CL: mos: Improve ESP flasher baud rate setting PUBLISHED_FROM=7761e756c3ae7cc76e3b9a4fe3e40d06a779b2e8
This commit is contained in:
1 parent
95a36b1759
commit
0b2e474d52
8 files changed
+43
-23
No files matched your search
@@ -23,13 +23,13 @@ all: $(STUB_ELF)
|
||||
$(STUB_ELF): $(STUB) $(LIBS)
|
||||
@echo " CC $^ -> $@"
|
||||
@[ -d $(BUILD_DIR) ] || mkdir $(BUILD_DIR)
|
||||
@docker run --rm -i -v $(CURDIR)/../../../..:/src $(SDK) //bin/bash -c \
|
||||
docker run --rm -i -v $(CURDIR)/../../../..:/src $(SDK) //bin/bash -c \
|
||||
"cd /src/common/platforms/esp8266/stubs && \
|
||||
$(XT_CC) -std=c99 -Wall -Werror -Os -DESP8266 \
|
||||
-mtext-section-literals -mlongcalls -nostdlib -fno-builtin \
|
||||
-I. -I/src/common/platforms/esp \
|
||||
-I. -I/src/common/platforms/esp -I/src/common/platforms/esp8266 \
|
||||
-I/opt/Espressif/ESP8266_SDK \
|
||||
-Wl,-static -ffunction-sections -Wl,--gc-sections \
|
||||
-Wl,-static -ffunction-sections -lgcc -Wl,--gc-sections \
|
||||
-Tstub.ld $(CFLAGS) -o $@ $^"
|
||||
|
||||
wrap: $(STUB_JSON)
|
||||
|
||||
@@ -41,3 +41,4 @@ INCLUDE "eagle.rom.addr.v6.ld"
|
||||
PROVIDE(SPIFlashModeConfig = 0x40004568);
|
||||
PROVIDE(SPI_erase_sector = 0x400040c0);
|
||||
PROVIDE(SPI_erase_block = 0x40004120);
|
||||
PROVIDE(uart_div_modify = 0x400039d8);
|
||||
@@ -18,9 +18,15 @@
|
||||
#include "uart.h"
|
||||
#include "ets_sys.h"
|
||||
|
||||
#define UART_CLKDIV_26MHZ(B) (52000000 + B / 2) / B
|
||||
#define UART_CLKDIV_M (UART_CLKDIV_CNT << UART_CLKDIV_S)
|
||||
|
||||
void set_baud_rate(uint32_t uart_no, uint32_t baud_rate) {
|
||||
uint32_t div = UART_CLKDIV_26MHZ(baud_rate);
|
||||
WRITE_PERI_REG(UART_CLKDIV_REG(uart_no), div & 0xfffff);
|
||||
void uart_div_modify(uint8_t uart_no, uint32_t div);
|
||||
|
||||
uint32_t set_baud_rate(uint32_t uart_no, uint32_t old_baud_rate,
|
||||
uint32_t new_baud_rate) {
|
||||
uint32_t uart_reg = READ_PERI_REG(UART_CLKDIV_REG(uart_no));
|
||||
uint32_t uart_div = uart_reg & UART_CLKDIV_M;
|
||||
uint32_t master_freq = uart_div * old_baud_rate;
|
||||
uart_div_modify(uart_no, master_freq / new_baud_rate);
|
||||
return uart_div;
|
||||
}
|
||||
@@ -20,9 +20,11 @@
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
void set_baud_rate(uint32_t uart_no, uint32_t baud_rate);
|
||||
#include "uart_register.h"
|
||||
|
||||
uint32_t set_baud_rate(uint32_t uart_no, uint32_t old_baud_rate,
|
||||
uint32_t new_baud_rate);
|
||||
|
||||
#define REG_UART_BASE(i) (0x60000000 + (i) *0xf00)
|
||||
#define UART_FIFO_REG(i) (REG_UART_BASE(i) + 0x0)
|
||||
#define UART_CONF1_REG(i) (REG_UART_BASE(i) + 0x24)
|
||||
#define UART_RX_TOUT_EN (BIT(31))
|
||||
|
||||
Reference in new issue
Block a user