完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
为了学习android系统,发现需要学习linux驱动,发现学习linux驱动,需要先知道处理器的各种架构,为了学习此种知识,发现网上有很多mini2440相关的知识,因此,将其作为蓝本,认真学习。直到linux驱动的学习完成。
这是linux驱动学习的第一部分,arm的汇编程序。 本文档的大部分资料翻译于《S3C2440A 32-BIT CMOS MICROCONTROLLER USER’S MANUAL》 一.编程模型 处理器工作状态 从程序员的角度来看,ARM920T(s3c2440的内核)有如下两种状态:
注意:这两种状态的切换,不会影响处理器的模式和寄存器状态1.1 切换状态 进入THUMB状态 将操作数寄存器的第0位,设为1,然后执行BX指令,就可以切换为THUMB状态。 例如: BX Rm;如果Rm的第0位,是1,则跳转到Rm所在的地址,并且设置处理器在thumb模式下 如果在THUMB状态下,进入了异常,从异常中退出,依然是THUMB状态 进入ARM状态 可以通过下面的方法,进入arm状态:
ARM920T 将内存视为一个线性的字节序列。字节地址从0开始。0到3字节保存第一个字。4到7字节保存第二个字,依次类推。这些字支持小端和大端格式。 1.3 指令长度 指令长度为32位长(arm模式)和16位长(thumb模式) 1.4 数据类型 ARM920T 支持字节(8位)、半字(16位)、字(32位)数据类型。字必须4字节对齐。半字必须两字节对齐。 1.5 运行模式 ARM920T 支持7种运行模式:
特殊模式(非用户模式)仅仅在服务中断或者异常,或者访问受保护的资源时才会进入。 1.6 寄存器 ARM920T 总共有37个寄存器。其中,31个通用的32位寄存器和6个状态寄存器。这37个寄存器,对于程序来说,不能同时可见。 处理器状态和运行模式,决定了那些寄存器对于程序员来说可见。 1.7 arm状态下的寄存器集 在arm状态下,程序员只能看到16个通用寄存器和1个或者2个状态寄存器。在特殊模式(非用户模式),相应的寄存器组被切换。图2-3展示了在每种模式下那些寄存器可见。这些寄存器组使用一个阴影三角形标记: arm状态下的寄存器组包含16个可直接访问的寄存器:R0-R15.除了R15寄存器以外,其他的寄存器都是通用寄存器。可以用来存储数据或者地址。 除此之外,还有第十七个寄存器用来存储状态信息。 [tr]寄存器描述[/tr]
而USer,IRQ,SuperVisor,Abort和Undefined模式,都有R13和R14,并且允许他们有自己的堆栈指针和链接寄存器 ARM和THUMB之间的寄存器关系 如下:
在thumb模式下访问高寄存器组(Hi-registers) 在THUMB模式下,寄存器组R8-R15(被称为Hi-registers)不是标准寄存器组中的一部分。因此,汇编程序对他的访问是受限制的。但是他们可以用来作为临时的存放地。 可以使用mov指令,将R0-R7里面的值放置到高寄存器中。也可以将高寄存器中的值放到低寄存器中(R0-R7) 也可以使用CMP指令,将高寄存器和低寄存器进行比较 也可以使用ADD指令,将高寄存器中的值加到低寄存器中 1.8 程序状态寄存器 ARM920T 包含一个当前程序状态寄存器(CPSR),以及5个已经保存了的程序状态寄存器(SPSR)。这些寄存器的功能有:
N,Z,C,V是条件码的标志位。这些将会被算术和逻辑运算改变,然后再根据这些位来决定指令是否执行。 在arm状态下,所有的指令可以被条件的执行。 在thumb状态下,只有分支指令才可以按照条件执行 控制位 最低下的8位被称为控制位。当一个异常发生时,他们会被改变。如果处理器在特权模式下,那么他们也可以被软件手动改变。 [tr]位描述[/tr]
例如响应外设电路的中断,此时反生异常。在异常处理前,当前处理器的状态必须保存下来,目的是,当异常处理完成之后,可以继续执行 在同一时间,可能同时出现多个异常,此时他们以固定的顺序进行处理,详见下面的异常优先级。 进入异常时的操作 当处理异常时,ARM920T会做如下的操作:
如果处理器在THUMB状态下,此时发生了异常,当PC指向异常向量的地址时,自动切为ARM状态 离开异常时的操作 异常处理程序完成后:
下表列出了异常发生时,保存在链接寄存器中的PC的值,以及退出异常处理程序的推荐的指令 [tr]返回的指令arm R14_xthumb R14_x[/tr]
FIQ(快速中断异常)被设计来处理数据传输和信道处理。在arm模式下,保证有最小,且足够的寄存器可用,以达到最优的上下文切换 外部的nFIQ输入为低时,产生FIQ异常。根据ISYNC输入信号的状态,nFIQ的输入可以被处理为同步或异步。当ISYNC为低时,nFIQ和nIRQ被当做异步。同步的周期延迟发生在中断影响处理器流之前。 无论异常是从ARM状态还是thumb状态进入的,FIQ异常可以通过下面的指令退出异常处理流程: SUBS PC,R14_fiq,#4 FIQ可以通过CPSR的F位来禁止(用户模式下无法操作)。如果F位为0,ARM920T在每条指令结束时检查FIQ同步器输出的低电平。 IRQ IRQ就是常见的中断,它由nIRQ输入触发。IRQ的优先级比FIQ的优先级低并且当FIQ进入时,IRQ将被禁止。通过设置CPSR寄存器的I位,可以在任何时候在特殊模式下(非用户模式)禁止这个异常 可以执行下面的代码,返回异常: SUBS PC,R14_irq,#4 Abort 当前内存访问无法完成时,产生一个Abort异常。它也可以由外部的ABORT输入产生。ARM920T在内存访问周期中,检查abort异常 两种abort异常:
如果指令没有被执行,abort也不会产生,比如分支指令 如果数据abort发生,接下来会发生什么,则依赖于指令的类型:
应用程序不需要知道他可用的内存量,他的状态也不会受abort异常的任何影响 退出abort异常的指令为: SUBS PC,R14_abt,#4;for a prefetch abort SUBS PC,R14_abt,#8;for a data abort 然后恢复PC和CPSR,并且再次执行产生abort异常的指令 软件中断 软件中断(SWI)被用来进入Supervisor模式。软件中断通过下面的指令返回: MOV PC,R14_svc 他们恢复PC和CPSR,然后继续执行SWI后面的指令 未定义指令 当arm920T无法处理一个指令时,产生一个未定义指令异常。这种机制可以被用来扩展THUMB和ARM指令的软件仿真。 可以执行下面的指令,退出异常: MOVS PC,R14_und 恢复CPSR,然后执行产生未定义指令异常的下一条指令 异常向量表 下表展示了异常向量地址: [tr]地址异常进入的模式[/tr]
当同时产生异常时,系统以固定的顺序处理。 高优先级:
注意:并不是所有的异常都能同时发生如果数据abort异常和FIQ异常同时发生,并且FIQ异常被允许,ARM920T进入数据abort异常处理程序,然后立刻去处理FIQ的异常。FIQ异常退出之后,继续在abort异常处理程序中执行。 数据abort的优先级高于FIQ是有道理的,他能够保证第一时间捕获到传输错误。进入这个异常的时间,应该加上FIQ的延迟。 中断延迟 如果FIQ打开,则最长的延时包括:传递给同步器(Tsyncmax)的最长请求时间,加上,最长的指令时间(Tldm),加上,数据abort进入的时间(Texc),加上FIQ进入的时间(Tfiq)。然后才是ARM920T在0x1c处执行。 Tsyncmax三个处理器周期,Tldm20个处理器周期,Texc3个处理器周期,Tfiq2个处理器周期。总共需要28个处理器周期。在一个连续的20Mhz的处理器上大约消耗1.4微秒。 最大的IRQ延迟计算方式跟上面类似。但是必须考虑到FIQ有更高的优先级,可以延迟任意时间进入IRQ异常处理程序。 FIQ和IRQ的最小时间则由Tsyncmin加上Tfiq组成,为4个处理器周期。 复位异常 当nREST输入为低时,ARM920T放弃执行指令,然后继续从递增的字地址中取指令。 当nRest再次变高,ARM920T:
|
|||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1609 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1540 浏览 1 评论
970 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
681 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1587 浏览 2 评论
1861浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
644浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
515浏览 3评论
528浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
503浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-20 22:38 , Processed in 0.725281 second(s), Total 76, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号