经信局是做什么的| 插管是什么意思| 脾虚生痰吃什么中成药| 三剑客是什么意思| 妇科检查清洁度3度什么意思| 绚丽夺目的意思是什么| 咳嗽吃什么食物好得快| 百香果什么时候开花结果| 4月19号是什么星座| 看包皮挂什么科| 茅台为什么这么贵| 一个口一个犬读什么| 酷的意思是什么| 护士一般什么学历| 可好是什么意思| 柿子不能和什么同吃| 十年什么婚| 藏红花不能和什么一起吃| 规格是什么意思| 认知障碍是什么意思| ct和拍片有什么区别| cos是什么意思| 缺钾是什么症状| 脂蛋白a高是什么原因引起的| 龙代表什么象征意义| 荆芥俗名叫什么| 什么大米好吃| 眼角发痒用什么眼药水| 98年出生属什么| 急得很什么| 心绞痛是什么病| 梦见拉屎是什么意思| 脚有点浮肿是什么原因| 副鼻窦炎症是什么意思| 知性是什么意思| 脸上长闭口是什么原因导致的| 恶作剧是什么意思| 喝什么补血| 长期不过性生活有什么危害| 嫩绿的什么| 珂润属于什么档次| 榨菜是什么菜做的| 迷瞪是什么意思| 什么是斜视| 小乌龟吃什么食物| 榴莲不能和什么水果一起吃| 腹股沟疝气挂什么科| feel是什么意思| 瘖什么意思| aoa是什么意思| 成吉思汗属什么生肖| pr间期缩短是什么意思| 梦见掉了三颗牙齿是什么意思| 白斑不能吃什么| 肺结节吃什么食物散结节最快| 清分日期是什么意思| 大便青黑色是什么原因| dr是什么检查| 包皮炎用什么药最有效| 正常小便是什么颜色| 子宫内膜异位症吃什么药| 天蝎座女和什么星座最配| 胎盘粘连是什么原因造成的| 秋天的风像什么| 眼压高是什么症状| 麸质是什么| 湿气重的人吃什么好| 肚子疼是为什么| 霆字五行属什么| 神疲乏力吃什么中成药| 犹太人说什么语言| 怀孕周期是从什么时候开始算的| 屁很多是什么原因造成的| 囗腔溃疡吃什么维生素| 刚愎自用是什么意思| 未见卵黄囊及胚芽是什么意思| 指鼻试验阳性代表什么| 虎皮羊质是指什么生肖| ddi是什么意思| 什么叫通勤| 咳嗽吐白痰吃什么药| 投喂是什么意思| 拉架棉是什么面料| 白蜡金是什么金| 中药七情指的是什么| 哈儿是什么意思| 百白破是什么疫苗| 阴道瘙痒吃什么药| 博爱是什么意思| 手链断了是什么预兆| 肾挂什么科室| 眼睛浮肿什么原因| 性激素六项查什么| 骨头疼是什么原因| 什么是什么的眼睛| 黑洞是什么意思| 孕吐严重是什么原因| 梦见自己掉河里了是什么意思| 为什么支气管炎咳嗽长期不好| 尿检3个加号什么意思| 过敏用什么药| 什么是叠词| 1921年属什么生肖| 高血压吃什么水果| 皇帝为什么自称朕| 9月21号是什么星座| 湘潭市花是什么| 大米粉做什么好吃| 鱼翅配什么煲汤最好| 为什么天天做梦| 孕妇吃山竹对胎儿有什么好处| 白细胞酯酶阳性是什么| 什么叫子宫腺肌症| 白玫瑰花语是什么| 踏雪寻梅是什么意思| 排浊是什么意思| 孩子疱疹性咽峡炎吃什么药| 多字五行属什么| 一什么帽子| 谛听是什么| 什么是化学| 洛阳有什么大学| 小腿肚酸疼是什么原因| 樱桃泡酒有什么功效| 喉咙痛用什么药好得快| 电泳是什么意思| 什么是清关| 人为什么需要诗歌| 脊髓空洞症是什么病| 7月7是什么节日| 部堂大人是什么职位| 立春有什么讲究| 青梅竹马是什么意思| 情绪波动大是什么原因| 双头蛇是什么意思| 帝陀表什么档次| 什么是工科| 大拇指发麻是什么原因| 长残了是什么意思| 院士相当于什么级别| 小登科是什么意思| 今天什么生肖冲什么生肖| 钙化积分是什么意思| 轴向是什么意思| 凉粉是用什么做的| 彩色相片什么时候出现| 奢华是什么意思| 迷茫是什么意思| 为什么会有黑眼圈| 什么是熵| 27岁属什么生肖| 正在值机是什么意思| 喷塑工是干什么的| 牛和什么生肖最配| 什么是中出| 什么是肺结节| 欲代表什么生肖| 宁夏古代叫什么| 女性更年期吃什么药| 夜盲症是什么症状| 外阴痒用什么药膏| 不以为然的意思是什么| 心火旺吃什么| 什么叫胆固醇| 69年鸡是什么命| 胃绞疼是什么原因| 去湿气吃什么最好| pigeon是什么牌子| 梦见打老公是什么意思| 9月26号是什么星座| 磨牙缺什么| eb是什么意思| 打佛七什么意思| 一月六日是什么星座| 什么的云海| 魔性是什么意思| 1114是什么星座| 士加一笔是什么字| 小年吃什么| 不值一提是什么意思| 些几是什么意思| 嚷能组什么词| kenzo是什么牌子| 耐药菌感染什么意思| 去疤痕挂什么科| 黄瓜是什么科| 什么叫抑郁症| 乳糖不耐受吃什么奶粉好| 冬天手脚冰凉是什么原因怎么调理| 精囊在什么位置| 为伊消得人憔悴什么意思| 天克地冲是什么意思| 钟馗是什么意思| 常放屁是什么原因| 什么血型招蚊子叮咬| 早搏心律不齐吃什么药| 女生考什么证书最实用| 7月7号是什么节日| 雪燕是什么| yg是什么意思| 砖茶是什么茶| 斩衰是什么意思| 为什么会拉水| 动手术后吃什么对伤口恢复比较快| 精子是什么味道的| 上唇肿胀是什么原因| 跑完步头疼是为什么| 律的右边读什么| 间歇性是什么意思| 心慌吃点什么药| 乔治白属于什么档次| 阴囊潮湿吃什么食物| 代糖是什么东西| 局灶癌变是什么意思| 木丹念什么| 过期药品属于什么垃圾| 全身发黄是什么原因| 取环后要注意什么事项| 紫癜有什么症状| 5月17日是什么星座| 雨渐耳符咒有什么用| 长期贫血对身体有什么危害| 驴胶补血颗粒什么时候喝最好| 什么叫制动| 念字五行属什么| rem睡眠是什么意思| 屎壳郎是什么意思| 午睡睡不着是什么原因| csc是什么意思| 文书是什么意思| 炎症是什么原因引起的| 呕血是什么意思| 天安门以前叫什么| 肝内高回声结节是什么意思| 为什么会乳糖不耐受| sg什么意思| 熠熠什么意思| 去医院看舌头挂什么科| 膝盖内侧疼是什么原因| 谷丙转氨酶什么意思| 女性掉发严重是什么原因| 什么是香港脚| 什么叫电子版照片| 血红蛋白是什么意思| 致爱是什么意思| 内能是什么| 12月份什么星座| 5月9号什么星座| 最短的季节是什么| 海鲜菇不能和什么一起吃| 排骨炖什么最好吃| 心慌出虚汗是什么原因| 什么的舞姿| 28岁属什么的| 两肺纹理增多是什么意思| 上门女婿什么意思| 乔丹是什么品牌| 胸膜增厚吃什么药| 面条吃多了有什么坏处| 自刎是什么意思| 伽利略是什么学家| 蝙蝠粪便是什么中药| 为什么老是想睡觉| 受惊吓吃什么药| 百度

