扩展TINI的IO性能

发布者:Harmonious88最新更新时间:2006-09-01 来源: MAXIM关键字:寄存器  编程  器件 手机看文章 扫描二维码
随时随地手机看文章

引言

DS80C400评估板包括TINIm400参考电路板和TINIs400插座板,为评估TINI运行环境和利用DS80C400网络微控制器开发基于TINI的应用提供了一个优秀平台。TINIm400/TINIs400组合电路板的一个缺点是其通用IO (GPIO)引脚数有限。TINIs400插座板只包含几个可方便用作GPIO的引脚;插座板上的大多数IO引脚遍布在电路板上,并被用作其它功能(例如,J27为I2C引脚,J4为外部中断引脚)。

本应用笔记逐步演示了如何使用复杂可编程逻辑器件(CPLD)来配置硬件和开发软件,从而为TINIs400插座板额外提供32个GPIO引脚。

硬件设置

扩展TINI的IO性能的第一步是在TINIs400插座板上额外安装四个器件:CPLD、电源调节器,以及两个插头。Dallas Semiconductor公司售出的TINIs400插座板上没有安装这些器件,但为添加这些器件预留了焊盘和走线。板上并未安装这些器件,因为许多应用并不需要扩展IO性能,或者采用定制电路板设计。

TINIs400电路原理图1的第7页详细给出了扩展TINI IO性能所必需的器件。该电路使用了100引脚VQFP封装的Xilinx XC2C64 CoolRunner-II CPLD。
XC2C64和更大规模的XC2C128均已在TINI硬件平台上通过测试,该平台也支持相同引脚和相同封装的其他规模的器件。 与CPLD相关的插头有三个,其中两个是必需安装的,具体说明如下:

J30 JTAG编程连接器。通过JTAG接口对XC2C64 CPLD编程。J30连接器为JTAG信号TMS、TCK、TDI和TDO提供引脚。更详细的讨论见下文的CPLD编程一节。

J28扩展IO连接器。通过该连接器可访问XC2C64器件的32个引脚。对CPLD编程将为这些引脚提供读/写接口。

J29额外IO连接器。该连接器提供与XC2C64的16个额外连接,本设计中未用到这些连接器。

除J30和J28插头以外,还需要安装以下器件:

U2 MAX1792EUA18调节器
U12 Xilinx CPLD
电容C40至C57。这些电容仅在使用CPLD时才需要,从Dallas Semiconductor获得的TINIs400插座板应该已安装了这些电容。如果安装位置不正确或缺失,在进行其它TINI开发时也许不会注意到。

CPLD配置

CPLD是可编程逻辑器件。可将它看作是可编程硬件,具有非常灵活的内部逻辑,允许通过简单再编程实现很多功能。用CPLD可以实现32位触发器,以存储CPLD输出引脚的逻辑电平。用Verilog,一种硬件描述语言(HDL)来描述CPLD要实现的功能。Xilinx提供的工具可将Verilog源代码转换成二进制形式,用来配置CPLD。

在TINIs400电路板上,XC2C64与TINI微控制器DS80C400的存储器总线连接。这种连接允许TINI程序通过读、写特定地址访问CPLD。所以,当地址线选择CPLD时,必须对CPLD编程以正确响应;CPLD必须锁存写入的数据总线信号,并且当读CPLD时必须驱动端口输入。


图1. CPLD功能框图

图1为CPLD需要实现的功能方框图。图中右上部的模块(IO7:0、IO15:8、IO23:16、IO31:24)代表存储输出电平值的触发器。这些8位寄存器组每一个均连接到数据总线。当通过适当的地址线和写选通信号(nWr)使能时,数据总线上的内容被锁存到寄存器内。检测IO引脚的输入电平并送入4:1多路复用器,此时低位地址选择8位值并传递到数据总线。如果CPU请求读(由地址线和nPSEN信号使能),则使能多路复用器的输出并驱动数据总线。

