MCF51QE128快速GPIO的外部总线接口设计

发布者:Xingfu6666最新更新时间:2011-05-17 关键字:MCF51QE128  GPIO  外部总线接口 手机看文章 扫描二维码
随时随地手机看文章
引  言

  外部总线接口大都出现在功能和价格较高的高端微处理器中。例如,Freescale半导体公司生产的Coldfire和PowerPC微处理器,在低端的微控制器行列中,一般很少出现,主要原因是微控制器一般内部包含了Flash和SRAM,而不是像微处理器那样需要外扩大容量存储器放置代码和运行程序。但是,微控制器也会遇到需要外扩外部总线设备的情况,笔者在某项目中需要使用MCF51QE128(以下简称“QE128”)微控制器连接外部Flash存储测试数据,存取速度要求较高,因此无法使用串行接口的存储器,只能使用具有地址线和数据线的Flash存储器。

  QE128是Freescale半导体公司推出的Flexis系列的首款产品,具有25 MHz的总线速度和多种外设模块;还有一个特点是,其内部包含了与其他微控制器不同的快速GPIO模块。

  1  设计思路

  使用微控制器中通用I/O模块模拟实现外部总线接口是一个比较好的方法,但目前微控制器中GPIO模块一般仅包含8个I/O口,而大容量的存储芯片一般的地址总线和数据总线都是16位或者更高位数的。这种情况下需要使用2个GPIO端口组合才能模拟,速度不高。

  QE128微控制器中的快速GPIO模块(RGPIO)是一个比较特殊的模块。该模块直接与处理器的32位内部总线连接,支持字节、字和双字的访问,支持单周期、零等待的数据传输。这种特性与普通的GPIO有较大区别。区别的根本原因在于普通的GPIO模块都是与微控制器内部的从设备总线连接的。

  实现的关键在于,如何使一个RGPIO模块既可以作为地址总线使用,又可以作为数据总线使用。通过对总线的分析,所有的数据通信都由主设备发起,然后发送地址信号,最后发送数据或接收总线数据,这种操作是有先后顺序的。基于这种分析,将RGPIO模块分时复用便可解决此问题。

  使用QE128快速GPIO实现外部总线接口的设计示意图如图1所示。



  RGPIO模块的16个引脚连接外部设备的地址总线和数据总线(此处需要注意),各信号线的含义如表1所列。其中的GPIO表示微处理器中方向可以为输出的通用输入/输出引脚。需要注意的是,RGPIO模块的16个引脚是与两个通用I/O模块PORTC和PORTE复用的,所以在原理图设计时,用作控制信号的GPIO引脚应选择PORTC和PORTE端口之外的GPIO。另外,如果RGPIO需要内部上拉,则需要设置PORTC和PORFE的内部上拉寄存器。这一点在软件设计中的外部总线接口初始化函数Exb_Init中有体现。


  2  硬件连接实例

  以Atmel公司的单电压存储器AT49LV1024A为例。AT49LV1024A存储容量为128 KB(64K×16位),工作电压为3.3 V,可以直接与QE128连接。AT49LV1024A的地址线和数据线宽度均为16位,控制信号包括芯片使能信号CE、输出使能信号OE和写使能信号WE。

  图2为QE128与AT491LV1024A的硬件连接实例。在本实例中,锁存器使用的是2片TI公司的8路D型锁存器74HC373.2片74HC373的锁存使能LE(Latch Enable)引脚相连,通过QE128的TE信号控制来选择地址总线和数据总线。



  地址/数据信号外的其他控制信号使用GPIO控制。本实例中使用PTF端口的4个引脚。

  3  软件设计

  RGPIO模块常用的寄存器共有以下6个:数据方向寄存器RGPIO_DIR、数据寄存器RGPIO_DATA、引脚使能寄存器RGPIO_ENB、数据位清零寄存器RGPIO_CLR、数据位置位寄存器RGPIO_SET和数据位翻转寄存器RGPIO_TOG。6个寄存器均为16位寄存器。其中前面3个寄存器是其他的GPIO口都具有的,后面3个寄存器是RGPIO模块比较有特色的地方。这3个寄存器与数据寄存器RGPIO_DATA的每一位是对应的,将RGPIO_CLR中某一位置为0,则相应RGPIO_DATA的对应位就会清零。类似的,将RGPIO_SET或RGPIO_TOG的某一位置1,则会将RGPIO_DATA对应位置1或反转。相对于普通MCU中的读取数据至累加器→置位→写入寄存器的操作。RGPIO可以减少操作的时间,具体比较详见QE128参考手册中RGPIO一章。

  了解底层寄存器后,笔者对外部总线接口实现的底层函数做了通用性的封装,共包括3个函数:外部总线接口初始化函数void Exb_Init(void);外部总线写函数void Exb_QueuedWrite(word*pAddr,word*pData,bytenTransfer);外部总线读函数void Exb_QueuedRead(word*pAddr,word*pData,byte nTransfer)。Exb_QueuedWrite函数进行nTransfer次写操作,将数据数组中的数据写入地址数组中的地址。Exb_QueuedRead函数进行nTransfer次读操作,将地址数组中地址对应的数据读出放人数据数组中。其中Exb_Init函数代码如下:


  根据这3个通用底层接口函数便可以编写针对不同的外部设备的函数进行操作。本文以对AT49LV1024A的Flash存储器进行数据写入和读出操作为例,基本满足常用功能的需要。具体的AT49LV1024A存储器的命令序列请参考该芯片的技术手册。


  结  语

  MCF51QE128微控制器的快速GPIO模块是具有特色的一个模块。本文在对该模块进行分析的基础上给出了实现高速外部总线的方案,以及硬件连接和软件底层通用接口,解决了QE128连接外部高速总线设备的问题。

