diff --git a/include/rtl8710bx.h b/include/rtl8710bx.h index 6bb2215..4935328 100644 --- a/include/rtl8710bx.h +++ b/include/rtl8710bx.h @@ -904,22 +904,13 @@ typedef struct { #define PAD_DRV_STRENGTH_6 (0x00000006 << 9) #define PAD_DRV_STRENGTH_7 (0x00000007 << 9) -static inline void PINMUX_Config_BL(uint32_t pin, uint32_t func) { +static inline void PINMUX_Config(uint32_t pin, uint32_t func) { volatile uint32_t *reg = &PERI_ON->GPIO_PINMUX_CTRL[pin >> 1]; uint32_t shift = (pin & 1) << 4; uint32_t mask = 0xFFFF << shift; *reg = (*reg & ~mask) | (func << shift); } -static inline void PINMUX_Config(uint32_t pin, uint32_t func) { - volatile uint32_t *reg = &PERI_ON->GPIO_PINMUX_CTRL[pin >> 1]; - if (pin & 1) { - *reg = (*reg & 0x0000FFFF) | (func << 16); - } else { - *reg = (*reg & 0xFFFF0000) | func; - } -} - static inline void PINMUX_ConfigPadPull(uint8_t pin, uint8_t pull_type) { uint32_t reg_index = pin >> 1; uint32_t bit_pos = (pin & 1) << 4; diff --git a/linker.ld b/linker.ld index d7d2ed0..a2a1462 100644 --- a/linker.ld +++ b/linker.ld @@ -8,7 +8,7 @@ MEMORY SECTIONS { - _stack_top = ORIGIN(RAM) + LENGTH(RAM) - (4 * 1024) - 4; + _stack_top = ORIGIN(RAM) + LENGTH(RAM) - 0x4000; .rom_header : { LONG(0x96969999) LONG(0xFC66CC3F) diff --git a/src/boot.s b/src/boot.s index 255eefc..fa1d91c 100644 --- a/src/boot.s +++ b/src/boot.s @@ -4,24 +4,23 @@ .section .text .thumb_func _startup: - // zero .bss section + /* zero .bss section */ ldr r0, =_bss_start ldr r1, =_bss_end movs r2, #0 1: cmp r0, r1 - beq 2f - str r2, [r0], #4 - b 1b + itt lt + strlt r2, [r0], #4 + blt 1b 2: bl main 1: b 1b .section .text .global _init +/* cold boot from ROM */ _init: - ldr r0, =0x1003E000 - mov sp, r0 - + ldr sp, =_stack_top ldr r0, =_vector_table ldr r1, =0xE000ED08 str r0, [r1] diff --git a/src/main.c b/src/main.c index bc94346..a37bb4f 100644 --- a/src/main.c +++ b/src/main.c @@ -26,9 +26,6 @@ int main(void) { PERI_ON->SOC_PERI_FUNC1_EN |= BIT_PERI_GPIO_EN; PERI_ON->PESOC_CLK_CTRL |= APBPeriph_GPIO_CLOCK; - // branchless - PINMUX_Config_BL(_PA_0, PINMUX_FN_GPIO); - // PINMUX_Config(_PA_0, PINMUX_FN_GPIO); PINMUX_ConfigPadPull(_PA_0, GPIO_PuPd_DOWN); GPIOA->DDR |= (1 << 0);