MOV PC, LR解析

MOV   PC, LR
如果在子程序中LR没有改变,则等同于 RET

程序在 调用子程序时,会把 BL      SUB_XXXXX 处的
下一条指令送入  LR,  这样,当所调用的子程序没有改变LR的值时(注意这里我说说的是在整个子程序中LR没有被改变),返回父程序时,你就可以使用
MOV   PC, LR

;==============这一段代码完成从NAND Flash读代码到RAM=====================
nand_boot_beg   ;
 mov r5, #NFCONF ;首先设定NAND的一些控制寄存器
;set timing value
 ldr r0, =(7<<12)|(7<<8)|(7<<4)
 str r0, [r5]
;enable control
 ldr r0, =(0<<13)|(0<<12)|(0<<10)|(0<<9)|(0<<8)|(1<<6)|(1<<5)|(1<<4)|(1<<1)|(1<<0)
 str r0, [r5, #4]
 bl ReadNandID  ;按着读取NAND的ID号,结果保存在r5里
。。。。。。。。。

跳转到下面的子程序了:

ReadNandID
 mov      r7,#NFCONF
 ldr      r0,[r7,#4] ;NFChipEn();
 bic      r0,r0,#2
 str      r0,[r7,#4]
 mov      r0,#0x90 ;WrNFCmd(RdIDCMD);9=1001b
 strb     r0,[r7,#8];NFCMMD Register
 mov      r4,#0   ;WrNFAddr(0);
 strb     r4,[r7,#0xc]
1       ;while(NFIsBusy());
 ldr      r0,[r7,#0x20]	
 tst      r0,#1			;0: NAND Flash memory busy 
 beq      %B1
 ldrb     r0,[r7,#0x10] ;id = RdNFDat()<<8;	ldrb Rd,[Rn,#immed_5X4] 加载字节数据,放入Rd中,即Rd最低字节有效,高24位清零
 mov      r0,r0,lsl #8
 ldrb     r1,[r7,#0x10] ;id |= RdNFDat();
 orr      r5,r1,r0
 ldr      r0,[r7,#4] ;NFChipDs();
 orr      r0,r0,#2
 str      r0,[r7,#4]
 mov   pc,lr


mov pc,lr 返回主程序

fulinux CSDN认证博客专家 linux uboot yocto
我是一个热爱Linux、热爱Yocto、喜欢编程、热爱技术的码农!
希望我的博客能帮助到哪些在茫茫黑夜中摸索的小白
欢迎关注、点赞和订阅!
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 博客之星2020 设计师:CY__0809 返回首页
实付 29.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值