S3C825A型微控制器的结构及软件设计

发布者:忙中取乐最新更新时间:2014-10-31 来源: 21ic关键字:S3C825A  微控制器  结构 手机看文章 扫描二维码
随时随地手机看文章

  1 S3C825A型单片机的内部结构

  S3C825A的内部结构框图如图1所示。从图1可以该单片机具有以下特点:

  ●使用SAM88RC作为中央处理单元;

  ●具有48KB片内ROM和2096byte的寄存器空间;

  ●带有多达67个可编程I/O接口;

  ●具有2个8位的定时/计数器和2个16位定时/计数器;

  ●带有LCD驱动控制器;

  ●带有一个4输入的10bit A/D转换器;

  ●带有主从两个晶振接口。

  


  1.1 存储空间分配

  S3C825A型微控制器有2类存储空间,48KB内部掩膜可编程存储空间(ROM)和2096byte的内部寄存器空间。其中可编程存储空间主要用来存储程序代码和列表数据,它的起始256Byte(00H0FFH)用来存储中断矢量列表,未使用的空间也可用作代码存储空间,但中断矢量必须放在这段空间中。对S3C825A而言,当程序执行RESET后,ROM的起始地址是0100H。

  S3C825A共有2137个8位可编址寄存器,其中13byte用作CPU和系统控制寄存器,60byte用作接口控制和数据寄存器,16byte用作共享的工作寄存器,其余的2048byte用作通用寄存器(其中包括32byte的LCD显示寄存器),S3C825A的内部寄存器图2所示,它的内部寄存器空间实行页式管理,每一个页的上端64byte作为Set2空间,下端192byte作为主数据寄存器空间,共7页(第7页的00H-1FH为LCD显示数据寄存器空间)。另外扩展出的96byte可作为Set1的Bank0(64byte)和Bank1(32byte)空间,该空间可作为系统控制寄存器空间和工作寄存器空间。

  1.2 A/D转换器

  S3C825A内部集成了有一个4路输入10bit模/数转换器(A/D)。该A/D转换器可将每一路的模拟电平用连续的近似逻辑值表示,从而得到与之相等的10bit数字电平,其转换过程需要50个时钟周期。模拟信号输入端口是I/O Port3的P3.0"P3.2复用的,Port3的控制寄存器(P3CONH,P3CONL)可确定Port3是否用于A/D转换器的模拟信号输入,A/D转换器的控制寄存器(ADCON)控制P3.0"P3.2中哪一路作为A/D输入端口。输入信号模拟电平值要求在AVREF和AVSS之间。转换后的值放在ADDATAH/ADDATAL寄存器中,每次转换前必须将这2个寄存器清空。

  1.3 LCD控制器

  S3C825A内部集成了一个LCD控制器,可以直接驱动224点(28segX8com)的LCD面板。实际应用中只需要将要显示的数据存储在LCD显示寄存器(700H-71FH)中,然后通过配置LCD控制寄存器(LCON)和LCD模式控制寄存器(LMOD)来选择合适的帧刷新频率,LCD控制器就会自动地将要显示的内容从显示寄存器送到seg脚以进行显示输出,而不需要再进行其他的编程控制。

  2 S3C825A的软件开发环境

  2.1 在线仿真器OPENic i500

  AIJIsysterm公司为三星SAM8系列单片机提供了一套有效的在线仿真器——OPENice i500,该仿真器可以运行在windows 95/98/2000/NT等操作系统下,具有可选的CPU时钟资源(最高可达80MHz)和高达64kbyte的仿真代码存储器,同时内嵌功能强大的代码编辑器,可支持基于RS232的高速代码下载(最高下载速度可达115200b/s),同时支持C语言编译/调试(IAREW,CSPY),因此,应用此仿

  真器可以大大提高程序调试开发的效率。

  2.2 SAM8的开发环境

  SAM8系列单片机常用的开发软件是IAR公司提供的基于IAR Embedded Wordbench的集成开发环境,该开发系统集IAR C编译器、汇编器、连接器、代码编辑器、工程管理器及C-SPY调试器于一体,可以编辑、汇编和编译汇编语言和C语言的源文件,而且汇编程序和C程序可共用相同格式的头文件,是一个功能强大的开发环境。该集成开发平台(IDE)可在Windows 98/ME/NT4/2000/XP下进行工程管理、运行属性设置、代码编辑和调试等。其中内部IAR C语言编码器的功能强大,能支持ISO/ANSI标准C语言编译,且具有多样的代码大小和编译速度模式以及可选的堆栈模式。此外,还支持SAM8扩展关键字,同时支持C语言和汇编语言的混合程序编译。

  该开始环境集成有基于通用指令集的重定位宏汇编器,且内嵌C语言预处理程序,可接受所有的C语言宏定义。而集成的IAR XLINK连接器支持灵活的代码段和数据段重定位,并可根据重定位模块提供的信息将若干个应用程序所需要的可重定位代码模块文件组装成一个程序,从而产生可执行的目标代码。此外,环境中的C-SPY调试器具有多种测试分析功能,支持单步调试,控制程序运行到指定位置(Go to Cursor/Go to Label/Go to Address),调试返回(Go to Return)、实时跟踪变量、寄存器(Register Groups)、存储器(Memory)等,这些都在很大程序上提高了开发效率。

  3 混合编程的软件设计

  在对SAM8系列单片机进行软件开发过程中,用C语言编程具有开发周期短、可读性强、可移植性好和修改方便等优点,但是C程序反汇编生成的汇编代码往往较长。若直接用汇编语言编程,虽然编制的程序较短,但开发周期长,修改也不方便,所以,较好的解决方法是把程序的框架或主体部分用C语言编写,而将执行效率要求较高的部分用汇编语言来编写。下面主要介绍针对SAM8系列单片机进行混合编程的软件设计方法。

  3.1 IAR C语言编译器的函数参数传送规则

  IAR C语言编译器规定函数参数传递有2种方式,即寄存器传递和堆栈传递。传递顺序是从左至右,具体采用哪种方式传递取决于函数参数的类型。

  IAR C语言编译器把单片机的寄存器分成2组,其中高速暂存器组(R10-R15)中的函数参数由左至右依次传入R15至R10,直至这些寄存器点满,而其余函数参加由堆栈来传递。由迂些寄存器是暂存器,用完就释放掉,所以应用过程中不用保护。第二组为普通寄存器(R1、R4-R9),这组寄存器主要用作寄存器变量和保存中间变量,应用过程不必须对其进行保护,但在C语言函数编写中可以不体现,而由编译器自动完成。

  当函数参数为以下2种类型时,应当选用堆栈方式传递:第一种是传递参数为struct或union大于4字节的参数类型。第二种是长度可变函数的未命名参数类型。

  函数参数通常放在由堆栈指针指定的位置为起始的主存储器中,被调用函数的参数则由左至右依次存放在被指定的堆栈中,当被调用函数返回调用函数时,堆栈自动清零,主存储器空间被释放,以供下次供传递函数使用。

  函数返回值可根据其类型放在R15或R15:R14寄存器对中。若返回值是struct或union类型,则返回R15中的值是存放返回结果的堆栈指针起始位置。

  C语言编译器也是编译中断函数时会自动保护所用到的寄存器(包括R10-R15),状态寄存器FLAGS的保护也是在中断处理过程中自动完成的。中断过程中用到的寄存器都使用PUSH Rn的指令进行保护,而采用POP Rn指令恢复。当用IRET指令自动恢复状态寄存器FLAGS时,可以从中断中返回。[page]

  3.2 对汇编语言函数的约定

  对于一个可以被C语言函数调用的汇编程序来说,使用时必须满足以下3点:

  1)符合C语言参数传递规则;

  2)有PUBLIC函数入口标志;

  3)在C语言函数中用extern声音为外部函数。

  参加传递规则和C语言函数一样,所不同的是,要在汇编语言函数编写过程中具体体现出来。

  4 应用实例

  明确了以上调用规则,混合编程就比较容易了,归纳起来有以下几点:

  1)在C语言源文件中用“extern”关键字导入被汇编语言源文件导出的标号;

  2)在汇编语言源文件用“PUBLIC”关键字把标号导出到C语言源文件;

  3)在汇编语言中用“EXTERN”关键字导入被C语言函数源文件导出的关键字;

  4)用C语言把标号导出给汇编语言,这一步不需要关键字;

  5)把编辑好的C语言和汇编语言源文件导入设计系统,并用各自调用函数的指令调用。

  下面以笔者在校音器设计中用到的2个例子来具体说明。

  4.1 C语言和汇编语言相互调用

  在该例中,用C语言函数main()调用汇编语言函数get_rand()以得到一个随机数,接着,用汇编语言函数get_rand()调用C语言库函数rand()再得到一个整型机随机数,然后用调用C语言函数mult()的方法把这个随机值的高位乘以main()函数传递给自己的实参,同时把乘积值返回给main()参数。

  

 

  4.2 汇编语言写中断服务程序

  为了提高系统响应速度,设计时往往要求中断服务程序的执行时间较短,执行速度较快。因此,最好的方法就是用汇编语言编写中断服务程序。但要注意以下2点:

  1)中断函数不传递参数和返回结果;

  2)中断过程中用到的寄存器都要进行保护。

  本例中用汇编语言编写看门狗定时器的中断服务程序,而用C语言编写主程序。

  

  5 结束语

  以上方法已经应用于笔者参与设计的校音器设计中并取得良好的效果。但也要注意调试过程中编译器选项的设置对程序运行结果有一定的影响,因此,对SAM8系统中不同的核,一定要选用不同的内核版本号,否则,寄存器传递的参数可能会错位,从而导致参数传递错误,给调试带来不便。

