?? 56f82x_init.c
字號:
/*
56F82x_init.c
Metrowerks, a Motorola Company
sample code
*/
#include "56F82x_init.h"
extern _xROM_to_xRAM;
extern _pROM_to_xRAM;
extern _Xbss_length;
extern _start_bss;
extern _StackAddr;
extern _Ldata_size;
extern _Ldata_ROM_addr;
extern _Ldata_RAM_addr;
asm void init_56800_()
{
bfset #_32bit_compares,omr // debugger will override this
// if debugger option is on
move #-1,x0
move x0,m01 // set the m reg to linear addressing
move hws,la // clear the hardware stack
move hws,la
// initialize compiler environment
CALLMAIN:
// setup stack
move #_StackAddr,r0 // get stack start address
nop
move r0,x:<mr15 // set frame pointer to main stack top
move r0,sp // set stack pointer too
move #0,r1
move r1,x:(r0)
// xROM-to-xRAM utility
move #_xROM_to_xRAM,r0 // check for option
tstw r0
beq end_rom2ram
move #_Ldata_size,y0 // set data size
tstw y0 // LNE
beq end_rom2ram // LNE if no init data, then exit
cmp #8191,Y0
bls do_xrom2xram
debug // You have reached this because size of
// initialized data exceeded 2^13 size.
// Add code here to copy data above
// 2^13 (or 8191).
do_xrom2xram:
move #_Ldata_ROM_addr,r3 // src address -- xROM data start
move #_Ldata_RAM_addr,r1 // dest address -- xRAM data start
do y0,end_rom2ram // copy for y0 times
move x:(r3)+,x0 // fetch value at address r3
move x0,x:(r1)+ // stash value at address r1
end_rom2ram:
// pROM-to-xRAM utility
move #_pROM_to_xRAM,r0 // check for the option
tstw r0
beq end_prom2xram // if no pROM-to-xRAM, then exit
move #_Ldata_size,y0 // set data size
tstw y0 // LNE
beq end_prom2xram // LNE if no init data, then exit
cmp #8191,Y0
bls do_prom2xram
debug // You have reached this because size of
// initialized data exceeded 2^13 size.
// Add code here to copy data above
// 2^13 (or 8191).
do_prom2xram:
move #_Ldata_ROM_addr,r3 // src address -- pROM data start
move #_Ldata_RAM_addr,r1 // dest address -- xRAM data start
do y0,end_prom2xram // copy for y0 times
move p:(r3)+,x0 // fetch value at address r3
move x0,x:(r1)+ // stash value at address r1
end_prom2xram:
// clear bss always
move #0,x0 // set x0 to zero
move #_Xbss_length,y0 // set bss size
tstw y0 // LNE
beq end_bss_clear // LNE if no bss data, then exit
cmp #8191,Y0
bls do_bss_clear
debug // You have reached this because size of
// uninitialized data exceeded 2^13 size.
// Add code here to clear bss data above
// 2^13 (or 8191).
do_bss_clear:
move #_start_bss,r1 // dest address -- bss data start
do y0,end_bss_clear // do for y0 times
move x0,x:(r1)+ // stash zero at address
nop
end_bss_clear:
// call main()
jsr main // call the users program
debug
rts
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -