fix: stack, ldscript
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
13
src/boot.s
13
src/boot.s
@@ -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]
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user