温淑鸿、柴建平
(中国传媒大学信息工程学院电子信息工程系)
摘要:中国传媒大学单片机原理课程主要讲述MCS51单片机的结构、汇编语言指令、程序流程、I/O扩展等内容,嵌入式计算机系统主要讲述如何在嵌入式系统上移植Linux操作系统、开发应用程序,而操作系统的移植离不开汇编语言指令。本文比较了两门课的共同点和差异后,指出单片机原理以ARM处理器为例来讲述单片机的结构、汇编指令;嵌入式计算机系统以单片机原理的内容为基础,继续深入下去,主要介绍操作系统的移植,及在操作系统下应用程序的开发,不再介绍单片机的硬件结构和汇编语言指令。这样安排,两门课不重复讲述单片机汇编语言结构、汇编语言指令部分,嵌入式计算机系统将是对单片机原理的提升,会使学生对单片机的学习理解更上一个台阶。
关键词:MCS51、ARM、汇编语言、Linux操作系统
一、单片机的发展
单片微型计算机因其具有集成度高、运算速度快、体积小、运行可靠、价格低等特点而在过程控制、数据采集、机电一体化产品、家用电器、智能化仪表和网络技术中得到大量使用。国内高校在计算机工程、软件工程、工业自动控制、机械电子工程、精密仪器、电工电力电子、电子工程等专业开设了单片机原理或者相关课程。中国传媒大学单片机原理课程主要讲述MCS51单片机的结构、汇编语言指令、程序流程、I/O扩展等内容。
随着单片机硬件的发展,从8位/16位单片机发展到以ARM处理器CPU核为代表的32位嵌入式处理器。除ARM微处理器核以外,几乎所有的ARM芯片均根据各自不同的应用领域,扩展了相关功能模块,并集成在芯片之中,我们称之为片内外围电路,如USB接口、IIS接口、LCD控制器、键盘接口、RTC、ADC和DAC、DSP协处理器等。设计者应分析系统的需求,尽可能采用片内外围电路完成所需的功能,这样既可简化系统的设计,同时可提高系统的可靠性。
单片机的处理能力越来越强,单片机的应用软件技术也发生了巨大的变化,从最初使用汇编语言进行应用程序开发演变到用C语言开发,不但增加了程序的可读性、结构性,而且有利于跨平台的移植。另外一些复杂的系统开始在单片机上采用操作系统,这样可以提高开发人员的开发速度,节约开发成本。嵌入式操作系统替代传统的由手工编制的监控程序或调度程序,成为重要的基础组件。更重要的是,嵌入式操作系统对应用程序可以起到屏蔽的作用,使应用程序员面向操作系统级开发应用软件,并易于在不同的ARM核的嵌入式处理器上移植。嵌入式技术是当今最流行的一门新技术,具有广阔的发展空间。目前国内很多高校都在开展和计划开展嵌入式计算机系统课程,主要讲述在ARM处理器中如何移植操作系统。
二、ARM与MCS51寄存器工作模式对比
MCS51有A、B、R0-R7、SP、PC、DPTR共13个寄存器,除PC、DPTR是16位以外,其余寄存器都是8位。ARM处理器共有37个寄存器,其中31个通用寄存器、6个状态寄存器。这些寄存器安排为部分重叠的组,其中通用寄存器可以分为3类:不分组的R0-R7、分组的R8-R14、程序计数器R15。ARM处理器支持7种处理器模式:用户模式、FIQ模式、IRQ模式、管理模式、中止模式、未定义模式、系统模式,在软件控制下可以改变模式,外部中断和异常也可以改变模式。大多数应用程序在用户模式下执行。在用户模式下,程序不能访问某些被保护的系统资源,也不能改变模式,除非中断和异常发生。除用户模式外,其他模式称为特权模式,在特权模式下,可以自由地访问系统资源和改变模式。这种区分便于操作系统和应用程序的执行。每种处理器模式使用不同的寄存器组,在任何一种模式下,仅有16个通用寄存器(R0-R15)、1或2个状态寄存器是可见的。MCS51没有这种模式的区分。
三、ARM与MCS51汇编指令对比
在MCS51中,除了自加1指令外,其他算术逻辑运算只能在累加器中运行,运算中的两个操作数其中一个来自A,运算结果也只能存储到A。在ARM处理器中,没有累加器的概念,运算中的两个源操作数可以来自任何一个通用寄存器,运算结果也可以存储到任何一个通用寄存器中(部分指令如乘法指令限制了程序计数器R15的使用)。另外,ARM指令的第二个操作数还可以同时进行移位操作。
四、ARM与MCS51堆栈对比
堆栈可分为两种:向上增长和向下增长。数据进栈时,堆栈指针向高地址方向生长,为递增堆栈;数据进栈时,堆栈指针向低地址方向生长,为递减堆栈。堆栈指针指向最后压入堆栈的有效数据,称满堆栈;堆栈指针指向下一个数据项存入的空位置,称堆栈。这样就有4种组合:满递增、空递增、满递减、空递减。ARM支持这4种组合,R13通常用作堆栈指针,称为SP,每种异常模式都有自己的分组R13。MCS51中,SP用于堆栈指针,是满递增型。以ARM为例,可以讲述所有4种形式。
五、ARM与MCS51条件指令对比
在ARM处理器中,程序状态寄存器的N、Z、C、V(Negative,Zero,Carry,Overflow)位称为条件标志位。条件标志位可以通过以下两类指令修改:第一类是比较指令,第二类是算术运算、逻辑运算和数据传送指令,这类指令可以通过在指令中是否加入S来允许是否根据运算结果更新条件码标志。在MCS51中,没有专门的比较指令,算术逻辑运算或者数据传送类指令无条件地更新标志位,不能像ARM指令可以由用户自己选择该指令是否设置标志位。
在ARM处理器中,几乎所有的ARM指令都有一个可选的条件码,只有程序状态寄存器CPSR中的条件码标志满足指定的条件时,带条件码的指令才能运行。在MCS51中,只有几条指令是根据状态寄存器的条件码进行分支,比如算术逻辑运算、数据传送指令都是无条件执行的,而在ARM中可以选择是否执行该指令。
六、ARM与MCS51片选线及IO对比
在ARM芯片上,都有几根存储器片选线,而我们讲述的MCS51都没有片选线。这样在扩展时,我们会优先考虑使用芯片的片选线;只有片选线不够时,再考虑采用地址线进行译码。
ARM芯片的I/O管脚通常都有多种用途或者仅仅用作通用IO,这需要通过编程来选择是作为其他功能还是作为通用IO,作为通用IO,还要选择输入输出方向。我们讲述的MCS51单片机,管脚功能是固定的,不需要编程,在需要用作输入时,先输出高电平,以便高低电平能够正确读入。
七、ARM与MCS51定时计数器对比
对于定时计数器,MCS51单片机可以用于计数内部时钟或者外部脉冲。而ARM处理器通常可以产生波形,除了使用CPU进行初始化以外,波形的周期性重复是不需要CPU的干预的。在MCS51单片机内部,波形的产生必须借助CPU的干预,使用通用IO管脚来输出。
八、ARM与MCS51其他IO接口对比
我们讲述的MCS51仅仅提供了通用异步串口,而大部分ARM芯片都提供了异步串口、同步串口、SPI接口、I2C接口、USB接口。这些接口的应用相当普及,介绍单片机扩展,就有必要介绍这些接口,但我校的教学大纲目前没有介绍这类接口。目前ARM芯片的通用串口通常都支持红外数据通信功能,而红外数据和蓝牙接口是很基本的近距离无线数据通信手段,但我们的单片机原理课程没有提及。
九、单片机其他常用接口
1.CAN总线。单片机提供CAN总线模块,适合工业控制。
2.LCD控制模块。单片机集成LCD模块,为信息显示提供了强大功能。
3.强电控制模块。有些厂家把弱电和强电控制接口集成到单片机内部,这更加方便用户利用单片机做工业控制。
4.集成USB通信模块。集成USB通信模块大大方便了系统和PC通信。
十、结论
按照现行的教学大纲,单片机原理主要讲述MCS51单片机硬件的结构、汇编指令、IO等知识,而嵌入式计算机系统主要讲述如何在ARM处理器上移植操作系统,需要先讲述ARM的结构、汇编语言指令、Flash存储器等相关知识,然后再讲述操作系统移植的相关知识。嵌入式计算机系统的知识点较多,难度大,几乎包含单片机原理的所有基本概念,只不过是以ARM处理器为基础,但课程讲授时间却比单片机原理少。因此如果单片机原理以ARM处理器为基础,嵌入式计算机系统直接讲述Linux操作系统的移植部分,将会使学生有更多的时间钻研学习Linux操作系统的移植和嵌入式图形用户界面的编程。