1、http:/ Cygnal公司生产的 C8051F02X系列单片机的外部存储器接口、I/O端口配置方法和有关注意的问题;在此基础上列举两个关于 EMIF、I/O 的配置应用。关键词:C8051F02X EMIF I/O 交叉开关美国 Cygnal公司 C8051F02X系列单片机是集成在一起芯片上的混合信号系统级单片机。该单片机具有 32/64位数字 I/O端口(引脚)、25MIPS 高速流水线式 8051微控制器内核、64KB 在系统可编程 Flash存储器、64KB 地址的外部存储器接口、4352(4096+256)B 片内 RAM、各自独立的 SPI、SMBUS/I2C 和两个 UART
2、串行接口等特点。其最突出的优点就是,通过设置交叉开关寄存器控制片内数字资源映射到外部 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可以只映射在片内,也可以映
3、射在 64KB外部数据存储器地址空间,还可以同时映射到片内和片外(4KB 地址以内在片内存储器空间访问,4KB 以上经过 EMIF访问)三种方式。对于后两种存储器工作模式,需通过外部存储器接口使用 MOVX和 DPTR或 MOVX和 R0(R1)指令访问外部数据存储器和存储器映像的 I/O设备。但是对于高 8位地址,必须由外部存储器接口寄存器(EMI0CN)提供;而 EMIF可将外部数据存储器接口映射到低端口(P0P3)(F020/2/3 系列)或高端口(P4P7)(F020/2 系列),以及配置为复用模式或非复用模式等。配置外部存储器接口的步骤下:*设置 EMIF为低端口或高端口;*设置 E
4、MIF为复用模式或非复用模式;*选择存储器模式(片内方式、无块选择分片方式、带块选择分片方式、片外方式);*设置片外存储器或片外设备时基;*选择相关 I/O端口(寄存器 PnMOUT、P74OUT)的输出模式。外部存储器接口(EMI)映射为低端口(P0P3)即 PRTSEL位(EMIOCH.5)置为 0,如 PRTSEL位置为 1,EMI 映射为高端口(P4P7)(适用于 P020/2系列)。此时如果 EMIFLE位(XBR2.5)被设置为逻辑 1,那么,数字交叉开关将不分配外部设备给 P0.7(WR)、P0.6(RD)、P0.5(ALE)引脚(如果 EMI设置为多中模式);如果 EMIFLE
5、位设为 0,那么 P0.7、P0.6、P0.5 引脚的功能将由交叉开关寄存器或端口锁存器来决定。外部存储器接口只有执行片外 MOVX指令期间使用相关的端口引脚,一旦 MOVX指令执行完毕,端口锁存器或交叉开关寄存器又重新恢复对端口引脚的控制。1.2 I/O端口配置数字交叉开关译码器按照被使用设备的优先权顺序将端口 P0P7 的引脚分配给外部数字外设。端口引脚的分配是从 P0.0开始,没有被使用的引脚可作为一般通用的 I/O引脚,通过读写相应的端口数据寄存器访问。在数字交叉开关寄存器XBR0、XBR1、XBR2 中将相应的内部数字资源使能位置 1,数字资源就映射到 I/O端口引脚。例如:将 UA
6、RT0EN位(XBR0.2)置为 1,那么,TX0 和 RX0引脚被分别映射到 P0.0和 P0.1。因为 UART0具有最高的优先权,故在它的使能位置 1时,TX0 和RX0引脚总是被映射到 P0.0和 P0.1。如果一个数字外设的使能位没有置 1,它的端口的 I/O引脚上是不能被访问的。数字交叉开关寄存器被正确配置以后,通过置XBARE(XBR2.4)位 1来使能交叉开关。在交叉开关使能后。P0P3(F020/1/2/3系列)或 P0P7(F020/2 系列)输出驱动自动被禁止,从而避免了交叉开关寄存器和其它寄存器写入时在端口引脚上产生的冲突。注意:对于由交叉开关分配的输入引脚(如 T0、
7、INT0、RX0 等),其输出驱动自动被禁止,因此,端口数据寄存器和PnMDOUT寄存器的值对这些引脚的状态没有影响。在给单片机内部数字资源分配了相应的 I/O引脚后,还应设置其输出方式:推挽和漏极开路。PnMDOUT 寄存器各位决定 P0P7 端口引脚的输出方式,某一位置1,则该位为推挽输出方式;置 0,为漏极开路输出方式。PnMDOUT 寄存器控制端口引脚的输出方式,而与交叉开关是否把端口引脚分配给数字外设无关。注意:对于由交叉开关分配的输入引脚(如:SDA、SCL、RX0、RX1 等)自动配置为漏极开路方式,而与相应的端口配置寄存器的设置无关。但对于一般的 I/O引脚配置为输入时,与这一
8、引脚相关的 PnMDOUT设置为漏极开路,同时端口配置寄存器位必须清 0。尽管在 C8051F021/3中 P4、P5、P6 和 P7没有对应的引脚,但端口数据寄存器仍然存在,并可为软件所用。由于数字输入通路保持活动状态,所以建议不要将这些引脚处于“悬空”状态,避免因输入浮空为无效逻辑电平而导致不必要的功率消耗。下面的三种方法可以防止这种情况的发生:通过将 WEAKPUD(XBR2.7)设置为逻辑 0来使能弱上拉部件;通过写 P74OUT=0xFF,将 P4、P5、P6 和 P7的输出方式配置为推挽方式;通过向端口数据寄存器写 0,将 P4、P5、P6 和 P7的输出状态强制为逻辑 0,即 P
9、4=0x00、P5=0x00、P6=0x00、P7=0x00。2 EMIF和 I/O端口配置应用下面应用基于 C8051F021/3单片机,也适应于 C8051F020/2单片机。*假设有一应用需要配置 UART0、SMBus、UART1、INT0 和 INT1(8 位),存储器的工作模式为片内方式;另外,P1 端口作为 44键盘的接口,P2、P3 口作为通用的 I/O端口。该应用的 EMIF和 I/O端口配置如下:设 EMI的配置寄存器 FMI0CF=0x00,因为本应用无扩展存储器和存储器映像的 I/O设备,即存储器工作模式为片内方式;同时,将 EMIFLE(XBR2.5)设置为0,这样
10、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.0P1.3 为推挽方式,P1.4P1.7 为漏极开路方式),P1|=0xF0。使能交叉开关,即 XBARE=1、XBR2=0x44。因为 EMIFLE=0,交叉开关
11、译码器将不跳过 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是由交叉开关分配输入的,因此与其
12、端口配置寄存器的值无关。P2、P3 作为一般 I/O端口初始化为输入状态,即 P2MDOUT=0x00、P2=0xFF 和P3MDOUT=0x00、P3=0xFF。引脚功能如表 1所列。表 1*设现有一应用需要 UART0、SMBus、UART1、INT0 和 INT1共 8位。另外,存储器工作方式为带块选择的分片方式,EMIF 为复用模式、低端口,并配置P1.2、P1.3、P1.4 为模拟输入模式,通过这三个引脚利用 ADC1来测量输入电压。具体配置步骤如下:引脚 P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 P1 P2 P3功能 TX0 RX0 SDA C
13、L TX1 RX1 INT0 INT1键盘通用通用配置 EMI为复用模式和工作在低端口,即 PRTSEL=0,EMD2=0;存储器模式为带块选择的分片方式,即 EMD10=10;ALE 时基设为 2个 SYSCLK周期,即EALE10=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。使能交叉
14、开关,即 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引脚。在执行
15、片外 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 P2P3脚 0 1 2 3 4 5 6 7 0 124567功能TX0RX0SDASCLTX1ALERDWRRX1INT0模拟输入INT1通用复用高地址复用低地址/数据3 总结C8051F02X具有低功耗(3V 工作电压)、大容量存储器、高速度、高集成度等特点,广泛应用于工业控制、测量系统、报警系统。该单片机具有双串行口,更适合于定位和报警系统的前端,从而提高移动终端集成度和降低功耗。