关键字:MCF51QE128  GPIO  外部总线接口 引用地址:MCF51QE128快速GPIO的外部总线接口设计

上一篇:多设备接口波特率不匹配的研究
下一篇:基于SCWS技术的图形化界面卡的接口与安全

推荐阅读最新更新时间:2024-05-02 21:23

(一)s3c2440——GPIO(流水灯实验)
一、GPIO流水灯实验 1、实验目的   a:掌握GPIO的使用方法   b:熟悉Linux下编程的方法 2、实验内容   通过控制GPIO引脚来使LED显示 3、主要程序:   a:start.S文件是启动文件。第一个开始的程序。它实现的功能是关闭看门狗(不关闭会一直重启),并且设置堆栈(调用c函数之前必须设置堆栈)。   b:Makefile文件。它是进行编译链接生成可执行文件。   c:blink.c文件。实现主要功能,使led灯实现流水的效果 4、GPIO主要操作两个寄存器GPXCON和GPXDAT。前者设置引脚的模式(输出、输入、中断等),后者设置引脚的电平。   但是在操作过程中,出现了
[单片机]
(一)s3c2440——<font color='red'>GPIO</font>(流水灯实验)
STM32自学笔记GPIO寄存器
GPIO寄存器一览 以下图片全部摘自STM32中文参考手册 GPIOx- CRL(x=A…E) 这个寄存器主要是设置GPIO的低8位(0~7)端口的配置 MODE 用来设置端口输出的速度 (在输入模式下不需要配置,仅在输出模式下需要配置) CNF 用来设置输入模式或者输出模式 例如 设置PA0为推挽输出速度为50MHz GPIOA- CRL&=0XFFFFFFF0;//PA0配置清零 GPIOA- CRL|=0X00000003;//PA0输出 速度50MHz 设置PA0为上下拉输入(默认下拉) GPIOA- CRL&=0XFFFFFFF0;//PA0配置清零 GPIOA- CRL|=0X00000008
[单片机]
STM32自学笔记<font color='red'>GPIO</font>寄存器
iTOP-4412 开发板的 GPIO 是怎么操作的?
Exynos4412 所有的 GPIO 都有固定的地址,为了方便操作这些 GPIO,Linux 内核 在 gpio-exynos4.h 里面定义了一些 GPIO 的宏,例如: #define EXYNOS4_GPA0(_nr) (EXYNOS4_GPIO_A0_START + (_nr)) #define EXYNOS4_GPA1(_nr) (EXYNOS4_GPIO_A1_START + (_nr)) #define EXYNOS4_GPB(_nr) (EXYNOS4_GPIO_B_START + (_nr)) ..................................... #define EXYNOS4_G
[单片机]
STM32入门系列-GPIO工作模式及LED电路原理
GPIO工作模式 由于GPIO内部的结构关系,决定了GPIO可配置成以下几种模式。 输入模式 在输入模式时,施密特触发器打开,输出被禁止。可通过输入数据寄存器GPIOx_IDR读取I/O状态。输入模式可以配置为模拟、上拉、下拉以及浮空模式。上拉和下拉输入很好理解,默认的电平由上拉或者下拉决定。浮空输入的电平是不确定的,完全由外部的输入决定,一般接按键的时候可以使用这个模式。模拟输入则用于 ADC 采集。 输出模式(推挽/开漏) 在输出模式中,推挽模式时双MOS管以推挽方式工作,输出数据寄存器GPIOx_ODR可控制I/O输出高低电平。开漏模式时,只有N-MOS管工作,输出数据寄存器可控制I/O输出高阻态或低电平。输出速
[单片机]
STM32F4工程--IO口--GPIO工作模式详解
一、基础知识 1、STM32F429IGT6 ①一共有9组IO: PA~PI ②其中PA~PH 每组16个IO PI只有PI0~PI11 ③一共有140个IO口: 16*8+12=140 2、工作模式 四种输入模式:输入浮空、输入上拉、输入下拉、模拟输入 ; 四种输出模式:开漏输出(带上拉或者下拉)、开漏复用功能(带上拉或者下拉)、推挽式输出(带上拉或者下拉)、推挽式复用功能(带上拉或者下拉); 四种最大输出速度: -2MHZ低速、-25MHz中速、 -50MHz快速、-100MHz 高速。 3、IO口可以容忍5V电压。 二、GPIO的8种工作模式 1、浮空输入模式 ①信号由外部输入到引脚。 ②首先遇到上拉下拉电阻,这个
[单片机]
STM32F4工程--IO口--<font color='red'>GPIO</font>工作模式详解
【ARM】ARM体系结构-GPIO
GPIO Gerneral-Purpose IO ports,即通用IO口。   在嵌入式系统中常常有数量众多,但是却比较简单的外部设备/电路。   对这些设备/电路,有的需要CPU为之提供控制手段,有的则需要被CPU用做输入信号。   许多这样的设备/电路只要求一位,即只要有开/关两种状态就够了,比如控制某个LED灯亮与灭;或者通过获取某个管脚的电平属性来达到判断外围设备的状态。   对这些设备/电路的控制,使用传统的串行口或并行口都不合适,所以在微控制器芯片上一般都会提供一个“通用可编程IO接口”,即GPIO。 接口至少有两个寄存器,即“通用IO控制寄存器”与“通用IO数据寄存器”。 数据寄存器的各
[单片机]
STM32 PWM功能在关闭时GPIO电平不确定的情况
  刚开始接触STM32,遇到一个项目中出现在产品调试中出现在关闭PWM输出时,GPIO电平有不确定的情况。在网上查阅资料发现大神们是这样解释的:PWM在一个脉冲没有结束时关闭输出,会导致GPIO电平不确定。   解决方法:1、在关闭PWM输出时随即将相应GPIO强制为低(这个高/低看各人的需要)   tiM_Cmd(TIM3 ,DISABLE);//关闭PWM输出   TIM_ForcedOC1Config(TIM3, TIM_ForcedAction_InActive);//将PWM输出强制为低   2、在下次打开PWM时使用下面的函数   /*因前面使用PWM强制输出为低,此处需要重新打开PWM输出*/   TI
[单片机]
STM32 GPIO的十大优越功能综述
下面我就在做个抛砖引玉,根据ST手册上的内容,简单地综述一下GPIO的功能: 一、共有8种模式,可以通过编程选择: 1. 浮空输入 2. 带上拉输入 3. 带下拉输入 4. 模拟输入 5. 开漏输出 (此模式可实现hotpower说的真双向IO) 6. 推挽输出 7. 复用功能的推挽输出 8. 复用功能的开漏输出 模式7和模式8需根据具体的复用功能决定。 二、专门的寄存器(GPIOx_BSRR和GPIOx_BRR)实现对GPIO口的原子操作,即回避了设置或清除I/O端口时的 读-修改-写 操作,使得设置或清除I/O端口的操作不会被中断处理打断而造成误动作。 三、每个GPIO口都可以作为外
[单片机]
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

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

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