历史上的今天
返回首页

历史上的今天

今天是:2024年12月18日(星期三)

正在发生

2018年12月18日 | 基于S3C6410的ARM11学习(四) 核心初始化之设置处理器模式

2018-12-18 来源:eefocus

之前已经设置中断向量表了,下面就要进行设置处理器的模式。

对于ARM11,有8种模式,不同的模式,权限是不一样的。在bootloader开发的时候,我们需要将处理器的模式设置为Supervisor模式,即SVC模式。这样,权限就高了,可以访问ARM的所有资源。用户模式的权限是最低的,而且要从用户模式切换到其他模式的话,只能通过异常的方式。


clip_image001


用户模式(User): ARM处理器正常的程序执行状态


快速中断模式(FIQ): 高速数据传输或通道处理


外部中断模式(IRQ): 通用的中断处理


管理模式(Supervisor): 操作系统使用保护模式


数据访问终止模式(Abort): 当数据或指令预取终止时进入该模式


系统模式(System):运行具有特权的操作系统任务。


 这些模式是在CPSR寄存器中设置的。

       

如下是CPSR寄存器。在最低5位设置处理器的模式。

 

clip_image003


以下是5位值对应的模式。

 

  clip_image005

图中表的后面有跟着寄存器,这是代表在这个模式下,可以访问的寄存器。

 

        我们知道ARM11是有16个寄存器,R0-R15。但是,在不同的模式下,这16个寄存器有的不一样的。即每个模式有自己的寄存器。


clip_image007

上图,是各个模式下,寄存器的表。

       

其中R0-R7、R15寄存器和CPSR寄存器,是所有模式都共有的。但是R8-R14就不一样了,有的模式有自己对应的R8-R14寄存器。比如FIQ模式,就有自己的R8-R14,和其他模式的R8-R14不共用。所以这才叫快中断,因为跳转到快中断后,不用备份原来的R8-R14寄存器,因为用的是自己的寄存器。还可以看到,其他模式都是自己的R13寄存器,也就是堆栈寄存器,所以在这些模式下,使用C语言的话,是要重新定义R13的值的。

  

       除了用户模式和系统模式外,其他模式都有SPSR寄存器。这个寄存器就是用来备份跳转模式切换之前那个模式的CPSR的值。这样之前模式的CPSR的值才不会丢失。这样,在切回原模式时,再将SPSR的值给CPSR,就把原模式的CPSR的值也恢复了。因为CPSR的值是很重要的,所以要保证不能丢失。

           

clip_image009

 

        下面,就是代码的编写了。

   

        设置SVC模式,其实就是写CPSR寄存器的后5位。将值设置为5’b10011.

  

         代码也比较简单了:

set_svc:

# set cpu mode is SVC and disbale irq fiq

# cpsr[4:0] = 0b10011

    mrs r0, cpsr

  bic r0, r0, #0x1f

  orr r0, r0, #0xd3

  msr cpsr, r0

  mov pc, lr

先通过mrs指令将CPSR的值读到r0中。

使用bic指令对r0的后5位清零,0x1f = ‘b00011111。

使用orr指令对r0的后8位值设置为’b11010011。后面5位是10011,设置为SVC模式了。前面7位和6位也给设置1了。


clip_image011

从上图,看出7位和6位是普通控制中断和快中断的。

  

clip_image013


从手册中得到,当置1,表示disable对应的中断,这里就是关闭所有中断。

 

这样,就完成了处理器的模式SVC设置。

 

对比STM32,因为没有用汇编写过这些代码,所以没有了解STM32的CPU的模式。如果有对这方面了解的,麻烦告知一下。自己以前写STM32代码的时候,根本就没有考虑过这些。现在学ARM11了,对比才去了解了一些STM32的底层的东西。

 

另外,有谁知道CPSR在上电时候的初始化的值是多少的话,也麻烦告知下。我试了下,不设置处理器的SVC模式,并且不关中断,程序也是可以执行的,后面的点灯也是可以点亮,我猜测的话,默认为芯片上电的时候,处理器是工作在SVC模式下的,并且中断也都是关闭的。


如果是这样的话,那就意味着设置处理器的模式SVC,我们是可以省略这部分代码的,因为默认为就是这样。


但是,这也只是考虑了上电复位的情况,但是如果是复位有效呢?当我们按下复位键的时候,这里的代码还是需要的,因为这个时候,需要将处理器模式转化为SVC,因为有可能程序执行的时候是在User模式下的,这样的话就会有权限的限制,有些地址处理器就访问不了。并且要关闭中断,因为也有可能中断是开启的,不然会跳转到中断去。以上两种情况,复位的代码就不会正常的执行了。所以就需要这两步操作,保证复位的程序是可以正常按照我们写的顺序执行。


所以,我总结,这里的代码是需要的。为什么呢?因为uboot中也有这代码,要是不需要的话,那么uboot中肯定也不会有。Uboot可是行业的老大啊。


推荐阅读

史海拾趣

EUPEC [eupec GmbH]公司的发展小趣事

随着市场的不断变化和客户需求的升级,EUPEC意识到品牌重塑的重要性。公司开始着手进行品牌升级和形象重塑工作,通过加强品牌宣传、提升产品质量和服务水平等方式,不断提升EUPEC品牌的知名度和美誉度。这些努力使得EUPEC在市场上树立了良好的形象,成为电力半导体领域的知名品牌。

AF International公司的发展小趣事