尽管10条地址线(不包括芯片使能)与CPLD连接,但本示例应用只使用其中四条。A17:A16高地址线配合芯片使能6一起使用。当地址位A17:A16为低且nCE6有效(低电平)时,选择CPLD,但CPLD在读或写信号有效之前不起作用。其它两个地址位A1:A0,用来选择四个8位寄存器当中的一个作为写操作的目标地址或读操作的源地址。这一地址方案意味着许多地址都可使能对四个8位寄存器的访问。表1概括了这种地址方案的灵活性。

表1. 能够激活CPLD寄存器的地址线取值

由于TINI库和工作固件将DS80C400配置为每个芯片使能端对应2MB空间,并且DS80C400的地址范围是24位(16MB),所以八个芯片使能端对应地址的高3位。为激活芯片使能6,24位地址的高3位必须为110b。

尽管表1说明多个地址均可激活寄存器,我们仅使用了以下寄存器地址:

地址C00000h IO7:0
地址C00001h IO15:8
地址C00002h IO23:16
地址C00003h IO31:24
Verilog编码
有六个Verilog文件用来实现CPLD的32位GPIO功能。本应用笔记的源代码中包含了这些文件,并附带提供Xilinx WebPACK(参见下文的讨论)工程文件。本工程的Verilog源文件包括:

Buffer8.v:8位缓冲器,用来连接TINI到四个8位寄存器的数据总线。
Mux2x8.v:2:1多路复用器,用来选择两条8位总线中的一条。
OneO4e.v:2-4译码器,输出一个取决于低地址位的有效信号。
Reg8OD.v:8位伪开漏极触发器阵列,用来存储输出值。
TSBuffer8.v:8位三态缓冲器,用来驱动数据总线输入值。
CPLD.v:模块间的顶层连接。
最应引起注意的Verilog源文件是CPLD.v。它包含输入、输出和节点的定义,并且给出在其它文件中定义的实例化模块。该源文件也是提取写脉冲和读脉冲的地方:
assign Reset = ~nRstOut; // make a hi-active Reset
assign IOBank = ~nCE6 & ~|AH; // decode the I/O bank
assign ReadT = IOBank & ~nPSEn; // qualify Read strobe
assign WriteT = IOBank & ~nWr; // qualify Write strobe

然后将信号ReadT作为三态缓冲器的使能信号,使用检测到的输入值驱动DS80C400的数据总线:

// Tri-State data bus to TINI needs this buffer
TSBuffer8 U4(ReadT, DataToTINI, D);

信号WriteT送入四个8位寄存器组作为时钟信号。
// 4 8-bit pseudo-open-drain output drivers
Reg8Out U6(Reset, ~WriteT, Enable[0], DataFromTINI, UIO[ 7: 0]);
Reg8Out U7(Reset, ~WriteT, Enable[1], DataFromTINI, UIO[15: 8]);
Reg8Out U8(Reset, ~WriteT, Enable[2], DataFromTINI, UIO[23:16]);
Reg8Out U9(Reset, ~WriteT, Enable[3], DataFromTINI, UIO[31:24]);

另一个重要的源文件(虽然不是Verilog文件)是CPLD.ucf。该文件给出了CPLD.v中声明的信号名称和XC2C64器件实际引脚之间的映射关系。地址线和几个IO引脚的定义如下:

NET "AL<1>" LOC = "P30";
NET "AL<0>" LOC = "P32";
NET "AH<1>" LOC = "P37";
NET "AH<0>" LOC = "P39";
NET "UIO<5>" LOC = "P43";
NET "UIO<6>" LOC = "P49";
NET "UIO<7>" LOC = "P50";
NET "UIO<8>" LOC = "P52";
NET "UIO<9>" LOC = "P53";

注意,这些引脚定义直接来自TINIs400电路原理图的第7页。例如,从电路图可以看出:地址线3-0 (A[3:0])连接到引脚28、29、30和32。如以上清单所示,我们定义了两条最低地址线信号(AL<1>和AL<0>),它们被映射至CPLD的引脚30和32。

