试图了解I2C的Microchip PIC16LF15344外设引脚选择

时间:2019-01-03 03:33:25

标签: c embedded microcontroller pic microchip

我一直在查看Microchip PIC16LF15344数据手册中的外围引脚选择,或者我阅读不正确,或者文档中似乎有错误和不一致。我想知道是否有人使用过该设备,并且可以确认我的解释。

我正在尝试为PIC16LF15344编写代码以利用I2C接口。我已经成功地为I2C编写了PIC16LF1822代码,但是到目前为止,我仍然无法在PIC16LF15344上使用此代码,并且在文档中有一些令人困惑的文档我想清除的数据表。

这里是对datasheet的引用。

pinout的{​​{1}}描述表明,可以将PIC16LF15344函数分配给I2C SDARC1。同样,RB6可以分配给I2C SCLRC0。但是RB4中有一个注释如下。

  

Section 15.3 Bidirectional PinsI2C SCLx函数可以通过SDAx重新映射。但是,只有PPSRB1RB2RC3品脱才实现了RC4I2C特定的输入缓冲区({{1 }}模式会禁用SMBus并设置特定于I2C的阈值。如果将INLVLI2C功能映射到其他某个引脚(SCLxSDAxRB1RB2以外的其他引脚),则将使用通用RC3RC4输入缓冲区(基于TTL寄存器设置进行配置)代替。因此,在大多数应用中,建议仅将STINLVL引脚功能映射到SCLxSDAxRB1RB2针。

问题不仅在于注释看起来与引脚分配表中的描述冲突,而且还引用了引脚RC3RC4,它们没有出现在引脚分配表中的任何位置,即,对于此RB1,它们似乎不存在。我看到类似的脚注引用了RB2PIC,但是在文档或表格的正文中没有任何记录。

当然这一定是文档错误,但是我无法在RB1数据表上找到当前的勘误表来更正此错误。我读对了吗?

我尝试使用RB2PIC16LF15324/44SCL配置到引脚SDAPPS,因为这是它们在我的{{1 }},但是我仍然无法使用与RC0所使用的相同软件来使RC1正常工作。 PCBI2C的{​​{1}}默认值为PIC16LF1822PPS。这是否意味着我需要使用EUSART TX2RX2RC0分配移动到其他位置,然后再使用RC1TX2CKPPS分配RX2DTPPS和{ {1}}到EUSARTSSP1CLKPPS

我将调查SSP1DATPPS的其他潜在问题,但是我想弄清楚这个问题,然后再提交另一个SCL用于工厂。无论如何,我还是需要进行一些更改,所以我可能只需要在下一个版本中将SDARC0连接到它们的RC1默认值,然后再试一次。

这是初始化代码:

PCB

1 个答案:

答案 0 :(得分:3)

您可能要处理几个问题。

所有默认的I2C引脚也都具有模拟功能。确保将与ANSB引脚关联的ANSCI2C位设置为数字操作。

上电复位为I2C输入引脚分配选择数据手册默认值,而I2C输出默认未分配给任何GPIO引脚。您需要将I2CSCL的{​​{1}}输出放置在正确的SDA映射寄存器中。

请注意,无论使用PPS主控还是从属实现,输入和输出功能都应映射到同一引脚。

这将有助于编辑问题并发布用于初始化I2C引脚和I2C映射寄存器的代码。

PPS

PPS已正确设置,但我不知道I2C初始化代码是否正确。