在电子行业发展日新月异的背景下,AF International始终坚持技术创新,不断推出新产品、新技术。公司投入大量资金用于研发,引进先进的生产设备和测试仪器,确保产品质量的稳定提升。此外,AF International还积极与高校、科研机构合作,共同开展技术研发项目,推动电子行业的创新发展。正是这些技术创新成果,使得AF International在行业中始终保持领先地位。

Acutechnology公司的发展小趣事

随着技术的不断进步,Acutechnology公司不断对产品进行升级和优化。公司投入大量研发资源,推出了一系列高性能、高可靠性的电子产品,满足了市场的多样化需求。同时,公司积极拓展销售渠道,与国内外多家知名企业建立了长期合作关系,产品销量逐年攀升。

Heidenhain Corp公司的发展小趣事

随着智能制造的兴起,海德汉公司积极转型为智能制造解决方案提供商。该公司与多家电子企业合作,共同探索智能制造的新模式和新路径。通过集成海德汉的数控系统、自动化设备和智能管理软件,这些企业成功构建了高效、灵活、智能的生产体系。海德汉的智能制造解决方案不仅提高了生产效率和产品质量,还降低了生产成本和能耗,为电子行业的可持续发展做出了积极贡献。

Bellin Dynamic Systems公司的发展小趣事

随着国内市场的饱和,Bellin Dynamic Systems开始寻求国际化发展的道路。公司首先在欧洲设立了研发中心,以更好地了解当地市场需求和技术趋势。随后,公司又在美国和亚洲等地建立了生产基地和销售网络。通过这一系列的国际化战略举措,Bellin Dynamic Systems成功打开了国际市场,实现了业务的快速增长。

Advanced Photonix公司的发展小趣事

在电子行业的早期,Advanced Photonix以其卓越的光学技术脱颖而出。公司创始团队由一群富有远见的科学家和工程师组成,他们专注于研发高速光电子和高性能的光纤测试产品。经过无数次的实验和试错,团队终于成功开发出一种具有创新性的光纤传感技术,这一技术为电信行业提供了前所未有的分布式光纤传感解决方案。这一技术突破不仅为Advanced Photonix赢得了市场声誉,也奠定了公司在电子行业的重要地位。

问答坊 | AI 解惑

SHLoadDIBitmap这个函数并不是所有bmp结尾的图片都能显示?

我发现在我的wince5.0系统里,只有一个像素32位的图片才能显示,其他的都不行?…

查看全部问答>

FT232的虚拟COM问题

板子上面使用了FT232芯片做USB转UART,板子通过USB连接到电脑时,电脑在设备管理器中显示的是COM口 请问如果要在写一个程序和板子通讯的话,那么是不是作为COM口通讯就可以了…

查看全部问答>

如何通过单片机控制AD9851中D0~D7引脚调节频率大小

麻烦高手讲解详细点!!谢谢了,急用…

查看全部问答>

请问如何在AT91SAM9260上开发过ISI驱动马?

本人需要在AT91SAM9260上开发ISI驱动,已经在网上下载到AVR32的源码,不知道如何进一步开发,请指教…

查看全部问答>

wince 读写 u盘死机

wince 下.net 的程序,读写U盘。大部分时间正常。 偶尔会发生写文件的时候,程序死在那里的情况。 现象是,writefile 的时候,函数一直不返回。有时候插拔下 U 盘就自动返回了。而且,里面的内容写成功的。 观察发现,在读写U 判断的时候,.net ...…

查看全部问答>

WindowsMobile6SDK如何开发MIPS,Xscale和x86的应用?

我使用的是Visual Studio 2005 + Windows Mobile 6 SDK。打开工程后,在“活动解决方案平台”中只有“Windows Mobile 6 Professional SDK (ARMV4I)”,“Pocket PC 2003 (ARM4)”和“Smartphone 2003 (ARM4)”。这样的话只能编译ARM的应用程序了, ...…

查看全部问答>

ad转换在开发板与自己焊的板子上的区别

做了个ad转换的最小系统,在开发板上运行时正常,速度挺快的,但是放到自己焊的板子上就变得很慢,ad转换大概会慢10s左右,有人知道是为什么吗?(接线没问题,按照开发板接的,一样的程序)。…

查看全部问答>

有谁买过特权同学设计的SF-NIOS2开发板?我最近使用发现存在缺陷

最近使用了配置芯片,但是.sof和。elf文件下载到芯片中,下电后然后上电,板子不运行。。在CPU中已近把复位向量还成了epcs控制器,异常向量改成了SDRAM````````````````````````现在这个板子都已近下架了,找不到售后了,我擦,悲剧。。。花了我480 ...…

查看全部问答>

【一起学器件指标】——第一弹【ADC】资料汇总

【活动贴】一起学器件指标第一弹https://bbs.eeworld.com.cn/thread-319290-1-1.html 【活动贴】ADC性能指标之INL和DNL讨论https://bbs.eeworld.com.cn/thread-319915-1-1.html 【一起学器件指标】ADC基础知识https://bbs.eeworld.com.cn/thread- ...…

查看全部问答>

launchpad串口接12864液晶显示问题

最近在弄launch pad 串行接12864液晶屏, 但就是出不来,跪求大神们前来指导。//P2.6为SID 接R/W, P2.7为SCLK, 接E, cs端接vcc, psb接gnd.#include <msp430g2433.h>unsigned char array1[]={\"hello world\"};void delay(unsigned char n){ u ...…

查看全部问答>