交叉开关的使用说明

来自丢石头百科
<tbody></tbody>

以C8051F320为例,优先权交叉开关(如下图)为每个I/O功能分配优先权,从优先权最高的UART0开始。当一个数字资源被选择时,尚未分配的端口引脚中的最低位被分配给该资源(UART0总是使用引脚4和5)。如果一个端口引脚已经被分配,则交叉开关在为下一个被选择的资源分配引脚时将跳过该引脚。此外,交叉开关还将跳过在PnSKIP寄存器中被置'1'的那些位所对应的引脚。PnSKIP寄存器允许软件跳过那些被用作模拟输入、特定功能或GPIO的引脚。

注意:如果一个端口引脚被一个外设使用而不经过交叉开关,则该引脚在PnSKIP寄存器中的对应位应被置'1'。这种情况适用于P0.7(如果使用VREF)、P0.3和/或P0.2(如果外部振荡器电路被使能)、P0.6(如果ADC被配置为使用外部转换启动信号CNVSTR)和任何被选择为ADC或比较器输入的引脚。交叉开关跳过那些已经被分配的引脚,移向下一个未被分配的引脚。图一列出了没有引脚被跳过(P0SKIP, P1SKIP, P2SKIP = 0x00)的优先权交叉开关译码表;图二列出了XTAL1(P0.2)脚和XTAL2(P0.3)脚被跳过情况下(P0SKIP = 0x0C)的交叉开关优先权译码表。<tbody></tbody>
C8051F 1 10.jpg图一:晶振端口未被跳过
<tbody></tbody>
C8051F 1 11.jpg图二:晶振端口未被跳过

交叉开关配置的优先列表如下 C8051F 1 12.jpg

下面将举例说明其运用方法: A先生使用外部晶振同时使用SPI,原本SPI的MOSI与NSS位是在P0.2与P0.3但由于A先生使用外部晶振,而外部晶振是固定在P0.2与P0.3,因此SPI的MOSI与NSS位只能往后推移,由图二可得,最近的位置为P0.4与P0.5。在配置完成后各功能所对应的引脚为,SPI:SCK→P0.0,MISO→P0.1,MOSI→P0.4,NSS→P0.5;晶振位:XTAL1→P0.2,XTAL2→P0.3

代码如下:  /***外部12M晶振设置***/ unsigned char i; P0SKIP |= 0x0C; P0MDIN &= ~0x0C; OSCXCN |= 0x67; for(i=0;i<255;i++); //Wait 1ms for initialization while((OSCXCN & 0x80) == 0); CLKSEL |= 0x01; OSCICN = 0x00;

/***SPI初始化设置***/ XBR0 |= 0x02; P0SKIP |= 0x80; P0MDOUT |= 0x31; SPI0CFG = 0x40; SPI0CN = 0x01; SPI0CKR = 0x05; 注:若需要了解更多型号的信息,请查看各型号的 PDF