CPLD编程
用于CPLD编程的工程文件包含在本应用笔记的源代码CPLD目录内。可以使用Xilinx的免费Webpack工具来构建并编程CPLD。本应用笔记中的应用实例是用6.3.03i版本开发的。只要支持CoolRunner 2 CPLD系列,Xilinx工具的最新版本应该也适合本设计。
硬件连接
我们使用Avnet Avenue JTAG编程电缆来连接计算机的并口和CPLD的JTAG引脚。许多CPLD或FPGA评估套件均提供JTAG编程电缆。本文使用的编程电缆如图2所示。


图2. Avnet Avenue JTAG编程电缆

图3为编程电缆和TINIs400插座板之间所需的连接。对信号做了标记,因此也可以用其他编程电缆。TINIs400插座板要求VCC为3.3V。


图3. JTAG编程器与TINIS400插座板的连接关系。J30上未标注的引脚没有连接。

载入工程时,点击File菜单并选择Open Project。浏览本应用笔记的源文件并选择parallel32.npl。现在已经打开工程并准备构建。接下来说明如何配置一个全新的工程。也可以跳过这一节,直接浏览后面的部分了解如何编程CPLD。

遵照以下指导说明,根据应用笔记提供的源代码创建一个新工程。

在File菜单中选择New Project。

选择想要创建新工程的目录,输入工程名称。将创建一个以工程名称命名的新目录。确保Top Level Module Type为HDL。点击Next继续。

在接下来的菜单中选择工程需要的器件和封装。器件系列选择CoolRunner 2 CPLDs。然后从给出的列表中选择器件——可以是XC2C64、XC2C128或其它同类器件。封装选择VQ100,这是TINIs400插座板认定的封装。本应用笔记中用到的其它配置选项参见图4。完成配置后,点击Next继续。


图4. 配置新工程的器件和设计流程

下一个窗口询问新工程中要创建的所有新文件。由于已提供了所有源文件,因此点击Next,不增加任何新文件。

接下来的窗口要求添加任何现有的源文件。点击Add Source按钮添加源代码提供的所有Verilog文件(文件列表见上文的Verilog编码一节)和CPLD.ucf文件。一旦添加后,程序会询问:File.v is which source type The suffix is ambiguous as to type (File.v是什么文件类型,后缀类型不明确)。选择Verilog Design File并点击OK (参见图5)。所有输入文件归类完毕后,点击Next继续。


图5. 确定输入源文件的文件类型

接下来的窗口概括了新工程的基本信息。查看一遍信息并点击Finish。

只要在上面第5步中添加了UCF文件,程序将要求把该文件关联到其影响的内容。在列表中选择CPLD并点击OK。

至此,完成了工程创建和配置。现在可以编辑、构建及综合您的设计。

器件编程

按照以下指导说明来综合CPLD工程,并对XC2C64器件编程。确保编程电缆已按上文硬件连接一节中说明的方法连接完毕。

CPLD编程:

在Project View (一般在窗口左上部)中选择Module View标签。在Module View中选择主文件CPLD.v。

在Process View窗口(一般在Project View窗口下部)中,展开Implement Design分支并双击Generate Programming File。这将运行把Verilog源代码转换成二进制文件(用于编程CPLD)需要的所有进程。运行进程时,进程左侧将出现说明执行结果的标记。绿勾标志意味着进程成功结束,没有错误或警告。黄色惊叹号意味着进程成功结束,但有警告信息。红色X号意味着进程没有成功结束,出现了错误。

一旦程序结束并且成功生成编程文件,双击Configure Device (IMPACT)。
将出现一个窗口,显示Configure Devices。选择Boundary Scan Mode选项并点击Next。

在接下来的窗口(Boundary-Scan Mode Selection)中选择Automatically connect to cable and identify Boundary Scan chain,并点击Finish。
如果器件连接正确,iMPACT将弹出一个窗口,显示“There was one device detected in the boundary-scan chain. iMPACT will now direct you to associate a programming or BSDL file with this device....”。点击OK。

