Я буду общаться с некоторым устройством через 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