新闻中心

EEPW首页 > 嵌入式系统 > SAM8系列S3C825A型单片机及其软件设计

公告汇总:联通继续停牌 阳光城股东接盘龙净环保

——
作者:贺兴华 张永亮 肖山竹 时间:2025-08-04 来源:国外电子元器件 收藏
百度 具体计划如下:  A:抢劫红光村的小卖部,并向西逃窜。

  摘要:以S3C825A为例介绍三星公司的内部结构及其软件开发环境,详细描述采用混合编辑法来对进行软件设计的一般方案,最后给出用法对S3C825A进行软件设计的具体应用实例。

    关键词:

引言

  三星SAM8系列单片机是8位CMOS型微控制器,该系列单片机具有功耗超低、多样型号、资源丰富、CPU时钟可调及软件对硬件控制灵活等优点,其中,S3C825A型是目前应用较为广泛的单片机。S3C825A与三星SAM8系列其他单片机一样,其常用的开发环境是公司的 Embedded Workbench集成开发资源,该环境支持,可以编辑、汇编和编译汇编语言和C语言的源文件,并且汇编程序与C程序可以共同相同格式的头文件,使得开发过程灵活方便,是一种高效的软件设计方法,具有广泛的应用前景。

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

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

2.2 SAM8的开发环境

  SAM8系列单片机常用的开发软件是IAR公司提供的基于IAR Embedded Wordbench的集成开发环境,该开发系统集IAR 、汇编器、连接器、代码编辑器、工程管理器及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时,可以从中断中返回。

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()参数。

