15.1 优先权交叉开关译码器 优先权交叉开关译码器(图15.3)为每个I/O功能分配优先权,从优先权最高的UART0开始。
当一个数字资源被选择时,尚未分配的端口引脚中的最低位被分配给该资源(UART0总是使用
引脚4和5)。如果一个端口引脚已经被分配,则交叉开关在为下一个被选择的资源分配引脚
时将跳过该引脚。此外,交叉开关还将跳过在PnSKIP寄存器中被置‘1’的那些位所对应的引
脚。PnSKIP寄存器允许软件跳过那些被用作模拟输入、特定功能或GPIO的引脚。 注意:如果一个端口引脚被一个外设使用而不经过交叉开关,则该引脚在PnSKIP寄存器中的
对应位应被置‘1’。这种情况适用于VREF信号、外部振荡器引脚(XTAL1、XTAL2)、ADC的
外部转换启动信号(CNVSTR)、EMIF控制信号和任何被选择为ADC或比较器输入的引脚。
PnSKIP寄存器也可以用于跳过被用作GPIO的引脚。交叉开关跳过那些所选择的引脚(如同这
些引脚已经被交叉开关分配),移向下一个未被分配的引脚。图15.3示出没有引脚被跳过的
优先权交叉开关译码表;图15.4给出了P0.2和P0.3被跳过情况下(P0SKIP = 0x0C)的交叉开
关优先权译码表。
寄存器XBR0、XBR1和XBR2用于为数字I/O资源分配物理I/O引脚。注意,当SMBus被选择时,交
叉开关将为其分配两个引脚(SDA和SCL)。当UART被选择时,交叉开关也为其分配两个引脚
(TX和RX)。UART0的引脚分配是固定的(这是出于引导装载的目的): UART的TX0总是被分
配到P0.4;UART的RX0总是被分配到P0.5。在优先功能被分配之后,标准端口I/O是连续的。 注意:SPI可以工作在三线或四线方式,取决于SPI0CN寄存器中NSSMD1-NSSMD0位的状态。根
据SPI方式不同,NSS信号可以连到端口引脚,也可以不连到端口引脚。
15.2 端口I/O初始化 端口I/O初始化包括以下步骤: 1. 用端口输入方式寄存器(PnMDIN)选择所有端口引脚的输入方式(模拟或数字)。 2. 用端口输出方式寄存器(PnMDOUT)选择所有端口引脚的输出方式(漏极开路或推挽)。 3. 用端口跳过寄存器(PnSKIP)选择应被交叉开关跳过的那些引脚。 4. 将引脚分配给要使用的外设(XBR0、XBR1、XBR2)。 5. 使能交叉开关(XBARE = 1)。 所有端口引脚都必须被配置为模拟或数字输入。被用作比较器或ADC输入的任何引脚都应被配
置为模拟输入。当一个引脚被配置为模拟输入时,它的弱上拉、数字驱动器和数字接收器都
被禁止,这可以节省功耗并减小模拟输入的噪声。被配置为数字输入的引脚可以被模拟外设
使用,但不建议这样做。要将一个端口引脚配置为数字输入,向PnMDOUT寄存器中的对应位写
‘0’,并向对应的端口锁存器(寄存器Pn)写‘1’。 此外,应将交叉开关配置为跳过所有被用作模拟输入的引脚(通过将PnSKIP寄存器中的对应
位置‘1’来实现)。端口输入方式在PnMDIN寄存器中设置,其中‘1’表示数字输入,‘0’
表示模拟输入。复位后所有引脚的缺省设置都是数字输入。 I/O引脚的输出驱动器特性由端口输出方式寄存器PnMDOUT决定,每个端口输出驱动器都可被
配置为漏极开路或推挽方式。不管交叉开关是否将端口引脚分配给某个数字外设,都需要对
端口驱动器的输出方式进行设置。唯一的例外是SMBus引脚(SDA,SCL),不管PnMDOUT的设
置如何,这两个引脚总是被配置为漏极开路。 当XBR1寄存器中的WEAKPUD位为‘0’时,输出方式为漏极开路的那些引脚的弱上 拉被使能。WEAKPUD不影响被配置为推挽方式的端口I/O。当漏极开路输出被驱动为逻辑‘0’
时,弱上拉被自动关断(禁止)以避免不必要的功率消耗。 寄存器XBR0和XBR1必须被装入正确的值以选择所需要的数字I/O功能。置‘1’XBR1中的XBARE
位将使能交叉开关。不管XBRn寄存器的设置如何,在交叉开关被使能之前,外部引脚保持标
准端口I/O方式(输入)。对于给定的XBRn设置,可以使用优先权译码表确定I/O引脚分配;
另一种方法是使用Silicon Labs IDE软件的配置向导功能来确定基于XBRn寄存器设置的端口
I/O引脚分配。 注意:为使端口P0、P1、P2和P3工作在标准端口I/O输出方式,交叉开关必须被使能。当交叉
开关被禁止时,端口输出驱动器被禁止。端口4总是作为标准GPIO使用。
SFR定义15.1 XBR0:端口I/O交叉开关寄存器0 R/W R/W R/W R/W R/W R/W R/W R/W 复位值 CP1AE CP1E CP0AE CP0E SYSCKE SMB0E SPI0E URT0E 00000000
位7: CP1AE:比较器1异步输出使能位 0:CP1A不连到端口引脚。 1:CP1A连到端口引脚。 位6: CP1E:比较器1输出使能位 0:CP1不连到端口引脚。 1:CP1连到端口引脚。 位5: CP0AE:比较器0异步输出使能位 0:CP0A不连到端口引脚。 1:CP0A连到端口引脚。 位4: CP0E:比较器0输出使能位 0:CP0不连到端口引脚。 1:CP0连到端口引脚。 位3: SYSCKE:/SYSCLK输出使能位 0:/SYSCLK不连到端口引脚; 1:/SYSCLK连到端口引脚。 位2: SMB0E:SMBus I/O使能位 0:SMBus I/O不连到端口引脚。 1:SMBus I/O连到端口引脚。 位1: SPI0E:SPI I/O使能位 0:SPI I/O不连到端口引脚。 1:SPI I/O连到端口引脚。 位0: URT0E:UART I/O使能位 0:UART I/O不连到端口引脚。 1:UART TX0, RX0连到端口引脚P0.4和P0.5。
SFR定义15.2 XBR1:端口I/O交叉开关寄存器1 R/W R/W R/W R/W R/W R/W R/W R/W 复位值 WEAKPUD XBARE T1E T0E ECIE PCA0ME 00000000
位7: WEAKPUD:端口I/O弱上拉禁止位。 0:弱上拉使能(被配置为模拟输入或推挽输出的端口除外)。 1:弱上拉禁止。 位6: XBARE:交叉开关使能位 0:交叉开关禁止。 1:交叉开关使能。 位5: T1E:T1使能位 0:T1不连到端口引脚。 1:T1连到端口引脚。 位4: T0E:T0使能位 0:T0不连到端口引脚。 1:T0连到端口引脚。 位3: ECIE:PCA0外部计数输入使能位 0:ECI不连到端口引脚。 1:ECI连到端口引脚。 位2-0: PCA0ME:PCA模块I/O使能位 000:所有的PCA I/O都不连到端口引脚。 001:CEX0连到端口引脚。 010:CEX0、CEX1连到端口引脚。 011:CEX0、CEX1、CEX2连到端口引脚。 100:CEX0、CEX1、CEX2、CEX3连到端口引脚。 101:CEX0、CEX1、CEX2、CEX3、CEX4连到端口引脚。 110:保留。 111:保留。
SFR定义15.3 XBR2:端口I/O交叉开关寄存器2 R/W R/W R/W R/W R/W R/W R/W R/W 复位值 URT1E 00000000 位7-1: 保留:总是写0000000b。 位0: URT1E:UART1 I/O输出使能位(仅C8051F340/1/4/5) 0:UART1的I/O不连到端口引脚。 1:UART1的TX1、RX1连到端口引脚。
请教: 问题1: 假设我把 SDL 配置给 P0.6 那么 XBR0,XBR1,XBR2 的值分别为多少呢?
问题2: 假设我把 CEX2 配置给 P1.5 那么 XBR0,XBR1,XBR2 的值分别为多少呢?
问题2: 假设我把 CEX2 配置给 P1.5 那么 XBR0,XBR1,XBR2 的值分别为多少呢?
问题2: 假设我把 T1 配置给 P2.7 那么 XBR0,XBR1,XBR2 的值分别为多少呢?
问题4: 1. 用端口输入方式寄存器(PnMDIN)选择所有端口引脚的输入方式(模拟或数字)。 模拟和数字有什么区别?
谢谢! |