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