首先, 要区分数字信号与模拟信号!!!!并且还有是输入还是输出.
其次,大家要知道不论在交叉开关的设置如何,端口I/O引脚的状态总是可以被读到相应的端口锁存器.
即:不管引脚被分配给数字外设还是作为通用I/O端口,总是可以通过读相应的数据寄存器得到I/O端口引脚的状态.
再次
当一个引脚被配置为模拟输入时,它的弱上拉、数字驱动器和数字接收器都被禁止,这可以节省功耗并减小模拟输入的噪声。
当一个引脚被配置为数字输入时,设为漏开,并向端口写‘1’,引脚为高阻,按照I/O结构原理图,初始化有弱上拉。引脚与施密特连接,所以在引脚上的电平状态是可以读进端口寄存器的,而且经过试验验证,5v的逻辑电平也可以分辨出来,但是建议加上拉电阻。不加也可以。
有一个网友:“作为数字输入时,输出方输出特性千差万别,对于输出阻抗高的器件可以不加上拉,对于输出阻抗低的器件就要用上拉电阻,否则无法输出高电平”。
PDF上说“ 交叉开关分配的输入引脚(例如NSS或/INT0)是漏极开路或推挽并不重要, 这些引脚被配置为输入而与相应端口配置寄存器的设置无关。为了将一个通用I/O引脚配置为输入与这一引脚相关的端口配置寄存器位必须被清0。这样即可选择该引脚为漏极开路输出方式另外与该引脚相关的端口位必须被置1这样使该引脚处于高阻态。或在XBR2中的WEAKPUD被清0时弱上拉为高电平,这是端口引脚的复位配置。”
好像可以解释为输入状态!!!
当一个引脚被配置为数字输出时,设为推挽即可,写1,写0就能输出3.3和0v左右电平,而且电流驱动力强,驱动5vTTL电平是可以,因为它的逻辑高的最低门限为2v。但是驱动5vCMOS电平就不行了,5V-cmos电平的逻辑高的最低门限为3.5v,所以此时需要上拉电阻进行拉高电平,并可以将推挽暂时禁止。就是设为漏开。直接由外部上拉电阻驱动。
输入: TTL和CMOS都可以,兼容的。
输出: TTL可以,3.6V以下CMOS可以。3.6V to 5V CMOS加外部上拉电阻到+5V,禁止推挽输出。5V以上 CMOS不能驱动。