应该在当前的工程目录下打开一个文件对话窗口(如果没有在该目录下打开,应查到其正确位置)。在该窗口中双击选择CPLD.jed。

右键单击Xilinx芯片图并选择Program。

确保选中Erase Before Programming and Verify,并且不要选其它项。点击OK。

此时将出现编程状态进度条,几秒钟(少于20秒)后编程结束,CPLD配置完毕。
进行自己的CPLD功能设计时,当DS80C400不和CPLD通信时,应确保CPLD代码释放地址、控制和数据信号为高阻抗状态。忽略这一点是很常见的错误,这会导致奇怪的故障现象,例如电路板会被保持在复位状态或发生随机性重启。发生此类问题时,只要擦除CPLD即可阻止该问题。

调试电路板

简单地借助32个LED,即可以演示TINI的IO扩展性能。该演示板用四组LED和四个电阻排来指示每个CPLD IO引脚的状态。LED板(安装在TINIs400上)如图6所示。


图6. 装有调试IO板的TINIs400/TINIm400

该简易电路板的原理图包含在本应用笔记的源代码中。注意,其中的电阻值是建议值;阻值太高会导致显示较暗,阻值太低会消耗太多TINI电源电流,并中止执行过程。


软件接口

这一简单的存储器接口实现后,软件访问扩展的IO引脚变得相当简单,将采用汇编语言来实现(作为原生函数嵌入Java应用中)。
表2给出了为实现接口功能而定义的Java原生函数。

表2. TINI-CPLD接口使用的Java函数

注意,也可以用两个函数完成同样的工作:program(int address, int x)和read(int address)。但是,在本应用中选择每个地址分配一个函数,这样允许应用提取不同的地址作为功能寄存器。每个程序的汇编程序代码和读函数都相当简单。代码只要求以正确的地址载入数据指针,然后用一个movx指令激活存储器总线。


Native_program0:
clr a ; request first parameter
lcall NatLib_LoadPrimitive ; load parameter into r3:r0
mov dptr, #0C00000h ; point to memory mapped peripheral
mov a, r0 ; move low byte of source into accumulator
movx @dptr, a ; write to memory mapped peripheral
clr a ; indicate no error condition
ret ;

...

Native_read0:
mov dptr, #0C00000h ; point to memory mapped peripheral
movx a, @dptr ; read from memory mapped peripheral
mov r0, a ; move into low byte of result
clr a ; indicate no error condition
mov r1, a ; unsigned extend to 32-bits
mov r2, a ; unsigned extend to 32-bits
mov r3, a ; unsigned extend to 32-bits
ret ;

应用实例

应用实例在源代码的javacode文件夹中。该应用向四组LED写入递增值。该数值每500ms更新一次,因此可以很方便地知道应用是否正确运行。
由于该应用包括原生函数和Java代码,因此构建过程比纯粹的Java程序更为复杂。源代码中包含构建批处理文件,但要求针对您开发的系统做一些修改,具体说明如下:

c:\work\tini\tini1.16
ative\bin\win32\macro -Ic:\work\tini\tini1.16
ative\lib\ cpld.a51
改变目录以使其指向宏预编译处理器和本地库(native library)包含文件在您硬盘上的存储位置。这些项目是标准TINI SDK的一部分,可从ftp.dalsemi.com/pub/tini/index.html下载。
c:\work\tini\tini1.16
ative\bin\win32\a390 -f 1.16 -p 400 -l cpld.mpp
改变目录以使其指向a390汇编程序的地址。它们和宏预编译处理器存储在相同的目录中。
del *.class
从当前目录中删除先前存在的类。
javac -bootclasspath C:\work\tini\tini1.16\bin\tiniclasses.jar demo.java
不考虑TINI类文件,构建源文件demo.java。改变目录以指向TINI的API类,它是TINI SDK的一部分。
java -classpath C:\work\tini\tini1.16\bin\tini.jar;%classpath% TINIConvertor -n cpld.tlib -f . -o demo.tini -d C:\work\tini\tini1.16\bin\tini.db
组合本地库构建TINI可执行文件,实现与CPLD的接口。Java代码只需要调用该函数。
System.loadLibrary("cpld.tlib")
为了访问CPLD的扩展IO引脚,需要再次改变目录以使其指向TINI SDK附带的tini.jar工具文件和tini.db类数据库。

