BLHeli_S 代码分析—BLHeli.asm函数lock_byte_ok分析

发布时间:2024年01月17日

BLHeli_S 代码分析—BLHeli.asm函数lock_byte_ok分析


lock_byte_ok代码

该函数主要配置看门狗、堆栈空间、复位源、时钟频率

代码中数据变量定义

Bit_Access:					DS	1

AIKON_Boltlite_30A.inc文件中的宏定义

ONE_S_CAPABLE			EQU	0	; Set to 1 if ESC can operate at 1S

SIGNATURE_001			EQU	0f3h		; Device signature  MCU的型号

SiLab汇编指令

助记符指令说明字节时钟
MOV direct,#data立即数传送到累加器22
MOV A,direct直接寻址字节传送到累加器22
anl direct,#data直接地址单元与立即数相与33
orl direct,#data直接地址单元与立即数相或33
add A,#data立即数加到累加器22
jb bit,rel若直接寻址位为 1 则跳转33/4

源代码

lock_byte_ok:
	; 禁用 WDT.
IF SIGNATURE_001 == 0f3h		
	anl	PCA0MD, #NOT(40h)	; 清除窗口看门狗使能位
ENDIF
IF SIGNATURE_001 == 0f8h		
	mov	WDTCN, #0DEh		; 禁用窗口看门狗
	mov	WDTCN, #0ADh		
ENDIF
	; 初始化堆栈
	mov	SP, #0c0h			; 堆栈= 64字节的内存上限
	; 初始化VDD监视器
	orl	VDM0CN, #080h    	; 开启VDD监视器
	call	wait1ms			; 至少等100us
IF ONE_S_CAPABLE == 0		
	mov 	RSTSRC, #06h   	; 如果不具备1S功能,则将缺失的时钟和VDD监视器设置为复位源
ELSE
	mov 	RSTSRC, #04h   	; 不要将VDD监视器设置为1S esc的复位源,以避免由于它而复位
ENDIF
	; 设置时钟频率
IF SIGNATURE_001 == 0f3h		
	orl	OSCICN, #03h		; 将时钟分压器设置为1 (f850上不支持)
ENDIF
IF SIGNATURE_001 == 0f8h		
	mov	CLKSEL, #00h		; 将时钟分压器设置为1 (f3xx上不支持)
ENDIF
	mov	A, OSCICL				
	add	A, #02h				; 24.5MHz ~ 24MHz(每步~0.5-1%)
	jb	ACC.7, reset_cal_done	;是否设置进位(7位)?--分支

	mov	Bit_Access_Int, A
IF SIGNATURE_002 <> 010h		
	mov	A, OSCLCN
ELSE
	mov	A, OSCXCN
ENDIF
	jb	ACC.0, reset_cal_done	; 设置如果调用已经完成

	mov	OSCICL, Bit_Access_Int
IF SIGNATURE_002 <> 010h		
	orl	OSCLCN, #01h			; 标记调用结束了
ELSE
	orl	OSCXCN, #01h			; 标记调用结束了
ENDIF

代码理解

该部分代码主要是对看门狗寄存器、堆栈分配、复位源、时钟分频的一些配置

附录


WDTCN、CLKSEL寄存器为C8051F8x系列芯片的寄存器,我们以C8051F3x系列MCU为主,暂不详细解释C8051F8x的MCU

寄存器

PCA0MD:PCA模式寄存器

在这里插入图片描述

VDM0CN:VDD监视器控制寄存器

在这里插入图片描述

RSTSRC:复位源寄存器

在这里插入图片描述

OSCICN:内部 H-F 振荡器控制寄存器

在这里插入图片描述

OSCICL:内部 H-F 振荡器校准寄存器

在这里插入图片描述

OSCLCN:内部 L-F 振荡器控制寄存器

在这里插入图片描述

OSCXCN:外部振荡器控制寄存器

在这里插入图片描述

下篇 reset_cal_done 函数分析

注意

由于本人汇编语言能力有限,阅读代码期间虽然询问了懂汇编的老工程师及查询资料,难免文中出现错误,还请诸位汇编大神指出,万分感谢

文章来源:https://blog.csdn.net/qq_39567970/article/details/135642943
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。