首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PIC I2C PPS配置

PIC I2C PPS配置
EN

Stack Overflow用户
提问于 2019-03-29 22:42:20
回答 1查看 372关注 0票数 0

我将通过SMBus与一些设备通信。我使用PIC18F26K83,我将使用RB1和RB2引脚作为SCL和SDA引脚。我的问题是关于PPS映射。在datasheet中,它说我需要将这两个引脚都设置为输入和输出。作为PPS输出选择,它很简单,因为“RxyPPS:管脚接收输出源选择寄存器”让我选择管脚,端口和SDA/SCL。但是,"xxxPPS:外设xxx输入选择“寄存器仅允许我选择端口和引脚。为了更清楚,让我举一个例子:

代码语言:javascript
复制
RB1PPS= 0b00001001; //RB1 input PPS

这行代码只允许我选择port和pin。它说RB1就是输入,仅此而已。另一方面:

代码语言:javascript
复制
RB1PPS= 0b00100011; // RB1= I2C2 (SCL) output.

这一行让我选择port、pin和SCL输出。它说RB1是输出,但它也是SCL。

在datasheet Page: 266 PPS输入寄存器详细信息中,我需要使用一些寄存器值来选择输入作为SDA或SCL。(我添加了数据表)

所以我的问题是:我是否需要像选择输出一样选择SDA或SCL作为输入?哪个代码块看起来更准确?

1)

代码语言:javascript
复制
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)

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-01 13:45:04

尝尝这个

代码语言:javascript
复制
/* 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;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55419879

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档