This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F28P650DK:使用 SysConfig 设置 I2CB 时出现问题

Guru**** 2024750 points
Other Parts Discussed in Thread: SYSCONFIG, C2000WARE
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1406832/tms320f28p650dk-problem-using-sysconfig-to-setup-i2cb

器件型号:TMS320F28P650DK
主题中讨论的其他器件:SysConfigC2000WARE

工具与软件:

尊敬的论坛:

我们正在新的定制设计中使用 TMS320F28P650DK9、我现在正在测试第一个原型硬件。 我将使用 SysConfig 构建一个基本应用程序以逐位测试硬件、但我在使 I2CB 外设正常运行方面遇到了一些挑战。 使用 SysConfig 设置 I2CB (用于 SDA 频带 SCLB 的 GPIO40和 GPIO41引脚)、上电后、28P650DK 似乎一直下拉这两个引脚。 如果我将这些引脚配置为 GPIO、就能够按预期切换这些引脚。

我从使用 SysConfig 将 I2CB 设置为改用我自己的代码、这样通信便可以按预期运行。

在详细了解我的代码与 SysConfig 生成的代码之间的差异后、两者之间的唯一区别是 SysConfig 代码将引脚设置为开漏并启用上拉、而我的手动代码仅将引脚指定为启用上拉。 将 SysConfig 生成的代码复制到我自己的代码块中、允许将开漏配置作为单个项目更改、从而导致 I2CB 总线正常工作或 I2CB 总线无法正常工作(SDA 和 SCL 都保持低电平)。 下面是两个代码块:-

工作 I2CB 代码块:-

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void I2CB_Init(void)
{
GPIO_setPinConfig(GPIO_40_I2CB_SDA);
GPIO_setPadConfig(40, GPIO_PIN_TYPE_PULLUP);
GPIO_setQualificationMode(40, GPIO_QUAL_ASYNC);
//
// Configuration for the I2CB SCL Pin
//
GPIO_setPinConfig(GPIO_41_I2CB_SCL);
GPIO_setPadConfig(41, GPIO_PIN_TYPE_PULLUP);
GPIO_setQualificationMode(41, GPIO_QUAL_ASYNC);
I2C_disableModule(TMP75C_BASE);
I2C_initController(TMP75C_BASE, DEVICE_SYSCLK_FREQ, 400000, I2C_DUTYCYCLE_50);
I2C_setConfig(TMP75C_BASE, I2C_CONTROLLER_SEND_MODE);
I2C_disableLoopback(TMP75C_BASE);
I2C_setOwnAddress(TMP75C_BASE, 0x0);
I2C_setTargetAddress(TMP75C_BASE, 0x4F);
I2C_setBitCount(TMP75C_BASE,I2C_BITCOUNT_8);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

不工作的 I2CB 代码块、本质上是 SysConfig 生成的代码:-

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void I2CB_Init(void)
{
GPIO_setPinConfig(GPIO_40_I2CB_SDA);
GPIO_setPadConfig(40, GPIO_PIN_TYPE_PULLUP|GPIO_PIN_TYPE_OD);
GPIO_setQualificationMode(40, GPIO_QUAL_ASYNC);
//
// Configuration for the I2CB SCL Pin
//
GPIO_setPinConfig(GPIO_41_I2CB_SCL);
GPIO_setPadConfig(41, GPIO_PIN_TYPE_PULLUP|GPIO_PIN_TYPE_OD);
GPIO_setQualificationMode(41, GPIO_QUAL_ASYNC);
I2C_disableModule(TMP75C_BASE);
I2C_initController(TMP75C_BASE, DEVICE_SYSCLK_FREQ, 400000, I2C_DUTYCYCLE_50);
I2C_setConfig(TMP75C_BASE, I2C_CONTROLLER_SEND_MODE);
I2C_disableLoopback(TMP75C_BASE);
I2C_setOwnAddress(TMP75C_BASE, 0x0);
I2C_setTargetAddress(TMP75C_BASE, 0x4F);
I2C_setBitCount(TMP75C_BASE,I2C_BITCOUNT_8);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

 您可以看到、非工作代码指定了具有 OD 选项的 GPIOsetPadConfig、而工作代码不包含此选项。  

问题是、我在 I2CB 的 SysConfig 设置中看不到允许我关闭 OD 配置的选项。 此外、我们无论如何都想指定 OD 操作、这似乎合乎逻辑、但如果我们这样做、这似乎会停止 I2CB 正常运行、并且 SCL 和 SDA 都保持低电平。

我在这里遗漏了什么?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    关于这一主题的专家目前不在办公室,直到星期二9/3,所以请期待一个延迟的答复。 对此造成的不便、我深表歉意。

    此致、
    Delaney

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Iain:

    这似乎是 SysConfig 代码生成的问题、因为需要在已确定后删除开漏。 我已经对此进行了记录、并将在下一个 C2000Ware 版本中修复此问题。 由此给您带来的不便、我深表歉意。

    此致、

    Aishwarya.