PIC I2C PPS 配置

PIC I2C PPS configuration

我将通过 SMBus 与某些设备通信。我使用 PIC18F26K83,我将使用 RB1 和 RB2 引脚作为 SCL 和 SDA 引脚。我的问题是关于 PPS 映射。在数据表中它说我需要将这两个引脚都设置为输入和输出。作为 PPS 输出选择,它很简单,因为“RxyPPS: PIN Rxy OUTPUT SOURCE SELECTION REGISTER”让我选择 pin、port 和 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

数据表:Datasheet of PIC18F26K83

试试这个

/* Unlock PPS */

PPSLOCK = 0x55;
PPSLOCK = 0xAA;
PPSLOCKbits.PPSLOCKED = 0x00;


/* Setting of PPS */

/* RB1 <-> SCL2 */
RB1PPSbits.RB1PPS = 0x23;
I2C2SCLPPS  = 0x09;  

/* RB2 <-> SDA2 */    
RB2PPSbits.RB2PPS = 0x24;
I2C2SDAPPS = 0x0A;

/* Lock PPS */

PPSLOCK = 0x55;
PPSLOCK = 0xAA;
PPSLOCKbits.PPSLOCKED = 0x01;