📄 crt0_rom.s
字号:
/* * linux/arch/h8300/platform/h8s/edosk2674/crt0_rom.S * * Yoshinori Sato <ysato@users.sourceforge.jp> * * Platform depend startup * Target Archtecture: EDOSK-2674 * Memory Layout : ROM */#define ASSEMBLY#include <linux/config.h>#include <asm/linkage.h>#include <asm/regs267x.h> .global SYMBOL_NAME(_start) .global SYMBOL_NAME(_command_line) .global SYMBOL_NAME(_platform_gpio_table) .global SYMBOL_NAME(_target_name) .h8300s .section .text .file "crt0_rom.S" /* CPU Reset entry */SYMBOL_NAME_LABEL(_start) mov.l #__ramend,sp ldc #0x80,ccr ldc #0,exr /* Peripheral Setup */;BSC/GPIO setup mov.l #init_regs,er0 mov.w #0xffff,e21: mov.w @er0+,r2 beq 2f mov.w @er0+,r1 mov.b r1l,@er2 bra 1b2:;SDRAM setup#define SDRAM_SMR 0x400040 mov.b #0,r0l mov.b r0l,@DRACCR:16 mov.w #0x188,r0 mov.w r0,@REFCR:16 mov.w #0x85b4,r0 mov.w r0,@DRAMCR:16 mov.b #0,r1l mov.b r1l,@SDRAM_SMR mov.w #0x84b4,r0 mov.w r0,@DRAMCR:16;special thanks to Arizona Cooperative Power /* copy .data */ mov.l #__begin_data,er5 mov.l #__sdata,er6 mov.l #__edata,er4 sub.l er6,er4 shlr.l #2,er41: mov.l @er5+,er0 mov.l er0,@er6 adds #4,er6 dec.l #1,er4 bne 1b /* .bss clear */ mov.l #__sbss,er5 mov.l #__ebss,er4 sub.l er5,er4 shlr.l #2,er4 sub.l er0,er01: mov.l er0,@er5 adds #4,er5 dec.l #1,er4 bne 1b /* copy kernel commandline */ mov.l #COMMAND_START,er5 mov.l #SYMBOL_NAME(_command_line),er6 mov.w #512,r4 eepmov.w /* linux kernel start */ ldc #0x90,ccr /* running kernel */ mov.l #SYMBOL_NAME(init_thread_union),sp add.l #0x2000,sp jsr @_start_kernel_exit: jmp _exit rts /* I/O port assign information */__platform_gpio_table: mov.l #gpio_table,er0 rts#define INIT_REGS_DATA(REGS,DATA) \ .word ((REGS) & 0xffff),DATAinit_regs:INIT_REGS_DATA(ASTCR,0xff)INIT_REGS_DATA(RDNCR,0x00)INIT_REGS_DATA(ABWCR,0x80)INIT_REGS_DATA(WTCRAH,0x27)INIT_REGS_DATA(WTCRAL,0x77)INIT_REGS_DATA(WTCRBH,0x71)INIT_REGS_DATA(WTCRBL,0x22)INIT_REGS_DATA(CSACRH,0x80)INIT_REGS_DATA(CSACRL,0x80)INIT_REGS_DATA(BROMCRH,0xa0)INIT_REGS_DATA(BROMCRL,0xa0)INIT_REGS_DATA(P3DDR,0x3a)INIT_REGS_DATA(P3ODR,0x06)INIT_REGS_DATA(PADDR,0xff)INIT_REGS_DATA(PFDDR,0xfe)INIT_REGS_DATA(PGDDR,0x0f)INIT_REGS_DATA(PHDDR,0x0f)INIT_REGS_DATA(PFCR0,0xff)INIT_REGS_DATA(PFCR2,0x0d)INIT_REGS_DATA(ITSR, 0x00)INIT_REGS_DATA(ITSR+1,0x3f)INIT_REGS_DATA(INTCR,0x20) .word 0gpio_table: ;; P1DDR .byte 0x00,0x00 ;; P2DDR .byte 0x00,0x00 ;; P3DDR .byte 0x00,0x00 ;; dummy .byte 0x00,0x00 ;; P5DDR .byte 0x00,0x00 ;; P6DDR .byte 0x00,0x00 ;; P7DDR .byte 0x00,0x00 ;; P8DDR .byte 0x00,0x00 ;; dummy .byte 0x00,0x00 ;; PADDR .byte 0x00,0x00 ;; PBDDR .byte 0x00,0x00 ;; PCDDR .byte 0x00,0x00 ;; PDDDR .byte 0x00,0x00 ;; PEDDR .byte 0x00,0x00 ;; PFDDR .byte 0x00,0x00 ;; PGDDR .byte 0x00,0x00 ;; PHDDR .byte 0x00,0x00 .section .rodata__target_name: .asciz "EDOSK-2674" .section .bss__command_line: .space 512 /* interrupt vector */ .section .vectors,"ax" .long __start .long __startvector = 2 .rept 126-1 .long _interrupt_redirect_table+vector*4vector = vector + 1 .endr
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -