新闻中心

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

8051 与 AndesCoreTM 的软件差异与移植

作者:时间:2015-07-29来源:收藏

3. 系统相关事项说明

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

3.1.  操作模式

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

3.2.  系统的启动

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

3.3.  中断处理

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

中断源中断向量
上电复位0000H
外部中断 00003H
定时器 0 溢出000BH
外部中断 10013H
定时器 1 溢出001BH
串行口中断0023H

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

Entry  numberEntry point
0Reset/NMI
1TLB fill
2PTE not present
3TLB misc
4TLB VLPT miss
5Machine Error
6Debug related
7General exception
8Syscall
9HW0
10HW1
11HW2
12HW3
40HW31

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

Entry  numberEntry point
0Reset/NMI
1TLB fill
2PTE not present
3TLB misc
4TLB VLPT miss
5Machine Error
6Debug related
7General exception
8Syscall
9-72VEP 0-63

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

1.  实现中断处理函数

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

2.  中断向量表的产生

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

script 的 sag 工具,以使产生的中断向量表在链接的时候存放于特定的位置。

3.  中断配置

在 8051 中,需要做以下设置

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

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

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

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

● 设置 CPU IVIC 或者 EVIC mode

● 设置 INT_MASK 位

● 设置中断的优先级

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 移植到 AndesCoreTM 上注意事项

一个 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()。

存储器相关文章:存储器原理




关键词: andes andescore 8051 MCU

评论


相关推荐

技术专区

关闭