chore: cc
This commit is contained in:
@@ -5,7 +5,6 @@
|
|||||||
|
|
||||||
extern uint32_t DiagPrintf(const char *fmt, ...)
|
extern uint32_t DiagPrintf(const char *fmt, ...)
|
||||||
__attribute__((format(printf, 1, 2)));
|
__attribute__((format(printf, 1, 2)));
|
||||||
extern void DelayMs(uint32_t ms);
|
|
||||||
|
|
||||||
#define printf DiagPrintf
|
#define printf DiagPrintf
|
||||||
|
|
||||||
|
|||||||
@@ -1217,12 +1217,13 @@ typedef struct {
|
|||||||
(((uint32_t)(val) << 8) & BKUP_RTC_BACKUP_MASK))
|
(((uint32_t)(val) << 8) & BKUP_RTC_BACKUP_MASK))
|
||||||
|
|
||||||
/* rtl8710b_clk.h */
|
/* rtl8710b_clk.h */
|
||||||
#define CLK_TABLE_ROM 0x00046E68
|
|
||||||
#define XTAL_TABLE_ROM 0x00046E10
|
|
||||||
|
|
||||||
/* Clock source position and mask */
|
/* Clock source position and mask */
|
||||||
#define CPU_CLK_POS 4
|
#define CPU_CLK_POS 4
|
||||||
|
|
||||||
|
/* Clock freq set macro */
|
||||||
|
#define SET_CPU_CLOCK(source) \
|
||||||
|
(SYSTEM_CTRL->CLK_CTRL1 = (SYSTEM_CTRL->CLK_CTRL1 & ~SYS_CLK_CPU_CLK_SEL) | (source))
|
||||||
|
|
||||||
/* Clock sources - values pre-shifted to position */
|
/* Clock sources - values pre-shifted to position */
|
||||||
#define CPU_CLK_125M (0 << CPU_CLK_POS)
|
#define CPU_CLK_125M (0 << CPU_CLK_POS)
|
||||||
#define CPU_CLK_62_5M (1 << CPU_CLK_POS)
|
#define CPU_CLK_62_5M (1 << CPU_CLK_POS)
|
||||||
@@ -1231,10 +1232,6 @@ typedef struct {
|
|||||||
#define CPU_CLK_XTAL (4 << CPU_CLK_POS)
|
#define CPU_CLK_XTAL (4 << CPU_CLK_POS)
|
||||||
#define CPU_CLK_ANA_4M (5 << CPU_CLK_POS)
|
#define CPU_CLK_ANA_4M (5 << CPU_CLK_POS)
|
||||||
|
|
||||||
/* Clock control macro */
|
|
||||||
#define SET_CPU_CLOCK(source) \
|
|
||||||
(SYSTEM_CTRL->CLK_CTRL1 = (SYSTEM_CTRL->CLK_CTRL1 & ~CPU_CLK_MASK) | (source))
|
|
||||||
|
|
||||||
/* NCO32k (NCO1) CLK_INFO Register Bits */
|
/* NCO32k (NCO1) CLK_INFO Register Bits */
|
||||||
#define NCO1_CLK_INFO_FREQ_MASK 0x00FFFFFF /* Unregulated clock freq */
|
#define NCO1_CLK_INFO_FREQ_MASK 0x00FFFFFF /* Unregulated clock freq */
|
||||||
#define NCO1_CLK_INFO_32K_RDY (1 << 24) /* 32K clock output rdy */
|
#define NCO1_CLK_INFO_32K_RDY (1 << 24) /* 32K clock output rdy */
|
||||||
|
|||||||
@@ -1,9 +0,0 @@
|
|||||||
#ifndef STARTUP_H
|
|
||||||
#define STARTUP_H
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
// from bootloader
|
|
||||||
extern uint32_t SystemCoreClock;
|
|
||||||
|
|
||||||
#endif // STARTUP_H
|
|
||||||
43
include/system_rtl8710bx.h
Normal file
43
include/system_rtl8710bx.h
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
#ifndef SYSTEM_RTL8710BX
|
||||||
|
#define SYSTEM_RTL8710BX
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#ifdef USE_ROM_TABLES
|
||||||
|
#define CPU_CLK_TABLE 0x00046E68
|
||||||
|
#define XTAL_TABLE_ROM 0x00046E10
|
||||||
|
#else
|
||||||
|
|
||||||
|
/* CPU clock frequency table (Hz) */
|
||||||
|
static const uint32_t CPU_CLK_TABLE[] = {
|
||||||
|
125000000, /* 125 MHz */
|
||||||
|
62500000, /* 62.5 MHz */
|
||||||
|
31250000, /* 31.25 MHz */
|
||||||
|
15625000, /* 15.625 MHz */
|
||||||
|
7812500, /* 7.8125 MHz */
|
||||||
|
4000000 /* 4 MHz */
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Crystal oscillator frequency table (Hz) */
|
||||||
|
static const uint32_t XTAL_TABLE[] = {
|
||||||
|
40000000, /* 40 MHz */
|
||||||
|
25000000, /* 25 MHz */
|
||||||
|
13000000, /* 13 MHz */
|
||||||
|
19200000, /* 19.2 MHz */
|
||||||
|
20000000, /* 20 MHz */
|
||||||
|
26000000, /* 26 MHz */
|
||||||
|
38400000, /* 38.4 MHz */
|
||||||
|
17664000, /* 17.664 MHz */
|
||||||
|
16000000, /* 16 MHz */
|
||||||
|
14318000, /* 14.318 MHz */
|
||||||
|
12000000, /* 12 MHz */
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* System Clock Frequency (Core Clock)*/
|
||||||
|
extern uint32_t SystemCoreClock;
|
||||||
|
|
||||||
|
void SystemCoreClockUpdate(void);
|
||||||
|
void SystemInit(void);
|
||||||
|
|
||||||
|
#endif // SYSTEM_RTL8710BX
|
||||||
38
src/boot.s
38
src/boot.s
@@ -1,40 +1,6 @@
|
|||||||
.syntax unified
|
.syntax unified
|
||||||
.cpu cortex-m4
|
.cpu cortex-m4
|
||||||
|
|
||||||
.section .data
|
|
||||||
.global SystemCoreClock
|
|
||||||
SystemCoreClock: .word 0
|
|
||||||
|
|
||||||
/* these match defines in rtl8710bx.h */
|
|
||||||
.equ SYSON_CLK_CTRL1, 0x40000014
|
|
||||||
.equ CLK_TABLE_ROM, 0x46E68
|
|
||||||
.equ CPU_CLK_POS, 4
|
|
||||||
|
|
||||||
.section .text
|
|
||||||
.thumb_func
|
|
||||||
_startup:
|
|
||||||
/* zero .bss section */
|
|
||||||
ldr r0, =_bss_start
|
|
||||||
ldr r1, =_bss_end
|
|
||||||
movs r2, #0
|
|
||||||
1: cmp r0, r1
|
|
||||||
itt lt
|
|
||||||
strlt r2, [r0], #4
|
|
||||||
blt 1b
|
|
||||||
|
|
||||||
/* set up SystemCoreClock */
|
|
||||||
ldr r0, =SYSON_CLK_CTRL1
|
|
||||||
ldr r2, =CLK_TABLE_ROM
|
|
||||||
ldr r1, [r0]
|
|
||||||
ldr r0, =SystemCoreClock
|
|
||||||
lsrs r1, r1, #CPU_CLK_POS
|
|
||||||
ldr r2, [r2, r1, lsl #2]
|
|
||||||
str r2, [r0]
|
|
||||||
|
|
||||||
cpsie i
|
|
||||||
bl main
|
|
||||||
1: b 1b
|
|
||||||
|
|
||||||
.global _init
|
.global _init
|
||||||
/* cold boot from ROM */
|
/* cold boot from ROM */
|
||||||
_init:
|
_init:
|
||||||
@@ -44,7 +10,7 @@ _init:
|
|||||||
ldr r1, =0xE000ED08
|
ldr r1, =0xE000ED08
|
||||||
str r0, [r1]
|
str r0, [r1]
|
||||||
|
|
||||||
b _startup
|
b SystemInit
|
||||||
|
|
||||||
.section .vectors
|
.section .vectors
|
||||||
.global _vector_table
|
.global _vector_table
|
||||||
@@ -274,6 +240,6 @@ Default_Handler:
|
|||||||
.global Reset_Handler
|
.global Reset_Handler
|
||||||
.thumb_func
|
.thumb_func
|
||||||
Reset_Handler:
|
Reset_Handler:
|
||||||
b _startup
|
b SystemInit
|
||||||
|
|
||||||
.end
|
.end
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
#include "rom.h"
|
#include "rom.h"
|
||||||
#include "rtl8710bx.h"
|
#include "rtl8710bx.h"
|
||||||
#include "startup.h"
|
#include "system_rtl8710bx.h"
|
||||||
|
|
||||||
__attribute__((interrupt)) void SysTick_Handler(void) {
|
__attribute__((interrupt)) void SysTick_Handler(void) {
|
||||||
GPIOA->DR ^= (1 << 23);
|
GPIOA->DR ^= (1 << 23);
|
||||||
@@ -13,15 +13,17 @@ int main(void) {
|
|||||||
printf("[main]\n");
|
printf("[main]\n");
|
||||||
printf("VTOR: 0x%08x\n", SCB->VTOR);
|
printf("VTOR: 0x%08x\n", SCB->VTOR);
|
||||||
printf("SystemCoreClock: %d Hz\n", SystemCoreClock);
|
printf("SystemCoreClock: %d Hz\n", SystemCoreClock);
|
||||||
|
SET_CPU_CLOCK(CPU_CLK_62_5M);
|
||||||
|
SystemCoreClockUpdate();
|
||||||
|
printf("SystemCoreClock afer update: %d Hz\n", SystemCoreClock);
|
||||||
|
|
||||||
SysTick_Config(100); // tick every 100 cycles
|
SysTick_Config(100); // tick / 100 cycles
|
||||||
|
|
||||||
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;
|
||||||
PINMUX_Config(_PA_0, PINMUX_FN_GPIO, GPIO_PuPd_DOWN);
|
PINMUX_Config(_PA_0, PINMUX_FN_GPIO, GPIO_PuPd_DOWN);
|
||||||
PINMUX_Config(_PA_23, PINMUX_FN_GPIO, GPIO_PuPd_NOPULL);
|
PINMUX_Config(_PA_23, PINMUX_FN_GPIO, GPIO_PuPd_NOPULL);
|
||||||
GPIOA->DDR |= (1 << 0) | (1 << 23);
|
GPIOA->DDR |= (1 << 0) | (1 << 23);
|
||||||
// GPIOA->DDR |= (1 << 23);
|
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
}
|
}
|
||||||
|
|||||||
43
src/system_rtl8710bx.c
Normal file
43
src/system_rtl8710bx.c
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
#include "system_rtl8710bx.h"
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#include "rtl8710bx.h"
|
||||||
|
|
||||||
|
uint32_t SystemCoreClock;
|
||||||
|
|
||||||
|
void SystemCoreClockUpdate(void) {
|
||||||
|
uint32_t current_clk_idx =
|
||||||
|
(SYSTEM_CTRL->CLK_CTRL1 & SYS_CLK_CPU_CLK_SEL) >> CPU_CLK_POS;
|
||||||
|
SystemCoreClock = CPU_CLK_TABLE[current_clk_idx];
|
||||||
|
}
|
||||||
|
|
||||||
|
__attribute__((naked)) void SystemInit(void) {
|
||||||
|
asm volatile(
|
||||||
|
/* zero .bss section */
|
||||||
|
"ldr r0, =_bss_start\n"
|
||||||
|
"ldr r1, =_bss_end\n"
|
||||||
|
"movs r2, #0\n"
|
||||||
|
"1:\n"
|
||||||
|
"cmp r0, r1\n"
|
||||||
|
"itt lt\n"
|
||||||
|
"strlt r2, [r0], #4\n"
|
||||||
|
"blt 1b\n"
|
||||||
|
"\n"
|
||||||
|
/* set up SystemCoreClock */
|
||||||
|
"ldr r0, =%0\n"
|
||||||
|
"ldr r2, =%1\n"
|
||||||
|
"ldr r1, [r0]\n"
|
||||||
|
"ldr r0, =%2\n"
|
||||||
|
"lsrs r1, r1, %3\n"
|
||||||
|
"ldr r2, [r2, r1, lsl #2]\n"
|
||||||
|
"str r2, [r0]\n"
|
||||||
|
"\n"
|
||||||
|
"cpsie i\n"
|
||||||
|
"bl main\n"
|
||||||
|
"b 1b\n" /* if main ever returns */
|
||||||
|
:
|
||||||
|
: "i"(&SYSTEM_CTRL->CLK_CTRL1), "i"(&CPU_CLK_TABLE),
|
||||||
|
"i"(&SystemCoreClock), "i"(CPU_CLK_POS)
|
||||||
|
: "r0", "r1", "r2", "r3", "memory");
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user