新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 8051与AndesCore的软件差异与移植

8051与AndesCore的软件差异与移植

作者:时间:2015-07-29来源:电子产品世界收藏

  3. 系统相关事项说明

本文引用地址:http://www.eepw.com.cn/article/277989.htm

  3.1. 操作模式

  只有一种mode,™有两种mode,分别是 superuser mode和user mode ,当系统上电启动时是在 superuser mode,或者当系统进入到中断或者异常时也进入到superuser mode,当从中断或者是异常返回后,会返回到user mode 。由于没有mode切换的问题,所以在移植的时候只需要理解™在mode方面的机制就可以。

  3.2. 系统的启动

   ™的系统启动过程类似,通常在0 地址存放中断向量表,第一个向量表是reset,当系统上电或者是reset 后,经过该向量会跳转到一个启动函数中,该启动函数会完成系统启动所必要的步骤,比如设置CPU,初始化SoC ,清理内存,初始化 C 运行环境等, 最后完成所有的准备后跳转到 main函数。

  3.3. 中断处理

  8051有5 个中断源,通常中断向量表只是一个跳转,会跳到真正的中断处理函数,8051只能设置成两级的中断优先级。

  AndesCore™包含了9 个内部异常,中断向量号对应于从 0 到8, 9 之后对应于外部中断,在Internal VIC (IVIC )mode时可支持32个外部中断,

         当External VIC(EVIC) mode时由外部中断控制器決定, 最多有64个。

  中断的处理由以下几部分组成:

  1. 实现中断处理函数

  可以用汇编实现8051 的中断处理函数,也可以用C 来实现,在8051中C 实现的中断处理函数会有一个"interrupt" 的关键字,如果有寄存器 bank被使用到,还要加上"using"关键字。如果要将中断处理函数固定在特定位置还需要使用"at" 关键字,而 AndesCore™使用的是标准的 C 语法,不需要为中断处理函数做这些设置。

  2. 中断向量表的产生

  8051 中断向量表摆放在 0 开始的位置,在AndesCore™中硬件可以设定启动地址,通常设为 0 地址,也可以是非 0 地址,中断向量表存放在对应系统启动地址处。在程序编写过程中可以通过标准的gnu 语法再加上link script 的sag 工具,以使产生的中断向量表在链接的时候存放于特定的位置。

  3. 中断配置

  在8051中,需要做以下设置

  1. IE 寄存器中Individual Interrupt Enable 位设1

  2. IE 寄存器中EA(Enable All)位设1

  3. 当是外部中断时,配置相关的pin 为输入,并设置对应的触发属性为edge或level 触发。

  而在AndesCore™中需要做以下设置:

  1 .设置CPU IVIC 或者 EVIC mode

  2 .设置INT_MASK位

  3 .设置中断的优先级

  4. 关于异常处理差异

  在8051中没有异常处理向量,所以在8051中并没有这部分的处理函数,在AndesCore™中有一些系统的exception 中断向量,比如Machine Error,GeneralException, 建议在AndesCore ™上实现对应的处理函数, 当发生这类异常时做一些基本的处理。

  3.4. 时序和延迟

  在8051中可以采用NOP指令来延迟,在 AndesCore™中也有NOP指令来达到类似目的。

  3.5. 电源管理

  8051 单片机中有两种省电方式,分别是空闲方式和掉电模式, 单片机处于空闲工作方式时,CPU处于睡眠状态,它的片内其它部件还是会继续工作,片内RAM的内容和所有专用寄存器的内容在空闲方式期间都被保存下来了, 可以通过中断或者硬件复位来终止空闲工作方式。单片机处于掉电工作方式时,片内的振荡器停止了工作,因此它的一切都被迫停止了。但片内 RAM的内容和专用寄存器的内容一直保持到掉电方式结束为止。掉电方式的唤醒方式只有一种,就是硬件复位。

  在AndesCore™上,可以通过软件standby 指令使CPU进入到低功耗模式,通常标准c 代码并不能直接控制硬件,Andes 的compiler 提供了intrinsic 函数来做到这点。分别是:__nds32_standby_no_wake_grant(), __nds32_standby_wake_grant(),__nds32_standby_wait_done().指定系统进入低功耗模式时被唤醒的方式,分别是外部中断中断唤醒,电源管理模块唤醒,和中断配合电源管理模块唤醒,可以根据系统需要分别设计。

  4. 从8051移植到AndesCore上注意事项

  一个8051工程,当移植到AndesCore™上时有以下注意事项:

  1. 内存映射,代码和数据摆放位置相关的设置。

  2. 可以不必考虑变量数目,或者是函数的overlay, 因为在32bit 的AndesCore™上开发时内存空间通常不会像 8051那样小。

  3. 如果空间允许,在 AndesCore™上尽量使用32bit的数据类型,这样效率会更高。

  4. 在8051上用于表示内存区域属性的标志如(idata, xdata, bdata, pdata 等)在AndesCore™上可以移除。

  5. 在8051上不需要设置内存区块模式,比如:small, compact, large 等。

  6. 在8051 上用于表示对像远近的属性"near" 和"far",都可以移除,AndesCore™上的指针的访问可以达到所有地址空间。

  7. 在中断处理函数中不需要像8051那样指定哪块寄存器块会被用到的关键字"using"。

  8. 在8051上中断处理函数就和普通的函数一样,中不需要设置其它的关键字,如interrupt 。

  9. 如果有8051汇编部分移植到 AndesCore™,需要重新实现,尽可能的用c 来实现,便于维护和调试。

  10. 在8051中使用到的#progma 相关部分需要删除。

  11. 在AndesCore™中函数不需要声明为"reentrant" 属性。

  12. 如果使用了数学运算,在8051中默认是使用32bit单精度浮点,如果要

  保持和8051 中相同的精度,需要将函数名做一些调整,如将 sin() 改成sinf()。



关键词: 8051 AndesCore

评论


相关推荐

技术专区

关闭