⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 setup.s

📁 基于32位ColdFire构建嵌入式系统书本原程序.rar
💻 S
字号:
//-------------------------------------------------------------------------*
// 文件名:  setup.s                                                        *
// 说  明:  MCF52233的启动文件                                             *
//-------------------------------------------------------------------------*
//为了汇编调用,给出一些标号或函数宏定义
#define mcf52233_init  _mcf52233_init  
#define main	       _main           
#define __IPSBAR       ___IPSBAR       
#define __SRAM         ___SRAM         
#define __FLASH        ___FLASH        
#define __SP_INIT      ___SP_INIT      
 
//外部标记符引用声明
.extern __IPSBAR
.extern __SRAM
.extern __FLASH
.extern __SP_INIT
.extern mcf52233_init
.extern main
//全局标记符定义
.global asm_startmeup
.global _asm_startmeup
.global mcf5xxx_wr_cacr
.global _mcf5xxx_wr_cacr
.global mcf5xxx_wr_vbr
.global _mcf5xxx_wr_vbr
.global d0_reset
.global _d0_reset
.global d1_reset
.global _d1_reset

.data
//定义变量保存D0和D1的复位值    
d0_reset:
_d0_reset:  .long   0
d1_reset:
_d1_reset:  .long   0

.text

//-------------------------------------------------------------------------*
//函数名: asm_startmeup                                                    *
//功  能: 硬件复位后的启动函数。内存映射根据链接文件的定义设置,然后调用   *
//        更高级的系统初始化例程。最后程序跳转到“main”程序               *
//参  数: 无                                                               *
//返  回: 无                                                               *
//-------------------------------------------------------------------------*
asm_startmeup:
_asm_startmeup:

    //备份芯片信息:D0寄存器提供了处理器配置信息,D1提供内部存储器配置的信息。    
    //先备份D0和D1到D6和D7,后面会使用D0和D1,
    //而D0和D1在系统加电之初保存有芯片相关信息
    move.l  d0,d6
    move.l  d1,d7
    
    //初始化RAMBAR1: 定位SRAM并使其生效
    //设置RAMBAR1的SPV和V位为1,
    //SPV:允许DMA和FEC访问内存
    //V  :设置SRAM模块有效。
    move.l	#__SRAM,d0
    add.l   #0x21,d0
    movec   d0,RAMBAR1
    
    //初始化IPSBAR
    move.l	#__IPSBAR,d0
    add.l   #0x1,d0
    move.l	d0,0x40000000
    	
    //初始化FLASHBAR
    move.l  #__FLASH,d0
    cmp.l   #0x00000000,d0
    bne     change_flashbar
    add.l   #0x61,d0
    movec   d0,RAMBAR0

_continue_startup:
    //定位堆栈指针 
    move.l	#__SP_INIT,sp
    //系统初始化
    jsr		mcf52233_init
    // 备份D0和D1的初始值到RAM,访问d0_reset和d1_reset得到D0和D1的初始值
    move.l  d6,d0_reset
    move.l  d7,d1_reset
    
    //跳转到main程序
    jsr		main
    bra		.
    nop
    nop
    halt

change_flashbar:
   
    //下面的程序用于设置FLASHBAR。由于可能正在Flash中执行,必须将例程放到
    //SRAM中执行,然后使用新地址跳回到Flash。

    //下面的指令被编码到SRAM:
    //
    // move.l	#(__FLASH + 0x21),d0
    // movec	d0, RAMBAR0
    // jmp		_continue_startup
    
    //选择任意一个SRAM地址,直到载入实地址。
    //如果使用默认Flash地址(0x00000000),则不需要该程序
    //如果在SRAM中运行,不需要执行change_flashbar

    move.l  #__SRAM,a0

    //将代码"move.l #(__FLASH + 0x21),d0"放入SRAM
    move.w  #0x203C,d0
    move.w  d0,(a0)+
    move.l  #__FLASH,d0
    add.l   #0x21,d0
    move.l  d0,(a0)+
	
    //将代码"movec d0,FLASHBAR"放入SRAM
    move.l  #0x4e7b0C04,d0
    move.l  d0,(a0)+

    //将代码"jmp _continue_startup"放入SRAM
    move.w  #0x4EF9,d0
    move.w  d0,(a0)+
    move.l  #_continue_startup,d0
    move.l  d0,(a0)+

    //跳到内部SRAM的代码段
    jmp	    __SRAM

//==========================================================================

mcf5xxx_wr_cacr:
_mcf5xxx_wr_cacr:
    //movec d0,cacr
    move.l  4(SP),D0
    .long   0x4e7b0002
    nop
    rts
    
mcf5xxx_wr_vbr:
_mcf5xxx_wr_vbr:
    //movec d0,VBR
    move.l  4(SP),D0
    .long   0x4e7b0801
    nop
    rts
    .end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -