C8051F02X外部存储器接口和I/O端口配置

发布者:JoyfulSpirit5最新更新时间:2012-02-09 来源: 单片机与嵌入式系统应用 关键字:C8051F02X  EMIF  交叉开关 手机看文章 扫描二维码
随时随地手机看文章

美国Cygnal公司C8051F02X系列单片机是集成在一起芯片上的混合信号系统级单片机。该单片机具有32/64位数字I/O端口(引脚)、 25MIPS高速流水线式8051微控制器内核、64KB在系统可编程Flash存储器、 64KB地址的外部存储器接口、4352(4096+256)B片内RAM、各自独立的SPI、SMBUS/I2C和两个UART串行接口等特点。其最突出的优点就是,通过设置交叉开关寄存器控制片内数字资源映射到外部I/O引脚,这就允许用户根据自己的特定应用,选择通用I/O端口和所需要数字资源。当然,在设置数字交叉开关寄存器时,应该首先考虑EMIF的配置问题。其配置不同,将导致单片机通过不同的端口(低或高)访问片外存储器和存储器映像的 I/O部件,以及数字交叉开关是否分配外部设备给P0.7(WR)、P0.6(RD)、P0.5(ALE)引脚。(如图EMIF设置为多路器模式。)

1 EMIF和I/O配置方法

1.1 外部存储器接口(EMIF)配置

C8051F02X系列MCU有4KB的RAM可以只映射在片内,也可以映射在64KB外部数据存储器地址空间,还可以同时映射到片内和片外(4KB地址以内在片内存储器空间访问,4KB以上经过EMIF访问)三种方式。对于后两种存储器工作模式,需通过外部存储器接口使用MOVX和DPTR 或MOVX和R0(R1)指令访问外部数据存储器和存储器映像的I/O设备。但是对于高8位地址,必须由外部存储器接口寄存器(EMI0CN)提供;而 EMIF可将外部数据存储器接口映射到低端口(P0~P3)(F020/2/3系列)或高端口(P4~P7)(F020/2系列),以及配置为复用模式或非复用模式等。配置外部存储器接口的步骤下:

*设置EMIF为低端口或高端口;

*设置EMIF为复用模式或非复用模式;

*选择存储器模式(片内方式、无块选择分片方式、带块选择分片方式、片外方式);

*设置片外存储器或片外设备时基;

*选择相关I/O端口(寄存器PnMOUT、P74OUT)的输出模式。

外部存储器接口(EMI)映射为低端口(P0~P3)即PRTSEL位(EMIOCH.5)置为0,如PRTSEL位置为1,EMI映射为高端口(P4~P7)(适用于P020/2系列)。此时如果EMIFLE位(XBR2.5)被设置为逻辑1,那么,数字交叉开关将不分配外部设备给 P0.7(WR)、P0.6(RD)、P0.5(ALE)引脚(如果EMI设置为多中模式);如果EMIFLE位设为0,那么P0.7、P0.6、 P0.5引脚的功能将由交叉开关寄存器或端口锁存器来决定。外部存储器接口只有执行片外 MOVX指令期间使用相关的端口引脚,一旦MOVX指令执行完毕,端口锁存器或交叉开关寄存器又重新恢复对端口引脚的控制。

1.2 I/O端口配置

数字交叉开关译码器按照被使用设备的优先权顺序将端口P0~P7的引脚分配给外部数字外设。端口引脚的分配是从P0.0开始,没有被使用的引脚可作为一般通用的I/O引脚,通过读写相应的端口数据寄存器访问。在数字交叉开关寄存器XBR0、 XBR1、XBR2中将相应的内部数字资源使能位置1,数字资源就映射到I/O端口引脚。例如:将UART0EN位(XBR0.2)置为1,那么,TX0 和RX0引脚被分别映射到P0.0和P0.1。因为UART0具有最高的优先权,故在它的使能位置1时,TX0和RX0引脚总是被映射到P0.0和 P0.1。如果一个数字外设的使能位没有置1,它的端口的I/O引脚上是不能被访问的。数字交叉开关寄存器被正确配置以后,通过置XBARE (XBR2.4)位1来使能交叉开关。在交叉开关使能后。P0~P3(F020/1/2/3系列)或P0~P7(F020/2系列)输出驱动自动被禁止,从而避免了交叉开关寄存器和其它寄存器写入时在端口引脚上产生的冲突。注意:对于由交叉开关分配的输入引脚(如T0、INT0、RX0等),其输出驱动自动被禁止,因此,端口数据寄存器和PnMDOUT寄存器的值对这些引脚的状态没有影响。

在给单片机内部数字资源分配了相应的I/O引脚后,还应设置其输出方式:推挽和漏极开路。 PnMDOUT寄存器各位决定P0~P7端口引脚的输出方式,某一位置1,则该位为推挽输出方式;置0,为漏极开路输出方式。PnMDOUT寄存器控制端口引脚的输出方式,而与交叉开关是否把端口引脚分配给数字外设无关。注意:对于由交叉开关分配的输入引脚(如:SDA、SCL、RX0、RX1等)自动配置为漏极开路方式,而与相应的端口配置寄存器的设置无关。但对于一般的I/O引脚配置为输入时,与这一引脚相关的PnMDOUT设置为漏极开路,同时端口配置寄存器位必须清0。

尽管在C8051F021/3中P4、P5、P6和P7没有对应的引脚,但端口数据寄存器仍然存在,并可为软件所用。由于数字输入通路保持活动状态,所以建议不要将这些引脚处于“悬空”状态,避免因输入浮空为无效逻辑电平而导致不必要的功率消耗。下面的三种方法可以防止这种情况的发生:

①通过将WEAKPUD(XBR2.7)设置为逻辑0来使能弱上拉部件;

②通过写P74OUT=0xFF,将P4、P5、P6和P7的输出方式配置为推挽方式;

③通过向端口数据寄存器写0,将P4、P5、P6和P7的输出状态强制为逻辑0,即P4=0x00、P5=0x00、P6=0x00、P7=0x00。[page]

2 EMIF和I/O端口配置应用

下面应用基于C8051F021/3单片机,也适应于C8051F020/2单片机。

*假设有一应用需要配置UART0、SMBus、UART1、INT0和INT1(8位),存储器的工作模式为片内方式;另外,P1端口作为4×4键盘的接口,P2、P3口作为通用的I/O端口。该应用的EMIF和I/O端口配置如下:

①设EMI的配置寄存器FMI0CF=0x00,因为本应用无扩展存储器和存储器映像的I/O设备,即存储器工作模式为片内方式;同时,将EMIFLE(XBR2.5)设置为0,这样P0.7、P0.5的引脚将由交叉开关寄存器或端口锁存器来决定,不被交叉开关跳过。

②按UART0EN=1、UART1EN=1、SMB0EN=1、INT0E=1、INT1E=1和EMIFLE=0,设置XBR0、XBR1、XBR2为XBR0=0x05、XBR1=0x14、XBR2=0x04。

③配置P1端口为数字输入模式,即P1MDIN=0xFF;P1端口低四位为键盘输出,高四位为输入,即P1MDOUT=0x0FH(P1.0~P1.3为推挽方式,P1.4~P1.7为漏极开路方式),P1|=0xF0。

④使能交叉开关,即XBARE=1、XBR2=0x44。

因为EMIFLE=0,交叉开关译码器将不跳过P0.7、P0.6、P0.5引脚,所以按优先极交叉开关译码表进行分配。UART0具有最高优先极,故P0.0分配给TX0,P0.1分配给RX0;SMBus的SDA、SCL分别分配在 P0.2、P0.3引脚;UART1的TX1、RX1分别分配在P0.4、P0.5引脚;INT0分配在P0.6引脚;INT1分配在P0.7引脚。

⑤设置UART0的TX0引脚(TX0、P0.0)、UART1的TX1引脚(TX1,P0.4)为推挽输出方式,即P0MDOUT=0x11。RX0、SDA、SCL、RX1、INT0和INT1是由交叉开关分配输入的,因此与其端口配置寄存器的值无关。

⑥P2、P3作为一般I/O端口初始化为输入状态,即P2MDOUT=0x00、P2=0xFF和P3MDOUT=0x00、P3=0xFF。

引脚功能如表1所列。

表1

引脚 P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 P1 P2 P3
功能 TX0 RX0 SDA CL TX1 RX1 INT0 INT1 键盘 通用 通用

*设现有一应用需要UART0、SMBus、UART1、INT0和INT1共8位。另外,存储器工作方式为带块选择的分片方式,EMIF为复用模式、低端口,并配置P1.2、P1.3、P1.4为模拟输入模式,通过这三个引脚利用ADC1 来测量输入电压。具体配置步骤如下:

①配置EMI为复用模式和工作在低端口,即PRTSEL=0,EMD2=0;存储器模式为带块选择的分片方式,即EMD1~0=10;ALE时基设为2个SYSCLK周期,即EALE1~0=01。

②按UART0EN=1、UART1EN=1、SYB0EN=1、INT0E=1、INT1E和EMIFLE=1,设置XBR0、XBR1、XBR2为XBR0=0x05、XBR1=0x14、XBR2=0x42。

③配置P1端口的P1.2、P1.3、P1.4为模拟输入模式,这些引脚对应的位在P1MDIN寄存器中置为0,即P1MDIN=0xE3。

④使能交叉开关,即XBARE=1、XBR2=0x46。

UART0具有最高优先权,故P0.0分配给TX0,P0.1分配给RX0;依次按照优先极分配表,SMBus的SDA、SCL分配在P0.2、 P0.3引脚;UART1的TX1、RX1分配在P0.4、P1.0引脚。因为EMI工作在低端口且为复用模式,交叉开关译码器将不分配内部数字资源给 P0.7(WR)、P0.6(RD)、P0.5(ALE),所以,RX1按次序分配在P1.0引脚, INT0分配在P1.1引脚。由于P1.2、P1.3、P1.4被配置为模拟输入,交叉开关跳过这些引脚,故INT1分配在P1.5引脚。在执行片外 MOVX指令时,EMI将驱动P2和P3端口。

⑤配置UART0的TX0引脚(TX0,P0.0)、UART1的TX1引脚(TX1,P0.4)、P0.7(WR)、P03.6(RD)、P0.5(ALE)为推挽输出方式,即P0MDOUT=0xF1。

⑥配置EMIF的端口(P2、P3)输出为推挽方式,即P2MDOUT=0xFF和P3MDOUT=0xFF。

⑦通过设置P1MDOUT=0x00(输出为开漏极)和P1=0xFF(P1为高阻状态)来禁止P1.2、P1.3、P1.4三个模拟输入引脚的输出驱动器。

引脚功能如表2所列。

表2

引脚 P0 P1 P2 P3
0 1 2 3 4 5 6 7 0 1 2~4 5 6~7
功能 TX0 RX0 SDA SCL TX1 ALE RD WR RX1 INT0 模拟输入 INT1 通用 复用高地址 复用低地址/数据

3 总结

C8051F02X具有低功耗(3V工作电压)、大容量存储器、高速度、高集成度等特点,广泛应用于工业控制、测量系统、报警系统。该单片机具有双串行口,更适合于定位和报警系统的前端,从而提高移动终端集成度和降低功耗。

关键字:C8051F02X  EMIF  交叉开关 引用地址:C8051F02X外部存储器接口和I/O端口配置

上一篇:盛群新推出HT45F2Y HID Flash MCU
下一篇:MAX813L工作原理及其在51单片机系统抗干扰中的应用

推荐阅读最新更新时间:2024-03-16 12:52

STM32中如何配置片内外设使用的IO端口
STM32的输入输出管脚有下面8种可能的配置: 1. 浮空输入 2. 带上拉输入 3. 带下拉输入 4. 模拟输入 5. 开漏输出 6. 推挽输出 7. 复用功能的推挽输出 8. 复用功能的开漏输出 GPIO_Mode的几种方式: GPIO_Mode_AIN模拟输入 GPIO_Mode_IN_FLOATING浮空输入 GPIO_Mode_IPD下拉输入 GPIO_Mode_IPU上拉输入 GPIO_Mode_Out_OD开漏输出 GPIO_Mode_Out_PP推挽输出 GPIO_Mode_AF_OD复用开漏输出 GPIO_Mode_AF_PP复用推挽输出 对应到外设的输入输出功能有下述三种情况: 一、外设对应的管脚为输出
[单片机]
MSP430F149-利用IO中断方式实现按键检测程序
#include msp430x14x.h #define key1 0x01 #define key2 0x02 #define key3 0x04 #define delay_small 200 #define key_1 0xfe //定义返回键值1 #define key_2 0xfd //定义返回键值2 #define key_3 0xfb //定义返回键值3 void key_process_0(void); void key_process_1(void); void key_process_2(void); void key_check (void); unsigned char key_value
[单片机]
89C51单片机I/O口模拟串行通信实现方法
目前普遍采用的MCS51 和P IC 系列单片机通常只有一个(或没有)UART异步串行 通信 接口,在应用系统中若需要多个串行接口(例如在多机通信系统中,主机既要和从机通信又要和终端通信)的情况下,通常的方法是扩展一片8251 或 8250 通用同步/异步接收发送 芯片 (USART),需额外占用单片机I/O 资源。本文介绍一种用单片机普通I/O 口实现串行通信的方法,可在单片机的最小应用系统中实现与两个以上串行接口设备的多机通信。   1.串行接口的基本通信方式 串行接口的有异步和同步两种基本通信方式。异步通信采用用异步传送格式,如图1 所示。数据发送和接收均将起始位和停止位作为开始和结束的标志。在异步通信中,起始位占用
[单片机]
89C51单片机I/O口模拟串行通信实现方法
51单片机之IO口扩展——74HC595芯片串行转并行实验
我们都知道通信从大的方面有两种:串行和并行。串行的最大优点是占用总线少,但是传输速率低;并行恰恰相反,占用总线多,传输速率高。市面上有很多这样的芯片,有串入并出的(通俗讲就是 一个一个进,最后一块出来),有并入串出的(相对前者而言)。具体用哪种类型要根据我们得实际情况。比如利用单片机显示数码管单纯的显示一个数码管如果仅仅是为了显示 那么动用单片机一个端口(如P0或P1/P2/P3)那没有什么,当然这里我说的数码管是8段的(如果利用BCD类型 16进制数码管那么只需四个即可)就拿51类型的单片机来说,总共32个I/O口,一般如果不是做太大的工程是完全够用的,但有些时候你会恨单片机怎么不多长几条“腿”,怎么省还是不够用。这个时候就需要
[单片机]
51单片机之<font color='red'>IO</font>口扩展——74HC595芯片串行转并行实验
串口与普通IO口的区别
General Purpose Input Output (通用输入/输出)简称为GPIO,或总线扩展器,人们利用工业标准I2C、SMBus或SPI接口简化了I/O口的扩展。当微控制器或芯片组没有足够的I/O端口,或当系统需要采用远端串行通信或控制时,GPIO产品能够提供额外的控制和监视功能。 每个GPIO端口可通过软件分别配置成输入或输出。Maxim的GPIO产品线包括8端口至28端口的GPIO,提供推挽式输出或漏极开路输出。提供微型3mm x 3mm QFN封装。 串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方式的扩展接口。串行接口 (Serial Interface) 是指数据一
[单片机]
串口与普通<font color='red'>IO</font>口的区别
哪些IO口能容忍5V?
STM32的部分IO口可以容忍5V,部分IO口只能是3.3V容忍。 到底哪些能够容忍,查看数据手册,引脚标注”FT 的是可以容忍5V的。 比如:STM32F103xCDE_DS_CH_V5.pdf 在我们光盘“8,STM32参考资料STM32中文数据手册 下面 STM32F4的IO电平兼容性问题,STM32F4的绝大部分IO口,都兼容5V, 至于到底哪些是兼容5V的,请看STM32F40x的数据手册(注意是数据手册,不是中文参考手册!!), 见 表:Table 6 STM32F40x pin and ball definitions,凡是有FT/FTf标志的,都是兼容5V电平 的IO口,可以直接接5V的外设 (注意
[单片机]
52单片机IO口输出-蜂鸣器(硬核)
什么是蜂鸣器 蜂鸣器是一种一体化结构的电子讯响器,广泛应用于电子产品中作发声器件,起到警报提醒的作用。 有源蜂鸣器与无源蜂鸣器 这里的“源”不是指电源,而是指震荡源。 有源蜂鸣器内部带震荡源,所以只要异同点就会叫。而无源内部不带震荡源,所以如果用直流信号无法令其鸣叫。需要用2K~5K的方波去驱动它,有源蜂鸣器往往比无源的贵,就是因为里面多个振荡电路。 无源蜂鸣器的优点是: 1.便宜 2.声音频率可控,可以做出音乐里基本七音符的效果 有源蜂鸣器的优点是: 程序控制方便,接通电源就可以工作,程序简单。 三极管的工作原理 什么是三极管: 三极管全称半导体三极管,也称晶体三极管,是一种控制电流的半导体器件其作用是把
[单片机]
52单片机<font color='red'>IO</font>口输出-蜂鸣器(硬核)
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

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

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