startup code
This commit is contained in:
parent
f4312f7cf6
commit
721173449c
5
Makefile
5
Makefile
|
@ -58,7 +58,7 @@ ALL = $(TESTS:.c=.srec) $(TESTS:.c=.bin) $(TESTS:.c=.dis)
|
|||
|
||||
.PRECIOUS: $(COBJS) $(TARGETS) $(TESTS:.c=.obj)
|
||||
|
||||
all: $(ALL)
|
||||
all: src/start.o $(ALL)
|
||||
|
||||
tests/nvm-read.obj: src/maca.o
|
||||
tests/rftest-rx.obj: src/maca.o
|
||||
|
@ -74,10 +74,9 @@ tests/rftest-tx.obj: src/maca.o
|
|||
$(OBJCOPY) ${OBJCFLAGS} -O binary $< $@
|
||||
|
||||
%.dis: %.obj
|
||||
$(OBJDUMP) -d $< > $@
|
||||
$(OBJDUMP) -D $< > $@
|
||||
|
||||
%.obj: $(LDSCRIPT) %.o
|
||||
echo $*.o
|
||||
$(LD) $(LDFLAGS) $(AOBJS) \
|
||||
--start-group $(PLATFORM_LIBS) --end-group \
|
||||
-Map $*.map $^ -o $@
|
||||
|
|
2
boot.lds
2
boot.lds
|
@ -32,7 +32,7 @@ SECTIONS
|
|||
. = ALIGN(4);
|
||||
.text :
|
||||
{
|
||||
*(startup)
|
||||
src/start.o (.text)
|
||||
*(.text)
|
||||
}
|
||||
|
||||
|
|
|
@ -407,6 +407,7 @@ typedef union maca_maskirq_reg_tag
|
|||
|
||||
void reset_maca(void);
|
||||
void init_phy(void);
|
||||
void vreg_init(void);
|
||||
void ResumeMACASync(void);
|
||||
void radio_init(void);
|
||||
void set_power(uint8_t power);
|
||||
|
|
40
include/nvm.h
Normal file
40
include/nvm.h
Normal file
|
@ -0,0 +1,40 @@
|
|||
#ifndef NVM_H
|
||||
#define NVM_H
|
||||
|
||||
typedef enum
|
||||
{
|
||||
gNvmType_NoNvm_c,
|
||||
gNvmType_SST_c,
|
||||
gNvmType_ST_c,
|
||||
gNvmType_ATM_c,
|
||||
gNvmType_Max_c
|
||||
} nvmType_t;
|
||||
|
||||
|
||||
typedef enum
|
||||
{
|
||||
gNvmErrNoError_c = 0,
|
||||
gNvmErrInvalidInterface_c,
|
||||
gNvmErrInvalidNvmType_c,
|
||||
gNvmErrInvalidPointer_c,
|
||||
gNvmErrWriteProtect_c,
|
||||
gNvmErrVerifyError_c,
|
||||
gNvmErrAddressSpaceOverflow_c,
|
||||
gNvmErrBlankCheckError_c,
|
||||
gNvmErrRestrictedArea_c,
|
||||
gNvmErrMaxError_c
|
||||
} nvmErr_t;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
gNvmInternalInterface_c,
|
||||
gNvmExternalInterface_c,
|
||||
gNvmInterfaceMax_c
|
||||
} nvmInterface_t;
|
||||
|
||||
/* ROM code seems to be THUMB */
|
||||
/* need to be in a THUMB block before calling them */
|
||||
volatile nvmErr_t (*nvm_detect)(nvmInterface_t nvmInterface,nvmType_t* pNvmType) = 0x00006cb9;
|
||||
volatile nvmErr_t (*nvm_read)(nvmInterface_t nvmInterface , nvmType_t nvmType , void *pDest, uint32_t address, uint32_t numBytes);
|
||||
|
||||
#endif //NVM_H
|
|
@ -1,3 +1,4 @@
|
|||
#include "embedded_types.h"
|
||||
#include "maca.h"
|
||||
|
||||
#define reg(x) (*(volatile uint32_t *)(x))
|
||||
|
|
177
src/start.S
Normal file
177
src/start.S
Normal file
|
@ -0,0 +1,177 @@
|
|||
/*
|
||||
* armboot - Startup Code for ARM720 CPU-core
|
||||
*
|
||||
* Copyright (c) 2001 Marius Gröger <mag@sysgo.de>
|
||||
* Copyright (c) 2002 Alex Züpke <azu@sysgo.de>
|
||||
*
|
||||
* See file CREDITS for list of people who contributed to this
|
||||
* project.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
*************************************************************************
|
||||
*
|
||||
* Jump vector table as in table 3.1 in [1]
|
||||
*
|
||||
*************************************************************************
|
||||
*/
|
||||
|
||||
|
||||
.globl _start
|
||||
_start: b main
|
||||
ldr pc, _undefined_instruction
|
||||
ldr pc, _software_interrupt
|
||||
ldr pc, _prefetch_abort
|
||||
ldr pc, _data_abort
|
||||
ldr pc, _not_used
|
||||
ldr pc, _irq
|
||||
ldr pc, _fiq
|
||||
|
||||
_undefined_instruction: .word undefined_instruction
|
||||
_software_interrupt: .word software_interrupt
|
||||
_prefetch_abort: .word prefetch_abort
|
||||
_data_abort: .word data_abort
|
||||
_not_used: .word not_used
|
||||
_irq: .word irq
|
||||
_fiq: .word fiq
|
||||
|
||||
.balignl 16,0xdeadbeef
|
||||
|
||||
|
||||
/*
|
||||
*************************************************************************
|
||||
*
|
||||
* Startup Code (reset vector)
|
||||
*
|
||||
* do important init only if we don't start from memory!
|
||||
* relocate armboot to ram
|
||||
* setup stack
|
||||
* jump to second stage
|
||||
*
|
||||
*************************************************************************
|
||||
*/
|
||||
|
||||
_TEXT_BASE:
|
||||
.word TEXT_BASE
|
||||
|
||||
.globl _armboot_start
|
||||
_armboot_start:
|
||||
.word _start
|
||||
|
||||
/*
|
||||
* These are defined in the board-specific linker script.
|
||||
*/
|
||||
.globl _bss_start
|
||||
_bss_start:
|
||||
.word __bss_start
|
||||
|
||||
.globl _bss_end
|
||||
_bss_end:
|
||||
.word _end
|
||||
|
||||
_start_armboot: .word main
|
||||
|
||||
/*
|
||||
*************************************************************************
|
||||
*
|
||||
* CPU_init_critical registers
|
||||
*
|
||||
*************************************************************************
|
||||
*/
|
||||
|
||||
cpu_init_crit:
|
||||
# actually do nothing for now!
|
||||
mov pc, lr
|
||||
|
||||
|
||||
/*
|
||||
*************************************************************************
|
||||
*
|
||||
* Interrupt handling
|
||||
*
|
||||
*************************************************************************
|
||||
*/
|
||||
|
||||
@
|
||||
@ IRQ stack frame.
|
||||
@
|
||||
#define S_FRAME_SIZE 72
|
||||
|
||||
#define S_OLD_R0 68
|
||||
#define S_PSR 64
|
||||
#define S_PC 60
|
||||
#define S_LR 56
|
||||
#define S_SP 52
|
||||
|
||||
#define S_IP 48
|
||||
#define S_FP 44
|
||||
#define S_R10 40
|
||||
#define S_R9 36
|
||||
#define S_R8 32
|
||||
#define S_R7 28
|
||||
#define S_R6 24
|
||||
#define S_R5 20
|
||||
#define S_R4 16
|
||||
#define S_R3 12
|
||||
#define S_R2 8
|
||||
#define S_R1 4
|
||||
#define S_R0 0
|
||||
|
||||
#define MODE_SVC 0x13
|
||||
#define I_BIT 0x80
|
||||
|
||||
|
||||
.macro get_irq_stack @ setup IRQ stack
|
||||
ldr sp, IRQ_STACK_START
|
||||
.endm
|
||||
|
||||
.macro get_fiq_stack @ setup FIQ stack
|
||||
ldr sp, FIQ_STACK_START
|
||||
.endm
|
||||
|
||||
/*
|
||||
* exception handlers
|
||||
*/
|
||||
.align 5
|
||||
undefined_instruction:
|
||||
|
||||
.align 5
|
||||
software_interrupt:
|
||||
|
||||
.align 5
|
||||
prefetch_abort:
|
||||
nop
|
||||
.align 5
|
||||
data_abort:
|
||||
|
||||
.align 5
|
||||
not_used:
|
||||
|
||||
|
||||
.align 5
|
||||
irq:
|
||||
|
||||
.align 5
|
||||
fiq:
|
||||
|
||||
.align 5
|
||||
|
||||
.globl reset_cpu
|
||||
reset_cpu:
|
||||
mov pc, r0
|
|
@ -14,6 +14,7 @@
|
|||
|
||||
#include "embedded_types.h"
|
||||
#include "nvm.h"
|
||||
#include "maca.h"
|
||||
|
||||
#define reg(x) (*(volatile uint32_t *)(x))
|
||||
|
||||
|
@ -30,8 +31,7 @@ const uint8_t hex[16]={'0','1','2','3','4','5','6','7',
|
|||
|
||||
__attribute__ ((section ("startup")))
|
||||
void main(void) {
|
||||
uint8_t c;
|
||||
uint32_t type;
|
||||
uint32_t type=0xdeadbeef;
|
||||
nvmErr_t err;
|
||||
|
||||
*(volatile uint32_t *)GPIO_PAD_DIR0 = 0x00000100;
|
||||
|
@ -55,9 +55,9 @@ void main(void) {
|
|||
|
||||
vreg_init();
|
||||
|
||||
puts("CRM status: 0x");
|
||||
put_hex32(reg(0x80003018));
|
||||
puts("\n\r");
|
||||
// puts("CRM status: 0x");
|
||||
// put_hex32(reg(0x80003018));
|
||||
// puts("\n\r");
|
||||
|
||||
puts("Detecting internal nvm\n\r");
|
||||
|
||||
|
@ -66,11 +66,10 @@ void main(void) {
|
|||
puts("nvm_detect returned: 0x");
|
||||
put_hex(err);
|
||||
puts(" type is: 0x");
|
||||
put_hex(type);
|
||||
put_hex32(type);
|
||||
puts("\n\r");
|
||||
|
||||
while(1) {
|
||||
};
|
||||
while(1) {continue;};
|
||||
}
|
||||
|
||||
void putc(uint8_t c) {
|
||||
|
|
Loading…
Reference in a new issue