我将通过 SMBus 与某些设备进行通信。我使用 PIC18F26K83,我将使用 RB1 和 RB2 引脚作为 SCL 和 SDA 引脚。我的问题是关于 PPS 映射。在数据表中它说我需要将这两个引脚都设置为输入和输出。PPS 输出选择很简单,因为“RxyPPS:PIN Rxy 输出源选择寄存器”让我选择引脚、端口和 SDA/SCL。但是,“xxxPPS: PERIPHERAL xxx INPUT SELECTION”寄存器只允许我选择端口和引脚。为了更清楚,让我举个例子:
RB1PPS= 0b00001001; //RB1 input PPS
这条线只让我选择端口和引脚。它说RB1就是输入。另一方面:
RB1PPS= 0b00100011; // RB1= I2C2 (SCL) output.
这条线让我可以选择端口、引脚以及 SCL 输出。它说RB1是输出,但它也是SCL。
在数据表页面:266 PPS 输入寄存器详细信息中,我需要使用一些寄存器值来选择输入作为 SDA 或 SCL。(我添加了数据表)
所以我的问题是:我是否需要像选择输出一样选择 SDA 或 SCL 作为输入?哪个代码块看起来更准确?
1)
RB1PPS= 0b00001001; //RB1 input PPS
RB2PPS= 0b00001010; //RB2 input PPS
RB1PPS= 0b00100011; // RB1= I2C2 (SCL) output.
RB2PPS= 0b00100100; //RB2= I2C(SDA) output.
I2C2SCLPPS = 0b00001001; // RB1 I2C2 Clock
I2C2SDAPPS= 0b00001010; // RB2 I2C2 Data
或者
2)
RB1PPS= 0b00001001; //RB1 input PPS
RB2PPS= 0b00001010; //RB2 input PPS
RB1PPS= 0b00100011; // RB1= I2C2 (SCL) output.
RB2PPS= 0b00100100; //RB2= I2C(SDA) output
数据表:PIC18F26K83数据表