您在本站中的位置 〉高新区科技人员论文集

 

手动切换寻址空间的理论方法及应用

刘恋

天津市德力电子仪器有限公司

摘要: 目前 8 位单片机的统一 寻 址空间为 64K, 除去 RAM 和外设 I/O 占用的地址空间后留给程序存储的空间非常有限,严重限制了程序代码的大小,远远满足不了复杂应用的需要。本文介绍了一种手动切换 寻 址空间的方来解决程序存储空间不足的问题,并且给出了基于 NT6578 的具体实现方法。

 

关键字: 寻 址 , 切换,方法及应用, NT6578

 

•  引言

单片机是将计算机的基本部件微型化使之集成为一块芯 片上的微机,它具有体积小、功耗低、功能强、性能价格比高、应用广泛等显著优点,在智能仪表、自动化控制系统、数据采集系统中都得到广泛应用 . 但是,目前嵌入式系统的功能越来越复杂,开发的代码越来越庞大,因为寻址空间有限所带来的程序的存储和运行困难越来越显著,因此急需一种动态改变寻址空间的方法来解决这个问题。

NT6578 的核心部分是一颗主频为 1.78MHz 的微处理器 6502 ,它的应用标准是 8 位 数据总线, 16 位地址总线,所以 NT6578 的 CPU 和 GPU 的 程序寻址空间为 64kB. 但是其内部提供一些寄存器,通过设置这些寄存器可以实现 寻 址空间的动态切换。

 

2 .内存编址和寄存器介绍

2.1 内存编址

NT6578 的 CPU 和 GPU 内存单元编址为 $OOOOH-$FFFFH ,如图 1 所示, WorkingRAM 的存储 地址是从 $0000H- $2000H 和从 $5000H-$57FFH.Video RAM 的存储地址是从 $OOOOH-$2800H 。 8 个寄存器所映射的地址是 $ 8000H- $1FFFFFH (A15=1 ,共 1MB).

图 1

2.2 寄存器介绍

内存 $4040H-$404FH 的作用如图 2 所示 , 其中 $4040H-$4047H 为 8 个寄存器地址,它们的低三位 (DO-D2) 映射到片中 CPU 的 A12-A14 ,高五位 (D3-D7) 映射 6578 的外延地址线 XA16-XA20 ,而 $4048H-$404FH 的作用是为从主存储器到 VRAM (Video RAM) 或 Working RAM 的数据传送提供另一种 DMA (Direct Memory Access) 快速传送方式 . 这种 DMA 方式传送数据到 VRAM 的 操作只有在 GPU 或视频页面关闭时才 执行。

图 2

 

 

 

3. 切换方法

3.1 PROGRAM BANK

NT6578 内部有 8 个寄存器 :ProgramBankO-ProgramBank7 ,每个寄存器对应 NT6578 内存中 $8000H- $1FFFFFH (A15=1) 的某个 4KB 的空间 . 每个程序寄存器 模块为一个存储器段,每个段有一个段号,编号为 OOH 至 FFH. 那么在寄存器内填入 一个段号,就相当于将 $8000H-$FFFFH 的某个 4kB 空间映射 $8000-$1FFFFFH <A15=1) 的某个 4kB 空间里 . 例如 : 如果在 Program Bank3 内填人 8AH ,那么在 BOOOH-BFFFH 这 4kB 空间里就是 $ 11A 000H- $11AFFFH 的内容 . 可以通过程序直接控制 A12-A14 和 XA16-XA20 这 8 根地址线来实现扩展 .

3.2 DMA BANK

整个 1MB 空间也可按 32kB (DI.00-DI.14 最多传送 32kB) 分为 32 个 (XA16-XA20 提供 32 种选择 ) 直接存储器模块,每个直接存储器模块为一个段,每个段有一个段号,编号为 OOH 至 1FH. 每个直接存储器段的 32kB 是一段连续空间,它定位于 NT6578 的 0- $ 1FFFFFH 这个空间里 . 通常的使用方法是 : 设置直接存储器段的段号,然后设置 在 32kB 空间中的偏移地址,设置目的地址 ( 一般是内部 WORK RAM 或 VIDEO RAM) 、设置传送的数据长度,然后打开数据传送开关, CPU 就会按设置进行数据传送 .DMA BANK 切换法只在进行 DMA 传送数据时有效,它的切换不会影响程序寄存器 .

 

4. 程序实现

在应用程序中首先要将每个 BANK 的起始地址和相应寄存器设置好,参考下面程序:

.asm

ldx #00101000b

stx $4040h

inx

stx $4041h

inx

stx $4042h

inx

stx $4043h

inx

stx $4044h

inx

stx $4045h

inx

stx $4046h

inx

stx $4047h

jmp $E71FH

.endasm

其中 #00101000b 为 BANK 标识符 ( 此处为 BANK5) , $E71Fh 为该 BANK 编译后的起始地址。然后将该段程序复制到 RAM 中指定位置。需要切换寻址空间时,只要跳转到 RAM 中相应位置即可,程序如下:

SystemCtrlol=B0000_0000;

IRQMaskClean=B1111_1111;

.asm

jmp $05D8h

.endasm

SystemCtrlol 和 IRQMaskClean 寄存器设置的目的是保证在切换寻址空间时不要触发中断和初始化好系统控制寄存器,为切换后程序运行做准备。 $05D8h 是存储在 RAM 中的切换代码位置,跳转到该位置后即可实现寻址空间的切换。

 

5 .结束语

现在一些高级编译器也带有切换寻址空间功能,但是使用时需要付出高额的授权费用,带来了很高的开发成本。本文介绍的方法可以为开发单位节省大量费用,使用通用的编译器就能实现和使用高级编译器一样效果,完全可以取代高级编译器。针对不同的 CPU 实现方法可能会不同,也可能会在硬件方面做出一些改动配合软件来实现此功能,而且在编写程序时要用到汇编语言,可能会给开发者带来一定的困难。但是各种 CPU 之间都有一些共性,希望本文可以对各类型 CPU 实现寻址空间的切换带来一定的参考价值。

 

参考文献

1 . < NT6578 User Manual >

 

作者 简介 :刘恋 , 天津市德力电子仪器有限公司产品经理 , 作为公司的技术骨干在模拟和数字 CATV 测试仪器的设计方面有着丰富的设计经验 , 其设计的产品性能稳定被广大有线电视台所采用 , 并远销欧美、印度及俄罗斯等地区 , 获得广大客户的一致好评 .

 

天津 市德力电子仪器有限公司

地址 : 天津市南开区宜宾道 40 号

邮编 :300113

电话 :022-27645003-819

E-mail: steven_7780@163.com

 

Copyright © 2004 天津市高新区科学技术协会, All Rights Reserved
 津ICP备05005591号 海泰数码设计制作