我一直在查看Microchip PIC16LF15344
数据手册中的外围引脚选择,或者我阅读不正确,或者文档中似乎有错误和不一致。我想知道是否有人使用过该设备,并且可以确认我的解释。
我正在尝试为PIC16LF15344
编写代码以利用I2C
接口。我已经成功地为I2C
编写了PIC16LF1822
代码,但是到目前为止,我仍然无法在PIC16LF15344
上使用此代码,并且在文档中有一些令人困惑的文档我想清除的数据表。
这里是对datasheet的引用。
对pinout
的{{1}}描述表明,可以将PIC16LF15344
函数分配给I2C SDA
或RC1
。同样,RB6
可以分配给I2C SCL
或RC0
。但是RB4
中有一个注释如下。
Section 15.3 Bidirectional Pins
和I2C SCLx
函数可以通过SDAx
重新映射。但是,只有PPS
,RB1
,RB2
和RC3
品脱才实现了RC4
和I2C
特定的输入缓冲区({{1 }}模式会禁用SMBus
并设置特定于I2C
的阈值。如果将INLVL
或I2C
功能映射到其他某个引脚(SCLx
,SDAx
,RB1
或RB2
以外的其他引脚),则将使用通用RC3
或RC4
输入缓冲区(基于TTL
寄存器设置进行配置)代替。因此,在大多数应用中,建议仅将ST
和INLVL
引脚功能映射到SCLx
,SDAx
,RB1
或RB2
针。
问题不仅在于注释看起来与引脚分配表中的描述冲突,而且还引用了引脚RC3
和RC4
,它们没有出现在引脚分配表中的任何位置,即,对于此RB1
,它们似乎不存在。我看到类似的脚注引用了RB2
和PIC
,但是在文档或表格的正文中没有任何记录。
当然这一定是文档错误,但是我无法在RB1
数据表上找到当前的勘误表来更正此错误。我读对了吗?
我尝试使用RB2
将PIC16LF15324/44
和SCL
配置到引脚SDA
和PPS
,因为这是它们在我的{{1 }},但是我仍然无法使用与RC0
所使用的相同软件来使RC1
正常工作。 PCB
和I2C
的{{1}}默认值为PIC16LF1822
和PPS
。这是否意味着我需要使用EUSART TX2
和RX2
将RC0
分配移动到其他位置,然后再使用RC1
和TX2CKPPS
分配RX2DTPPS
和{ {1}}到EUSART
和SSP1CLKPPS
?
我将调查SSP1DATPPS
的其他潜在问题,但是我想弄清楚这个问题,然后再提交另一个SCL
用于工厂。无论如何,我还是需要进行一些更改,所以我可能只需要在下一个版本中将SDA
和RC0
连接到它们的RC1
默认值,然后再试一次。
这是初始化代码:
PCB
答案 0 :(得分:3)
您可能要处理几个问题。
所有默认的I2C
引脚也都具有模拟功能。确保将与ANSB
引脚关联的ANSC
或I2C
位设置为数字操作。
上电复位为I2C
输入引脚分配选择数据手册默认值,而I2C
输出默认未分配给任何GPIO
引脚。您需要将I2C
和SCL
的{{1}}输出放置在正确的SDA
映射寄存器中。
请注意,无论使用PPS
主控还是从属实现,输入和输出功能都应映射到同一引脚。
这将有助于编辑问题并发布用于初始化I2C
引脚和I2C
映射寄存器的代码。
PPS
PPS已正确设置,但我不知道I2C初始化代码是否正确。