Etual 的学习笔记 https://bbs.21ic.com/?289322 [收藏] [复制] [RSS]

日志

IO口配置

已有 1157 次阅读2012-1-8 02:32 |个人分类:C8051F单片机|系统分类:单片机

这里的资料是基于SiliconLabs 的官方芯片资料 C8051F34X.pdf


首先设置输入输出状态


PxMDIN   设置端口是模拟输入(0)还是数字输入(1)
PxMDOUT  设置端口是 集电极开路(0)还是 推挽(1)


一般来说,作为按键等数字量输入,应该设置为 “数字输入 + 集电极开路”,CROSSBAR 里面能设置弱上拉电阻这样一来


,就和普通MCS-51的 P1-P3口一致了,需要先写入1才能读IO的状态。


如果作为输出口,应该设置为  “数字口 + 推挽”,对于特殊应用,比如说 I2C 总线(系统是强制设置为集电极开路的)
等需要线与功能的时候,或者 3V-5V 互联的时候就需要集电极开路了,靠上拉电阻输出高电平。另外,普通MCS-51的输出


其实就是集电极开路+上拉电阻实现的。


可见C8051F为了兼容51,将IO口设置得有点复杂,并没有一般MCU的方向寄存器设置输入输出那么简便,但是最后能实现同


样的功能,所以,影响是不大的。


最后设置CROSSBAR。这个东东看起来有点悬。其实就是使能内部的数字口,通过 XBR0 和 XBR1 设置系统使用到的数字功能


,例如 I2C ,SPI,UART 等,则系统会自动从 P0.0 口开始分配,怎么分配呢?就是按照优先级,看datasheet的 P144 里


面有图例和2个例子,


P口的分配从P0.0 --> P3.7 顺序
数字功能从 TX0 , RX0 --> T0 T1 TX1 RX1 从上往下。


例如 P145 的图 15.4 ,XBR0 = 0X07, XBR1 = 0X43 得知,他想开启 UART, SPI , I2C  和 CEX 功能,因为 UART0 是


固定的必须分配在 P0.4 和 P0.5 的,所以先分配了这个,因为优先级最高,然后从 P0.0 开始分配, SPI 总线最多是 4


线模式,而且SPI的优先级仅次于UART0的,所以 SPI 和 P0.0-P0.4 就绑定了。然后分配I2C,因为P0.4 0.5已经被UART0绑


定了,于是继续往下找,得到 P0.6 P0.7 就与I2C总线绑定了。而对于TQFP48封装来说,P0.6 P0.7 是作为外部晶振输入引


脚,这会不会冲突呢?怎么办?这个是下一个例子解决的问题,这里先不管。最后分配 CEX0 -CEX2 则顺序推下去使用


P1.0 和 P1.2 了。


接着分析图 15.5,上面说了,如果系统使用外部晶振,那不是冲突了么?还有,如果一些引脚我不想让他分配在那里,想


换个引脚,行不行?这是没问题,虽然不是完全自由的分配,但是还是能一定程度上解决问题的。解决办法就是用 PxSKIP


功能,skip 就是跳过的意思,就是让系统跳过分配。看图 15.5,XBR0 XBR1 的值和上一个例子相同,但是启动了skip,如


图蓝色的表示引脚 P0.2 P0.3 P1.0 被skip,也就是跳过了。UART0 是固定分配的,那个不会变,那么看SPI,分配了 P0.0


和 P0.1 后,遇到了skip引脚,则顺序往下找,第一个满足要求的是 P0.6于是,从P0.6开始继续按照顺序分配,I2C 总线


则根据上面的规则分配到 P1.1 P1.2 了,其他也相同。


Etual
2012-1-8


路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)