fix: stack, ldscript

This commit is contained in:
2024-12-07 04:03:16 +06:00
parent 9e48697f3d
commit a724a940a6
4 changed files with 8 additions and 21 deletions

View File

@@ -904,22 +904,13 @@ typedef struct {
#define PAD_DRV_STRENGTH_6 (0x00000006 << 9) #define PAD_DRV_STRENGTH_6 (0x00000006 << 9)
#define PAD_DRV_STRENGTH_7 (0x00000007 << 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]; volatile uint32_t *reg = &PERI_ON->GPIO_PINMUX_CTRL[pin >> 1];
uint32_t shift = (pin & 1) << 4; uint32_t shift = (pin & 1) << 4;
uint32_t mask = 0xFFFF << shift; uint32_t mask = 0xFFFF << shift;
*reg = (*reg & ~mask) | (func << 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) { static inline void PINMUX_ConfigPadPull(uint8_t pin, uint8_t pull_type) {
uint32_t reg_index = pin >> 1; uint32_t reg_index = pin >> 1;
uint32_t bit_pos = (pin & 1) << 4; uint32_t bit_pos = (pin & 1) << 4;

View File

@@ -8,7 +8,7 @@ MEMORY
SECTIONS SECTIONS
{ {
_stack_top = ORIGIN(RAM) + LENGTH(RAM) - (4 * 1024) - 4; _stack_top = ORIGIN(RAM) + LENGTH(RAM) - 0x4000;
.rom_header : { .rom_header : {
LONG(0x96969999) LONG(0xFC66CC3F) LONG(0x96969999) LONG(0xFC66CC3F)

View File

@@ -4,24 +4,23 @@
.section .text .section .text
.thumb_func .thumb_func
_startup: _startup:
// zero .bss section /* zero .bss section */
ldr r0, =_bss_start ldr r0, =_bss_start
ldr r1, =_bss_end ldr r1, =_bss_end
movs r2, #0 movs r2, #0
1: cmp r0, r1 1: cmp r0, r1
beq 2f itt lt
str r2, [r0], #4 strlt r2, [r0], #4
b 1b blt 1b
2: 2:
bl main bl main
1: b 1b 1: b 1b
.section .text .section .text
.global _init .global _init
/* cold boot from ROM */
_init: _init:
ldr r0, =0x1003E000 ldr sp, =_stack_top
mov sp, r0
ldr r0, =_vector_table ldr r0, =_vector_table
ldr r1, =0xE000ED08 ldr r1, =0xE000ED08
str r0, [r1] str r0, [r1]

View File

@@ -26,9 +26,6 @@ int main(void) {
PERI_ON->SOC_PERI_FUNC1_EN |= BIT_PERI_GPIO_EN; PERI_ON->SOC_PERI_FUNC1_EN |= BIT_PERI_GPIO_EN;
PERI_ON->PESOC_CLK_CTRL |= APBPeriph_GPIO_CLOCK; 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_Config(_PA_0, PINMUX_FN_GPIO);
PINMUX_ConfigPadPull(_PA_0, GPIO_PuPd_DOWN); PINMUX_ConfigPadPull(_PA_0, GPIO_PuPd_DOWN);
GPIOA->DDR |= (1 << 0); GPIOA->DDR |= (1 << 0);