SAM8系列S3C825A型单片机及其软件设计
S3C825A为例介绍三星公司SAM8系列单片机的内部结构及其软件开发环境,详细描述采用混合编辑法来对SAM8系列单片机进行软件设计的一般方案,最后给出用混合编程法对S3C825A进行软件设计的具体应用实例。关键词:SAM8系列单片机;OPENicei500;IARC编译器;混合编程引言
三星SAM8系列单片机是8位CMOS型微控制器,该系列单片机具有功耗超低、多样型号、资源丰富、CPU时钟可调及软件对硬件控制灵活等优点,其中,S3C825A型是目前应用较为广泛的单片机。S3C825A与三星SAM8系列其他单片机一样,其常用的开发环境是IAR公司的IAREmbeddedWorkbench集成开发资源,该环境支持混合编程,可以编辑、汇编和编译汇编语言和C语言的源文件,并且汇编程序与C程序可以共同相同格式的头文件,使得开发过程灵活方便,是一种高效的软件设计方法,具有广泛的应用前景。
S3C825A型单片机的内部结构S3C825A的内部结构框图。该单片机具有以下特点:●使用SAM88RC作为中央处理单元;●具有48KB片内ROM和2096byte的寄存器空间;●带有多达67个可编程I/O接口;●具有2个8位的定时/计数器和2个16位定时/计数器;●带有LCD驱动控制器;●带有一个4输入的10bitA/D转换器;●带有主从两个晶振接口。1.1存储空间分配S3C825A型微控制器有2类存储空间,48KB内部掩膜可编程存储空间(ROM)和2096byte的内部寄存器空间。其中可编程存储空间主要用来存储程序代码和列表数据,它的起始256Byte用来存储中断矢量列表,未使用的空间也可用作代码存储空间,但中断矢量必须放在这段空间中。对S3C825A而言,当程序执行RESET后,ROM的起始地址是0100H。
S3C825A共有2137个8位可编址寄存器,其中13byte用作CPU和系统控制寄存器,60byte用作接口控制和数据寄存器,16byte用作共享的工作寄存器,其余的2048byte用作通用寄存器,它的内部寄存器空间实行页式管理,每一个页的上端64byte作为Set2空间,下端192byte作为主数据寄存器空间。另外扩展出的96byte可作为Set1的Bank0和Bank1空间,该空间可作为系统控制寄存器空间和工作寄存器空间。1.2A/D转换器S3C825A内部集成了有一个4路输入10bit模/数转换器。该A/D转换器可将每一路的模拟电平用连续的近似逻辑值表示,从而得到与之相等的10bit数字电平,其转换过程需要50个时钟周期。模拟信号输入端口是I/OPort3的P3.0"P3.2复用的,Port3的控制寄存器可确定Port3是否用于A/D转换器的模拟信号输入,A/D转换器的控制寄存器控制P3.0"P3.2中哪一路作为A/D输入端口。输入信号模拟电平值要求在AVREF和AVSS之间。转换后的值放在ADDATAH/ADDATAL寄存器中,每次转换前必须将这2个寄存器清空。
在线仿真器
OPENici500AIJIsysterm公司为三星SAM8系列单片机提供了一套有效的在线仿真器——OPENicei500,该仿真器可以运行在windows95/98/2000/NT等操作系统下,具有可选的CPU时钟资源和高达64kbyte的仿真代码存储器,同时内嵌功能强大的代码编辑器,可支持基于RS232的高速代码下载(最高下载速度可达115200b/s),同时支持C语言编译/调试,因此,应用此仿真器可以大大提高程序调试开发的效率。2.2SAM8的开发环境SAM8系列单片机常用的开发软件是IAR公司提供的基于IAREmbeddedWordbench的集成开发环境,该开发系统集IARC编译器、汇编器、连接器、代码编辑器、工程管理器及C-SPY调试器于一体,可以编辑、汇编和编译汇编语言和C语言的源文件,而且汇编程序和C程序可共用相同格式的头文件,是一个功能强大的开发环境。
该开始环境集成有基于通用指令集的重定位宏汇编器,且内嵌C语言预处理程序,可接受所有的C语言宏定义。而集成的IARXLINK连接器支持灵活的代码段和数据段重定位,并可根据重定位模块提供的信息将若干个应用程序所需要的可重定位代码模块文件组装成一个程序,从而产生可执行的目标代码。此外,环境中的C-SPY调试器具有多种测试分析功能,支持单步调试,控制程序运行到指定位置,调试返回、实时跟踪变量、寄存器、存储器等,这些都在很大程序上提高了开发效率。3混合编程的软件设计在对
SAM8系列单片机进行软件开发过程中,用C语言编程具有开发周期短、可读性强、可移植性好和修改方便等优点,但是C程序反汇编生成的汇编代码往往较长。若直接用汇编语言编程,虽然编制的程序较短,但开发周期长,修改也不方便,所以,较好的解决方法是把程序的框架或主体部分用C语言编写,而将执行效率要求较高的部分用汇编语言来编写。下面主要介绍针对SAM8系列单片机进行混合编程的软件设计方法。
第二组为普通寄存器,这组寄存器主要用作寄存器变量和保存中间变量,应用过程不必须对其进行保护,但在C语言函数编写中可以不体现,而由编译器自动完成。当函数参数为以下2种类型时,应当选用堆栈方式传递:第一种是传递参数为struct或union大于4字节的参数类型。第二种是长度可变函数的未命名参数类型。函数参数通常放在由堆栈指针指定的位置为起始的主存储器中,被调用函数的参数则由左至右依次存放在被指定的堆栈中,当被调用函数返回调用函数时,堆栈自动清零,主存储器空间被释放,以供下次供传递函数使用。函数返回值可根据其类型放在R15或R15:R14寄存器对中。若返回值是struct或union类型,则返回R15中的值是存放返回结果的堆栈指针起始位置。C语言编译器也是编译中断函数时会自动保护所用到的寄存器,状态寄存器FLAGS的保护也是在中断处理过程中自动完成的。中断过程中用到的寄存器都使用PUSHRn的指令进行保护,而采用POPRn指令恢复。当用IRET指令自动恢复状态寄存器FLAGS时,可以从中断中返回。