关键字:S3C825A  微控制器  结构 引用地址:S3C825A型微控制器的结构及软件设计

上一篇:将血压计显示器读数读入单片机的接口电路
下一篇:MC9S08QE4单片机在有源RFID中的应用

推荐阅读最新更新时间:2024-03-16 13:44

MCU也玩八核!xCORE多核控制器强势来袭
就全球看来,当前在嵌入式系统应用领域,真正值得称道的嵌入式后起之秀并不多,但作为嵌入式新秀的XMOS公司近期以凌厉的市场攻势,吸引了众多科技专业媒体的关注。可以说,嵌入式市场又加入了一员具备竞争力的悍将。在2013年11月5日的新品发布暨媒体见面会上,XMOS率先发布具有里程碑意义的基于采用eXtended架构的xCORE器件产品中的xCORE-XA系列芯片,凭借其强大的可编程SoC性能,将大幅增强在低成本、低功耗和可编程的市场存在及其竞争力,强力威胁着微处理器(MCU)厂商和FPGA大厂在嵌入式市场的布局。 XMOS公司全球市场总监Andy Gothard在演示xCORE-XA的DEMO。他表示,MCU多核化、低功耗和可
[单片机]
51单片机产生PWM软件延时和定时器产生两种方法
89C51芯片没有自带PWM发生器,如果要用51来产生PWM波就必须要用软件编程的方法来模拟。方法大概可以分为软件延时和定时器产生两种方法。下面将逐一介绍。 1 软件延时法 利用软件延时函数,控制电平持续的时间,达到模拟pwm的效果。 程序如下: #include sbit pwm=P1^0; main() { while(1) { pwm=1; delayus(60);//置高电平后延时60us,占空比60% pwm=0; delayus(40); } } void delayus(uint x) { while(x--); } proteus软件仿真结果如下: 可见,用这种延时函数的方法就能简单地模拟出pwm输出。但是
[单片机]
51<font color='red'>单片机</font>产生PWM软件延时和定时器产生两种方法
单片机做的半导体制冷小冰箱
最近天气比较炎热闲来无事,自己在家DIY了一个小冰箱,试了一下制冷效果还可以的,下面就把制作步骤和技术资料和大家共享一下: 这个冰冰可乐什么的真的太适合不过了。。器材:一个电源模块,220v转12v,6A。以及一个封装好的制冷器,元件清单都在原理图上可以看出来,继电器用的是继电器模块。 防水型的18B20,继电器模块,12c887时间芯片,12864液晶屏,蜂鸣器,89c58单片机芯片,接线子,什么开关,按键,电阻电容的你也应该知道的,就是一个单片机模块。。这些就是控制板的元件了,然后你还要去淘宝上买制冷器和制冷器血药的配套的电源模块。。然后你就可以自己DAY一个小冰箱了。。 废话不多说先上图: 这是系统控制板子需要自
[单片机]
<font color='red'>单片机</font>做的半导体制冷小冰箱
PDIUSBD12与PlCl6F877单片机的接口原理电路图
简介:本文主要给出 PDIUSBD12与PlCl6F877单片机的接口原理电路图 PDIUSBD12与PlCl6F877单片机的接口原理电路图如下所示:
[单片机]
PDIUSBD12与PlCl6F877<font color='red'>单片机</font>的接口原理电路图
单片机+74HC595入门8X8点阵教学
写在前面的话 希望所有发贴求助的新人朋友们, 请先在论坛搜索, 论坛有很多老师们发的贴子, 虽然有很多描述得不清不楚, 但总是有能用的 8X8点阵我也参考了好多, 发代码的确实不少, 但在硬件方面配套的原理图, 连接图都不太清楚, 于是就瞎子摸象, 总算是搞清楚了 特发此贴跟大家分享 照样, 先上原理图, 接线图 程序有附仿真程序, 方便调试 由于是测试, 所以用排针+杜邦线 单片机源程序如下: /********************************************************************************* 接线方式请看main.h说明
[单片机]
<font color='red'>单片机</font>+74HC595入门8X8点阵教学
51单片机内部定时器使用
/*------------------------------ Function: generate pulse signal Author: Zhang Kaizhou Date: 2019-5-15 22:50:43 ------------------------------*/ #include reg51.h #define uchar unsigned char sbit output = P1^0; uchar period = 250; uchar high = 50; uchar tcount = 0; void timer0() interrupt 1 using 1 { TH0 = (655
[单片机]
单片机系统软件看门狗的设计思路解析
硬件看门狗是利用了一个定时器,来监控主程序的运行,也就是说在主程序的运行过程中,我们要在定时时间到之前对定时器进行复位如果出现死循环,或者说PC指针不能回来。那么定时时间到后就会使单片机复位。常用的WDT芯片如MAX813,5045,IMP 813等,价格4~10元不等。 软件看门狗 软件看门狗技术的原理和这差不多,只不过是用软件的方法实现,我们还是以51系列来讲,我们知道在51单片机中有两个定时器,我们就可以用这两个定时器来对主程序的运行进行监控。我们可以对T0设定一定的定时时间,当产生定时中断的时候对一个变量进行赋值,而这个变量在主程序运行的开始已经有了一个初值,在这里我们要设定的定时值要小于主程序的运行时间,这样在主程序
[单片机]
<font color='red'>单片机</font>系统软件看门狗的设计思路解析
基于AT89S52单片机的电子闹钟设计
一、系统功能要求 电脑时钟的任务要求为:系统一运行就从00点00分00秒开始计时,并在数码管上显示时、分、秒当前值。 二、系统整体方案 1、明确任务 基本工作原理:每百分之一秒对百分之一秒寄存器的内容加一,并依次对秒、分、小时寄存器的内容加一;六个数码管动态显示时、分、秒的当前值。 2、 硬件和软件功能的划分 本课题要求实现的功能比较简单。百分之一秒的控制由at89s51的定时器T0完成;百分之一秒寄存器的内容加一由T0中断完成;动态显示、矩阵式键盘。 整体框图如下: 1. 单片机的选择 AT89S52,它是一个低电压,高性能CMOS8位单片机,内含4k bytes的可反复擦鞋的制度程序存储器(PEROM)和128
[单片机]
基于AT89S52<font color='red'>单片机</font>的电子闹钟设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved