@;Set up SVC stack to be 4K on top of zero-init data
LDR r1绕线电感器,=installStack
ADDsp,r1,#2048
@;Set up IRQ and FIQ stacks
MOV r0,#(Mode_IRQ32|I_Bit)
MSRcpsr,r0
MOV r0,r0
ADDsp,r1,#2048*2
MOV r0,#(Mode_FIQ32|I_Bit |F_Bit)
MSR cpsr,r0
MOV r0,r0
ADDsp,r1,#2048*3
一般堆栈的大小要根据需要而定,但是要尽可能给堆栈分配快速和高带宽的存储器。堆栈性能的提高对系统性能的影响是非常明显的。
1.6 初始化有特殊要求的端口、设备
有些关键的I/O部件必须在使能IRQ和FIQ之前进行初始化。因为如果在使能IRQ和FIQ之前没有进行初始化,可以产生假的异常中断信号。程序中初始化了HMS30C7202的串口1用来调试程序与其它设备通信。串口1是一个通用全双工异步接收/发送器(UART),它支持16C550的大部分功能。UART有接收缓冲/发送保持寄存器、波特率除数锁存器、中断允许寄存器等9个寄存器。对串口1的初始化主要绕行电感是对各寄存器的设置,其实现代码如下所示:
_outb(ser_base+0x30,1);
贴片电感器_outw(0x8002301c,0xffff9f9f) ;GPIO PORT A Enable
Register
_outw(0x800230A4,0x6060) ;GPIO PORT A MultiFunction elect-Register
serial_outb(SERIAL_LCR,0x80);
serial_outb(SERIAL_LCR,0x80);
serial_outb(SERIAL_DLL,baud_data[cur_baud]);
serial_outb(SERIAL_DLM,0x0);
serial_outb(SERIAL_LCR,0x03);
seial_outb(SERIAL_FCR,0x01);
serial_outb(SERIAL_IER,0x00);
serial_outb(SERIAL_MCR,0x03);
1.7 切换处理器模式,开中断
最后转换到应用程序运行所需的最终模式,一般是User模式。不要过早切换到User模式进行User模式的堆栈设备。因为进入User模式后就不能再操作CPRS回到别的模式了,可能会对接下去的程序执行造成影响。
这时才使能异常中断,通过清除CPR一体成型电感S寄存器中的中断禁止位实现。如果过早地开中断,在系统初始化之前就触发了有效中断,会导致系统的死机。
1.8 呼叫主应用程序
当所有的系统初始化工作完成后,就需要把程序流程转入主应用程序。
2 技术难点分析
环形电感2.1 多种语言的混合编程
ARM有两种汇编指令集:16位THUMB指令集和32位ARM指令集。使用16位的寄存器可以降低成本,而且16位THUMB指令集整体执行速度比ARM 32位指令集快,提高了代码密度。为了满足arm子程序和Thumb子程序互相调用,必须保证编写的代码遵循ATPCS。ATPCS规定了子程序调用的基本规则。
arm系统结构也支持C、C++以及汇编语言的混合编程。汇编语言和C/C++语言的混合编程,在一个追求效率的程序中比较常见。许多人认为像BSP这样底层的程序应该用纯汇编语言编写,其实不然。用汇编语言编写的程序可读性不高,而且不宜维护,不便于向其它类型的CPU移植,而这些方面却是C语言程序的优势。BSP能否用纯C语言去写呢?也不行。因为某些操作是用C实现不了电感器生产厂家的。例如操作特殊寄存器的指令、CP15寄存器的指令、中断使能及堆栈地址的设定等。在汇编和C/C++之间的函数调用时,也要遵循ATPCS的定义,还要注意的是用C语言编写嵌入式程序时,要避免使用不能被固化到ROM中的库函数。
混合编程情况下的程序编译及链接后的输出代码与没有混合编程时是不同的。所以当多个源文件如果使用了不同的设置进行编译,相互之间的调用可能产生兼容性问题,对此一定要加以仔细考虑。编译时,要告诉编译器和链接器足够的信息,一方面,让编译器能够使用正确的指令码进行编译;另一方面,在不同的状态之间发生函数调用时,链接器将插入一段链接代码(veneers)来实现状态转换。
2.2 MMU的实现过程
页表是实现MMU的重要手段。页表存放在内存中,从虚拟地址到物理地址的变换过程其实就是查询页表的过程。大小为1MB的存储块通常被称为段,图2说明了如何查表进行段式寻址的全过程:32位的虚拟地址可分为12位的一级页表序号和20位的段内地址偏移。12位的一级页表序号和CP15寄存器的C2中的18位变换表基址合并成一级描述符地址查表找出相应的一级描述符;然后,段对应的物理基地址与段内地址偏移量合并成为真正的存储器存取地址即物理地址,读出相应数据。
太阳能与LED结合设计--太阳能路灯照明系统在世界能源短缺,环境污染日益严重的今天,充分开发并利用太阳能是世界各国政府可持续发展的能源战略决策。太阳能路灯以其不用专人管理和控制,安装一次性投资无需日后电费开支,无需架设输电线路或挖沟铺设电缆,可
陀螺仪传感器为何能使鼠标变得如此自由?陀螺仪传感器为何能使鼠标变得如此自由?最近对一款基于陀螺仪的鼠标进行了拆解,这款名为ProGoGyrotransport的鼠标是由Gyration公司生产的,价值150美元(其中包括一个FreeSpa
高效率和超宽输入电压范围DC-DC变换器的方案设一个隔离DC/DC变换器的参数之一是该变换器能够正常工作的输入电压范围。对于那些应用于48V输入电信市场的工业标准砖型产品,其输入电压范围通常是36V~75V,或输入电压的最高值和最低值之比为2:1。