结束语

TINI和CPLD的结合提供了一种简单接口,可扩展IO性能,并具有高度灵活性。然而,使用可编程逻辑器件时其功能并不仅限于扩展IO。CPLD可用来实现许多逻辑功能和状态机。与TINI网络栈、Java虚拟机和操作系统结合使用,CPLD可使TINI系统具有高度可配置性和灵活性。

关键字:寄存器  编程  器件 引用地址:扩展TINI的IO性能

上一篇:基于ADSP-TS201S的图像采集处理系统
下一篇:基于ADSP-TS201S的图像采集处理系统

推荐阅读最新更新时间:2024-05-02 20:25

串口编程实现单片机和PC的通讯
进来要用串口编程实现单片机和PC的通讯,现在网上收录了一些编程的例子作为备查。 串口API通信函数编程 16位串口应用程序中,使用的16位的Windows API通信函数: ①OpenComm()打开串口资源,并指定输入、输出缓冲区的大小(以字节计)    CloseComm() 关闭串口; 例:int idComDev; idComDev = OpenComm( COM1 , 1024, 128); CloseComm(idComDev); ②BuildCommDCB() 、setCommState()填写设备控制块DCB,然后对已打开的串口进行参数配置; 例:DCB dcb; BuildCommDCB(
[单片机]
PLC编程如何合理规划变量地址​
首先我们先看下PLC中代表变量的软元件有哪些,主要有输入X输出Y,辅助继电器M,定时器T,计数器C,状态S,数据寄存器D,XY一般小型PLC很少,40点、60点的,这个根据输入输出类型进行规划即可,主要就是分清楚高速输入、高速输出,普通的不要占用。辅助继电器M有两类,普通的和掉电保存的,根据需要来选择,在规划地址的时候一段程序或者功能块使用连续的M,从编号0、10、20等开始,中间留有部分以备补充,比如这段用到M206,下一段就从M210或者M220开始。对于并联输出的,LD M72 OR M82 OR M92 OUT Y1,这样把编号的最后弄成统一的便于记忆也方便我们在最后调试的时候好检查。 定时器有不同单位的时间如1ms、
[嵌入式]
PLC<font color='red'>编程</font>如何合理规划变量地址​
cortex m0 lpc1114 DATA寄存器
这一节,介绍如何利用DATA寄存器检测引脚上的高低电平变化。 新建一个工程,结构如下图所示: 在main.c文件中,输入以下代码: #include “LPC11XX.H” #define LED1_ON LPC_GPIO1- DATA &= ~(1 0) #define LED1_OFF LPC_GPIO1- DATA |= (1 0) #define LED2_ON LPC_GPIO1- DATA &= ~(1 1) #define LED2_OFF LPC_GPIO1- DATA |= (1 1) #define KEY1_DOWN (LPC_GPIO1- DATA&(1 9))!=(1 9) #defi
[单片机]
cortex m0 lpc1114 DATA<font color='red'>寄存器</font>
德州仪器推出小体积2.5kVrms数字隔离器件
业界领先的电流隔离与小型封装组合为工业应用提供高级保护 2013 年 10 月 11 日,北京讯——日前,德州仪器 (TI) 宣布推出业界第一个数字隔离器件系列,其可通过 5 毫米 x 6 毫米小型 QSOP 封装提供 2.5 kVrms 的最高隔离额定值。该 ISO71xx 系列不仅比传统 SOIC 隔离器件小 50%,而且还可在相同封装中提供比同类竞争器件高 2.5 倍的隔离额定值。在不影响针对较低隔离额定值或 EFT 浪涌的保护性能的同时缩小板级空间,在可编程逻辑控制器 (PLC) 与传感器等工业自动化应用以及 DeviceNet、CAN 与 RS-485 等 Fieldbus 应用中已变得日益重要。低功耗 ISO71xx
[模拟电子]
专用于LE Audio:儒卓力提供Nordic Semiconductor全新蓝牙SoC器件
专用于LE Audio应用:儒卓力提供Nordic Semiconductor全新蓝牙SoC器件nRF5340 功能更强大、功耗更低、内存更大:Nordic Semiconductor无线SoC器件nRF5340具有适用于复杂IoT应用的双Arm®Cortex®-M33处理器,是Nordic双核蓝牙5.2 SoC的第三代产品。儒卓力在电子商务平台www.rutronik24.com.cn上提供Nordic这款产品组合。 nRF53系列是nRF51和nRF52系列的演进型款,不仅结合了这两个系列的主要功能,比如高速SPI、藍牙5.2和高达105°C的工作温度耐受性,还具有更出色的性能、更大的内存和更低的功耗,因此特别适用于
[物联网]
专用于LE Audio:儒卓力提供Nordic Semiconductor全新蓝牙SoC<font color='red'>器件</font>
基于嵌入式系统的手机编程开发平台
引 言 随着移动通信技术的飞速发展,手机已经从单一的电话通信设备转变为信息网络终端,因此,近年来手机编程已经成为一项重要的技术。手机是一个高新技术的集合体,包含了移动终端、嵌入式系统、数字信号处理以及通信协议设置等多项技术。手机编程开发平台是集合了通信技术、嵌入式技术、电子技术、软件工程、操作系统等理论的软硬件的教学与研究开发平台。在这个开发平台上开发相应的程序,可以掌握嵌入式系统设计的流程与方法;可以根据使用者的需求,设计并实现手机的基本功能和扩展功能。 1 手机编程开发平台总体结构 作为专业技术课程,手机编程技术的教学内容包括系统设置、操作系统使用以及应用软件开发,因此,手机编程平台必须支持各项教学内容。另外,作为教学仪
[单片机]
西门子SCL编程实例——电机星三角启动
国标规定三相异步电动机在以下两种情况下不允许直接启动: ①额定容量大于7.5kW的; ②由专用变压器供电时,电动机容量大于变压器容量20%的; 不宜直接启动的电动机可以通过下列几种方法启动: ①采用适当功率的电机启动器; ②采用适当功率的变频器; ③采用星三角转换电路; 采用星三角转换电路启动是相对简单和节省成本的一种方式,它是通过三个接触器的配合,在电机启动初期使三相定子绕组构成星型连接(Y)。当电机运行一段时间后,再将三相绕组转换成三角形连接(△)。星型连接时加载在定子绕组上是相电压(220V),三角形连接时加载在定子绕组上的是线电压(380V),可见星三角启动是一种降压启动。 星三角降压启动适用于正常运行时定子绕组为三角
[嵌入式]
西门子SCL<font color='red'>编程</font>实例——电机星三角启动
基于DSP与双目CMOS摄像头的数字图像处理系统
传统的数字图像处理通常采用图像采集卡,将模拟电视信号转换成数字信号,然后由PC机进行软处理。这样不仅不够灵活,处理能力也受到PC机和软件的限制。随着CMOS成像芯片工艺的改进和数字信号处理器功能的提升,使得数据量与计算量较大的图像硬处理成为可能。本文详细介绍了通过两路CMOS摄像头采集图像,以浮点DSP为核心处理器,采用60万门FPGA实现逻辑控制的数字图像采集处理系统的设计原理和实现方法。本系统所采用的芯片与器件,在保证性能的同时,兼顾低功耗,整个系统可以由1394线缆供电。    1 原理概述   整个系统的原理框图如图1所示。系统上电后,FPGA配置子板把配置文件加载到FPGA中。DSP由外部 FLASH引导,通过F
[网络通信]
热门资源推荐
热门放大器推荐
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

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

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