【经验】Silicon Labs EFM8单片机STARTUP.A51文件解析
SILICON LABS EFM8系列MCU特点:高速内核,主频可达72Mhz,70%以上的指令可在1到2个时钟周期完成。数字外设,自主外设降低处理器负载,更快更高精度的PWM输出,高数据吞吐量的快速串行外设。模拟外设,都有高性能ADC,温度传感比较电压调节器,部分系列有DAC、电容传感器。高集成度,最小3x3mm的标准封装,丰富的资源USB、振荡器、电压参考等。超低功耗,睡眠模式低至50nA,2us唤醒时间,有效模式150uA/MHz。免费的Simplicity Studio IDE集成开发环境,免费的KEIL C51编译工具,功耗评估软件,底层配置工具,事例工程和大量资料。
8051设计默认是自动加载这段STARTUP.A51汇编代码,一般要考虑考虑区分上电复位和程序复位的情况。有时候当程序复位时,不希望一些内存单元被清零,需要保留复位前的内容,那么就要对STARTUP.A51做修改了。
比如IDATALEN=80H,表示从0~7FH地址长度,如果你把程序改成
IDATALEN EQU 0100H,那么就是对应0~FFH地址长度,程序会根据长度不同循环判断清零内存内容。
如果你要修改STARTUP.A51文件,在Simplicity Studio V4环境下创建新的工程会自动拷贝此文件到工程目录下,方便用户修改。删掉此文件则默认加载系统路径下的STARTUP.A51文件。
如果调试不能进入main函数,那就不得不对此文件进行修改,复位后立即关闭看门狗定时器功能。避免程序还没执行到应用程序,就被看门狗定时器强制复位了。
8051 RAM存储器类型分为三种模式,分别为Small、Compact、Large。
1、内部RAM的低128字节(00-7F)
2、内部RAM的高128字节(80-FF)---【增强型51才有高128字节,例如:EFM8系列】
3、特殊功能寄存器(SFR)(80-FF)
4、外部RAM 64K(0000-FFFF)
data 表示的是内部RAM的低128字节,可以直接寻址,速度比较快。
idata 表示内部RAM高128字节,只能是间接寻址,速度比data里的数据要慢。
pdata是外部RAM中的前256个,也就是外部RAM中的00--FF,只能MOVX 间接寻址,因为可以用R0做为指针,速度与idata是一样的。
xdata是外部RAM的全部,也可以包括前256个,外部RAM前256个,可以用pdata和xdata定义都行。其他内容只能是MOVX 和 DPTR组合寻址,速度最慢。
我们一起来分析STARTUP.A51文件内容:
$NOMOD51 ;Ax51宏汇编器控制命令,禁止预定义的8051符号。使编译器不能使用预定义的8051符号,避免产生重复定义错误。
;------------------------------------------------------------------------------
; This file is part of the C51 Compiler package
; Copyright (c) 1988-2005 Keil Elektronik GmbH and Keil Software, Inc.
; Version 8.01
;
; *** <<< Use Configuration Wizard in Context Menu >>> ***
;------------------------------------------------------------------------------
; STARTUP.A51: This code is executed after processor reset.
;
; To translate this file use A51 with the following invocation:
;
; A51 STARTUP.A51
;
; To link the modified STARTUP.OBJ file to your application use the following
; Lx51 invocation:
;
; Lx51 your object file list, STARTUP.OBJ controls
;
;------------------------------------------------------------------------------
;
; User-defined <h> Power-On Initialization of Memory
;
; With the following EQU statements the initialization of memory
; at processor reset can be defined:
;
; <o> IDATALEN: IDATA memory size <0x0-0x100>
; <i> Note: The absolute start-address of IDATA memory is always 0
; <i> The IDATA space overlaps physically the DATA and BIT areas.
IDATALEN EQU 80H ;IDATALEN是一个标号,EQU是汇编宏定义,这句代码表示定义了一个IDATA存储区长度宏标号,宏扩展等价于80H。
;
; <o> XDATASTART: XDATA memory start address <0x0-0xFFFF>
; <i> The absolute start address of XDATA memory
XDATASTART EQU 0 ;定义一个XDATA存储区域的起始地址宏标号。
;
; <o> XDATALEN: XDATA memory size <0x0-0xFFFF>
; <i> The length of XDATA memory in bytes.
XDATALEN EQU 0 ;定义一个XDATA存储区域长度宏标号。
;
; <o> PDATASTART: PDATA memory start address <0x0-0xFFFF>
; <i> The absolute start address of PDATA memory
PDATASTART EQU 0H ;定义一个PDATA存储区域的起始地址宏标号。
;
; <o> PDATALEN: PDATA memory size <0x0-0xFF>
; <i> The length of PDATA memory in bytes.
PDATALEN EQU 0H ;定义一个PDATA存储区域的长度宏标号。
;
;</h>
;------------------------------------------------------------------------------
;
;<h> Reentrant Stack Initialization
;再入堆栈的初始化,生长方向取决芯片,一般是自顶向下增长的。而硬件堆栈SP是自下向上增长的。
; The following EQU statements define the stack pointer for reentrant
; functions and initialized it:
;函数参数的传递取决于编译器,Keil C51默认情况不是用堆栈来传递参数的,所以造成函数默认情况下不可重入,如果需要函数重入,需要在函数定义后增加reentrant关键字声明。Simplicity Studio V4 提供免费Keil C51 V9.3版本。
; <h> Stack Space for reentrant functions in the SMALL model.
; <q> IBPSTACK: Enable SMALL model reentrant stack
; <i> Stack space for reentrant functions in the SMALL model.
IBPSTACK EQU 0 ; set to 1 if small reentrant is used.
;SMALL 存储器模式,所有变量默认都放在RAM中寄存器直接寻址低128字节。
; <o> IBPSTACKTOP: End address of SMALL model stack <0x0-0xFF>
; <i> Set the top of the stack to the highest location.
IBPSTACKTOP EQU 0xFF +1 ; default 0FFH+1 定义栈顶位置。
; </h>
; <h> Stack Space for reentrant functions in the LARGE model.
; <q> XBPSTACK: Enable LARGE model reentrant stack
; <i> Stack space for reentrant functions in the LARGE model.
XBPSTACK EQU 0 ; set to 1 if large reentrant is used.
;LARGE 存储器模式,所有变量默认都放在外部XRAM中寄存器DPTR寻址整64K字节。
; <o> XBPSTACKTOP: End address of LARGE model stack <0x0-0xFFFF>
; <i> Set the top of the stack to the highest location.
XBPSTACKTOP EQU 0xFFFF +1 ; default 0FFFFH+1 定义栈顶位置。
; </h>
; <h> Stack Space for reentrant functions in the COMPACT model.
; <q> PBPSTACK: Enable COMPACT model reentrant stack
; <i> Stack space for reentrant functions in the COMPACT model.
PBPSTACK EQU 0 ; set to 1 if compact reentrant is used.
;COMPACT 存储器模式,所有变量默认都放在外部XRAM中寄存器R0寻址低256字节
; <o> PBPSTACKTOP: End address of COMPACT model stack <0x0-0xFFFF>
; <i> Set the top of the stack to the highest location.
PBPSTACKTOP EQU 0xFF +1 ; default 0FFH+1 定义栈顶位置。
; </h>
;</h>
;------------------------------------------------------------------------------
; CIP51有三种存储器模式,不同模式下访问速度和效率不同,根据需要选择。
; Memory Page for Using the Compact Model with 64 KByte xdata RAM
; <e>Compact Model Page Definition
;
; <i>Define the XDATA page used for PDATA variables.
; <i>PPAGE must conform with the PPAGE set in the linker invocation.
;
; Enable pdata memory page initalization
PPAGEENABLE EQU 0 ; set to 1 if pdata object are used.
;是否使能页寻址模式宏开关,0关闭,1使能。
; <o> PPAGE number <0x0-0xFF>
; <i> uppermost 256-byte address of the page used for PDATA variables.
PPAGE EQU 0
; 页寻址模式使能后的默认页编号。大多数8051系统采用P2口来支持翻页功能。
; <o> SFR address which supplies uppermost address byte <0x0-0xFF>
; <i> most 8051 variants use P2 as uppermost address byte
PPAGE_SFR DATA 0A0H ;定义页地址寄存器地址为0A0H。
;关键字DATA是A51伪指令,表示8051单片机内寄存器的物理地址定义。
; </e>
;------------------------------------------------------------------------------
; Standard SFR Symbols
ACC DATA 0E0H ;定义累加器ACC地址为0E0H
B DATA 0F0H ;定义寄存器B地址为0F0H
SP DATA 81H ;定义堆栈指针SP地址为81H
DPL DATA 82H ;定义DPTL低字节地址为82H
DPH DATA 83H ;定义DPTL高字节地址为83H
NAME ?C_STARTUP ;定义当前程序的名称
?C_C51STARTUP SEGMENT CODE ;定义一个可再定位的段符号名和段所在的存储空间,汇编器产生的这个段符号名在BL51/L51连接定位时使用。
?STACK SEGMENT IDATA ;定义一个IDATA段,段名为“?STACK”符合C51编译器标准命名规则。
RSEG ?STACK ;声明当前段是IDATA段,段中保留空间,RSEG为指令用于选择一个事先使用SEGMENT为指令声明的普通段。
DS 1 ;DS是预留空间定义为指令
EXTRN CODE (?C_START) ;声明本模块引用的外部全局符号,?C_START在外部对应C语言的main函数入口。
PUBLIC ?C_STARTUP ;声明全局符号,可以被其他模块引用。
CSEG AT 0 ;结束当前的IDATA段,产生一个位于CODE存储区的新段,起始地址从0开始。
?C_STARTUP: LJMP STARTUP1 ;芯片复位后代码从这里开始执行。
RSEG ?C_C51STARTUP ;选择?C_C51STARTUP段为当前段,存储程序代码在CODE区域。
STARTUP1:
$IF (SILABS_STARTUP = 1);复位重启后是否优先调用SiLabs_Startup函数,通过标识符SILABS_STARTUP = 1来判断,需要在编译器配置汇编语言标识符处定义。请注意默认是被注释了,生效删除IF和ENDIF前的符号$。
EXTRN CODE (SiLabs_Startup)
LCALL SiLabs_Startup ;此函数优先main函数执行,可优先关闭看门狗,以及执行需要在复位后立即处理的程序。
$ENDIF
请特别注意:EFM8单片机默认看门狗是开启状态,程序规模增加,全局变量定义数量增多,预处理时间会加长,会导致调试时无法进入main函数,就被看门狗复位的情况,现象是调试不能停下来,出不了STARTUP.A51汇编代码,附上关闭看门狗C程序如下:
; void SiLabs_Startup(void) {
; // $[SiLabs Startup]
; // [SiLabs Startup]$
; PCA0MD &= ~PCA0MD_WDTE__BMASK; // Disable watchdog timer
;}
IF IDATALEN <> 0 ;条件汇编指令,IDATA长度不等于0,清零IDATA区数据。
MOV R0,#IDATALEN - 1
CLR A
IDATALOOP: MOV @R0,A
DJNZ R0,IDATALOOP ;循环判断,直到IDATA区域全部清零。
ENDIF
IF XDATALEN <> 0 ;条件汇编指令,XDATA长度不等于0,清零XDATA区数据。
MOV DPTR,#XDATASTART
MOV R7,#LOW (XDATALEN)
IF (LOW (XDATALEN)) <> 0
MOV R6,#(HIGH (XDATALEN)) +1
ELSE
MOV R6,#HIGH (XDATALEN)
ENDIF
CLR A
XDATALOOP: MOVX @DPTR,A
INC DPTR
DJNZ R7,XDATALOOP
DJNZ R6,XDATALOOP
ENDIF
IF PPAGEENABLE <> 0 ;条件汇编指令,判断翻页功能是否有效,非0有效。
MOV PPAGE_SFR,#PPAGE
ENDIF
IF PDATALEN <> 0 ;判断页数量是否不等于0,非零执行翻页清零数据。
MOV R0,#LOW (PDATASTART)
MOV R7,#LOW (PDATALEN)
CLR A
PDATALOOP: MOVX @R0,A
INC R0
DJNZ R7,PDATALOOP
ENDIF
IF IBPSTACK <> 0 ;判断使用再入栈的情况,C51定义了三个全局变量。使用全局变量?C_IBP来存储再入堆栈的栈顶地址。
EXTRN DATA (?C_IBP) ;函数是Small 存储器模式的时候。
MOV ?C_IBP,#LOW IBPSTACKTOP
ENDIF
IF XBPSTACK <> 0 ;判断使用全局变量?C_XBP来存储再入堆栈的栈顶地址。
EXTRN DATA (?C_XBP) ;函数是Large 存储器模式的时候。
MOV ?C_XBP,#HIGH XBPSTACKTOP
MOV ?C_XBP+1,#LOW XBPSTACKTOP
ENDIF
IF PBPSTACK <> 0 ;判断使用全局变量?C_PBP来存储再入堆栈的栈顶地址。
EXTRN DATA (?C_PBP) ;函数是Compact存储器模式的时候。
MOV ?C_PBP,#LOW PBPSTACKTOP
ENDIF
MOV SP,#?STACK-1 ;定义的硬件栈常数,区别再入堆栈。定义的段符号?STACK代表该段的首地址。
; This code is required if you use L51_BANK.A51 with Banking Mode 4
;<h> Code Banking
; <q> Select Bank 0 for L51_BANK.A51 Mode 4
$IF (USE_BANKING = 1) ;是否使用bank 0 模式4,默认不使能被注释。
; <i> Initialize bank mechanism to code bank 0 when using L51_BANK.A51 with Banking Mode 4.
EXTRN CODE (?B_SWITCH0)
CALL ?B_SWITCH0 ; init bank mechanism to code bank 0
$ENDIF
;</h>
LJMP ?C_START ;调用应用程序入口,把执行权交给应用程序C语言的main函数。
END
- |
- +1 赞 0
- 收藏
- 评论 0
本文由超哥提供,版权归世强硬创平台所有,非经授权,任何媒体、网站或个人不得转载,授权转载时须注明“来源:世强硬创平台”。
相关推荐
【经验】如何下载、安装、设置Silicon Labs 8位单片机集成开发环境IDE?
Silicon Labs的8位单片机集成开发环境IDE,简单、容易、强大,是C8051F及EFM8等8位单片机软件开发的强大利器!为了让新手能够快速上手IDE,本将详细接收Silicon Labs IDE的下载、安装、设置等方法。
【经验】解析芯科科技8bit MCU EFM8BB5如何使用KEIL开发环境调试烧录
大多使用C8051平台开发的用户都在使用KEIL或IAR开发工具,学习新的SSV5集成开发平台,会投入较多精力和使用习惯问题,不利于产品的快速研发和迭代。故为满足广大用户的需求,本文介绍芯科科技8bit MCU EFM8BB5如何使用KEIL开发环境调试烧录。
【经验】8位单片机EFM8的参考电压Vref引脚用于电压输出功能的经验
在某些应用中,需要一路低电流的电源,例如热敏电阻,为了减少LDO的使用,希望使用MCU的Vref输出电压。本文介绍Silicon Labs 8位MCU Vref输出电压使用有什么后果,需要注意什么。
SILICON LABS EFM8 Sleepy Bee 8-bit Microcontrollers选型表
SILICON LABS 8位MCU选型,基于25MHz Frequency,2~64kB Flash,0.25~4kB RAM等参数进行选型
产品型号
|
品类
|
MCU Core
|
Frequency(MHz)
|
Flash (kB)
|
RAM (kB)
|
Dig I/O Pins
|
ADC 1
|
Temp Sensor
|
Timers (16-bit)
|
PCA Channels
|
Comparators
|
UART
|
SPI
|
I2C
|
HS I2C Slave
|
I2S
|
EMIF
|
CAN
|
LIN
|
Vdd min(V)
|
Vdd max(V)
|
Package Type
|
Package Size (mm)
|
Internal Osc.
|
VREF
|
Debug Interface
|
Temperature Range (ºC)
|
EFM8SB10F8G-QFN20
|
Microcontroller
|
8051
|
25
|
8
|
0.5
|
16
|
12-bit, 9-ch.
|
Temp Sensor
|
4
|
3
|
1
|
1
|
1
|
1
|
0
|
0
|
0
|
0
|
0
|
1.8
|
3.6
|
QFN20
|
3x3
|
±2
|
VREF
|
C2
|
-40 to 85
|
选型表 - SILICON LABS 立即选型
SILICON LABS 8-bit Microcontroller选型表
SILICON LABS 8位MCU选型,MCU Core 8051,频率20MHz~100MHz,Flash存储2kB~120kB,RAM存储0.25kB~8kB。
产品型号
|
品类
|
系列
|
Frequency(MHz)
|
Flash (kB)
|
RAM (kB)
|
Vdd min(V)
|
Vdd max(V)
|
Package Type
|
Package Size (mm)
|
Internal Osc.
|
Dig I/O Pins
|
ADC 1
|
Temp Sensor
|
Timers (16-bit)
|
PCA Channels
|
DAC
|
Comparators
|
UART
|
SPI
|
I2C
|
HS I2C Slave
|
EMIF
|
CAN
|
LIN
|
VREF
|
Debug Interface
|
C8051F392-A-GM
|
8位MCU
|
C8051F39x Small Form Factor
|
50
|
16
|
1
|
1.8
|
3.6
|
QFN20
|
4x4
|
±2
|
17
|
10-bit, 16-ch., 500 ksps
|
Temp Sensor
|
6
|
3
|
10-bit, 2-ch.
|
1
|
1
|
1
|
2
|
0
|
0
|
0
|
0
|
VREF
|
C2
|
选型表 - SILICON LABS 立即选型
SILICON LABS EFM8 Universal Bee 8-bit Microcontrollers选型表
SILICON LABS 8位MCU选型,基于48MHz Frequency,8~64kB Flash,2~4kB RAM等参数进行选型
产品型号
|
品类
|
MCU Core
|
Frequency(MHz)
|
Flash (kB)
|
RAM (kB)
|
Dig I/O Pins
|
5 Volt Tolerant
|
ADC 1
|
USB
|
Temp Sensor
|
Timers (16-bit)
|
PCA Channels
|
Comparators
|
UART
|
SPI
|
I2C
|
EMIF
|
CAN
|
LIN
|
Vdd min(V)
|
Vdd max(V)
|
Package Type
|
Package Size (mm)
|
Internal Osc.
|
VREF
|
Debug Interface
|
Temperature Range (ºC)
|
EFM8UB20F64G-QFP48
|
Microcontroller
|
8051
|
48
|
64
|
4
|
40
|
5 Volt Tolerant
|
10-bit, 32-ch.
|
USB
|
Temp Sensor
|
6
|
5
|
2
|
2
|
1
|
2
|
1
|
0
|
0
|
2.7
|
5.25
|
QFP48
|
7x7
|
±1.5
|
VREF
|
C2
|
-40 to 85
|
选型表 - SILICON LABS 立即选型
【经验】8位单片机EFM8BB21 串口UART1的配置与调试
UART是单片机中经常要使用到的外设, Silicon Labs EFM8BB21系列8位单片机中有两个UART,分别UART0和UART1,本片文章主要介绍UART1的配置与调试。使用芯科官方推出的开发软件Simplicity Studio配置工具可以很方便的进行寄存器的初始化配置,省去了繁杂的计算。
【经验】芯科科技8bit MCU EFM8BB5使用J-Link Commander命令行工厂烧写指南
本文介绍如何使用J-Link Commander命令行烧写Silicon Labs(芯科科技)最新推出的EFM8BB5系列高性价比8bit MCU,方便支持工厂烧写工装的自定义界面设计。
【经验】芯科8位单片机EFM8BB51与EFM8BB21的对比分析
由于EFM8BB51的寄存器相对于EFM8BB21做了较多的调整,使用EFM8BB51来替换EFM8BB21,程序将做修改才能在新的MCU上运行,为了方便修改程序,本文针对寄存器进行对比,方便客户有针对性的调整程序。
【经验】8位单片机EFM8系列的SFR Page操作
Silicon Labs的8位单片机EFM8系列,集成丰富的外设,高性能,小封装。软件开发时,由于外设多,寄存器操作引入了SFR Page机制,注意SFR Page设置,防止程序错误,让EFM8系列芯片设计出稳定的优质产品。
【经验】Silicon Labs C8051F系列8bit MCU C2接口编程注意事项
Silicon Labs 8bit MCU C8051F系列采用C2接口进行程序的烧写和软件的调试。本文讲述在使用C2接口进行程序的烧写和软件的调试过程中的注意事项。
【经验】解决8位单片机EFM8BB51驱动三相电机过零检测不灵敏的问题
对于简单的8位MCU实现,块换向用于驱动电动机。这种驱动方法需要逆变器电路对根据霍尔传感器给出的转子位置,电机相位电角度每120度的电流或者无传感器方法。本文主要解决8位单片机EFM8BB51F16I-QFN20驱动三相电机过零检测不灵敏的问题。
【经验】如何计算8位单片机EFM8LB系列PWM最高输出频率?
在电机驱动、电源发生、可调电压发生等应用中,经常需要PWM波,Silicon Labs推出的高性能、高集成度、小体积、高性价比的EFM8LB系列8位单片机,可广泛应用光模块、电机控制等领域,它支持输出PWM波。本文将详细讲解如何计算EFM8LB系列8位单片机PWM最高输出频率。
【经验】8位单片机C2自制烧录器不能用于EFM8问题分析及解决
Silicon Labs公司推出的8位单片机,采用独特的C2调试接口,在占用极少的引脚资源的情况下,实现在线仿真调试,烧录功能,方便软件的开发设计。客户自制C2烧录器,可以更好的用于批量生产。以前用于C8051F系列的自制烧录器如果在EFM8烧写时出现问题,可以根据文章内容进行简单修改,解决烧写问题。
【应用】芯科科技8bit MCU EFM8BB5系列助力水下无人机电调设计,超宽电压输入范围1.8~5.5V
随着无刷电机的大力发展,无刷电调占据了市场的主流。单向有刷电调不能改变信号控制电机反转,双向无刷电调则可以控制电机反转。产品的性能优势和成本是水下无人机企业抢占市场的关键;本文重点介绍芯科科技8bit MCU EFM8BB5系列MCU助力水下无人机电调设计。
电子商城
现货市场
服务
拥有IC烧录机20余款,100余台设备,可以烧录各种封装的IC;可烧录MCU、FLASH、EMMC、NAND FLASH、EPROM等各类型芯片,支持WIFI/BT模组PCBA烧录、测试。
最小起订量: 1 提交需求>
支持微型计算机 、便携式计算机显示设备、投影仪、打印设备、绘图仪、多用途打印复印机、扫描仪、计算机内置电源、电源适配器、充电器、服务器、收款机等产品中国强制性产品认证。
提交需求>
登录 | 立即注册
提交评论