/****C语言源程序****/

#include<ios3c825a.h>/*头文件*/

extern unsigned char get_rand (unsigned char seed);/* 汇编语言原型声明*/

void main(void)/*主函数*/

{

unsigned char seed;

unsigned char value;/*定义变量*/

WTCON=0xa0; /*关闭watch dog*/

Seed=0x05;

Value=get_rand(seed); /*调用汇编语言函数,得到一个随机数*/

While(1); /*程序结束*/

}

/**加法子程序,供汇编语言调用**/

unsigned char add(unsigned char x,unsigned chary)

{

return (x+y);

}

/****C语言源程序结束 ****/

/****汇编语言源程序 ****/

#include <ios3c825a.h> ;头文件

EXTERN rand ;C语言库函数

EXTERN add ;用户自定义C函数

PUBLIC get_rand ;导出函数名给C函数调用

Get_rand:

PUSH R9 ;普通C函数入栈保护

LD R9,R15;C函数传递参数给R15,暂时存储在R9

CALL rand ;调用C库函数得到一个随机数,作为add的第一实参,存储在R15

LD R14,R9;C函数传递的参数,作为add的第二实参,存储在R14

CALL add ;add返回的值存储在R15中

POP R9 ;add出栈恢复寄存器内定

RET

END

/**** 汇编语言源程序结束 ****/

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

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

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

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

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

/****C语言主程序****/

#include<ios3c825a.h> /*头文件*/

extern void in0(void); /*中断函数声明*/

void main(void)

{

CLKCON=0X98; /*开中断*/

IMR=0X10; /*IRQ4使能*/

WTCON=0X84;/*看门狗定时器设为0.25秒*/

P2CONL=0X03; /*P2.0为输出*/

IPH=0X00;

IPL=0XD6; /*中断函数所对矢量位置*/

CLKCON=0X18; /*关中断*/

while(1);

}

/****C语言主程序结束****/

/****汇编语言编写的中断程序****/

#include <ios3c825a.h> ;头文件

public 'int0' ;中断函数声音

RSEG WATCHT:CODE:RROT (1),0X00D6 ;中断矢量在代码段中的绝对位置

Int0:

PUSH R1 ;寄存器保护

LD R1,#01H ;给PORT2寄存器赋值,使连接P2.1的LED定时发头

POP R1;寄存器恢复

IRET;中断返回

END

/****汇编语言编写的中断程序逻辑****/

5 结束语

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

 



评论


相关推荐

技术专区

关闭
步步高升是什么意思 同一首歌为什么停播了 飞蛾为什么会扑火 4个月念什么字 吃什么对胰腺好
9月30日什么星座 1971年是什么命 5月30号是什么星座 乳糖不耐受吃什么药 氢化植物油是什么
社保卡是什么意思 肝内脂肪浸润是什么意思 口腔异味是什么原因引起的 白带褐色什么原因 扎西德勒什么意思
脚褪皮是什么原因 吃什么不胖 IOM是什么意思 麻豆是什么意思 护肝喝什么茶
偶发室性早搏是什么意思hcv7jop7ns3r.cn 三马念什么hcv7jop5ns0r.cn 2004年属什么hcv9jop2ns9r.cn 月经发黑是什么原因hcv8jop3ns6r.cn 介意是什么意思hcv9jop0ns2r.cn
喝酒后头疼是什么原因hcv9jop0ns3r.cn 心脏右束支传导阻滞是什么意思xjhesheng.com 辐射对称是什么意思hcv8jop9ns5r.cn 人体缺钾是什么症状travellingsim.com 腿膝盖后面的窝窝疼是什么原因hcv9jop5ns4r.cn
武则天是什么生肖hcv9jop0ns0r.cn 不举是什么意思hcv9jop1ns0r.cn 生孩子大出血是什么原因造成的hcv8jop2ns2r.cn mts是什么意思hcv8jop7ns6r.cn 梦见自己尿裤子了是什么意思hcv7jop5ns1r.cn
cream什么意思hcv8jop0ns7r.cn 梦见鹦鹉是什么征兆hcv8jop5ns3r.cn 兰蔻是什么品牌hcv8jop0ns6r.cn 蜱虫的天敌是什么bfb118.com 有什么神话故事hcv9jop0ns7r.cn
百度