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.

[参考译文] TMS320F28388D:将 GPIO 引脚设置为输出时出现问题

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1583174/tms320f28388d-issue-in-setting-gpio-pins-as-output

器件型号: TMS320F28388D

我在 CCS 中编写了一个小代码、让器件在这些引脚 gpio58 gpio59 gpio60 gpio61 gpio62 gpio63 gpio64 gpio65 上发送数据。 这是“flashapi_ex1_programming.c"文件“文件。

flashapi_ex1_programming.c 

我的构建成功。 我已经将引导代码下载到器件。 但是、我看到器件发送所有 FF。

小片段。

void sendbyte (uint32_t _FlashSendData)
  uint32_t _FlashOffset;
  //_FlashOffset =_FlashSendData;   
  while (GPIO_readPin (92));//92 在 DPL 中被拉至低电平。

  //写入数据
  _FlashOffset =(_FlashSendData>7)&1;   
  GPIO_writePin (58、_FlashOffset);

  _FlashOffset =(_FlashSendData>>6)& 1;   
  GPIO_writePin (59、_FlashOffset);

  _FlashOffset =(_FlashSendData>5)&1;   
  GPIO_writePin (60、_FlashOffset);

  _FlashOffset =(_FlashSendData>4)&1;   
  GPIO_writePin (61、_FlashOffset);

  _FlashOffset =(_FlashSendData>>3)& 1;   
  GPIO_writePin (62、_FlashOffset);

  _FlashOffset =(_FlashSendData>2)&1;   
  GPIO_writePin (63、_FlashOffset);

  _FlashOffset =(_FlashSendData>1)&1;   
  GPIO_writePin (64、_FlashOffset);

  _FlashOffset =(_FlashSendData>>0)& 1;   
  GPIO_writePin (65、_FlashOffset);

  

  //写入数据
  //_FlashOffset =((_FlashSendData & 0xFC)>>0x02);
  //GPIO_writePortData (GPIO_PORT_B、_FlashOffset);
  //_FlashOffset =((_FlashSendData 和 0x03)<<0x0E);
  //GPIO_writePortData (GPIO_PORT_C、_FlashOffset);

  GPIO_writePin (91、 0);
  while(!GPIO_readPin (92));//92 在读取发送的数据后在 DPL 中被拉高
  GPIO_writePin (91、 1);
}
 
我在 void main() 内调用 sendbyte()。 握手似乎正常、但接收到的数据始终为 FF。 您能帮我们调试这个问题吗? 谢谢!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好:

    您驱动 8 个数据 GPIO 并立即将 GPIO91 拉至低电平。 在 200MHz C28x 上、这只能进行几十 ns 的设置、在接收器上很容易错过。 我会添加一个较小的建立/保持延迟。 此外、您还将 58…65 初始化为 1、并启用内部上拉电阻。 如果接收器在选通前进行采样、或者线路无法足够强地驱动到低电平、则将读取 0xFF。 对于推挽输出、请使用 GPIO_PIN_TYPE_STD(无拉)、并从 0 开始。

    您说“92 在 DPL 中被拉至低电平“、但您的第一次等待是 while (GPIO_readPin (92));(高电平时等待)。 只有在没有准备就绪时 92 确实保持高位、这才没关系。 确保选通/确认极性与另一侧匹配、并增加超时、以免一直挂起。

    最后、背对背写入 8 个引脚可以正常、但接收器必须仅在所有引脚均有效后进行采样。 选通延迟可解决此问题。 如果您需要完美的同时,请使用端口范围的书写方式。

    此致、

    Masoud

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

    我已经提到了以上所有内容、但仍然看不到引导代码正在运行。

    您能帮助确认几件事吗?

    我们正在进行构建并获取.S19 文件。 为了获得这些值、我们在属性中执行以下操作设置。 请确认是否正确。

    我们使用并行引导模式。 那么、以下设置是否正确?

    在将引导代码下载到器件之前、我们将模式选择引脚 GPIO72 和 84 设置为低电平。 将引导代码下载到器件后、我们是否愿意将引脚设置为高电平?

    我们是否需要额外执行任何操作、以便下载的引导代码能够运行、并且我们可以在接收器端看到从器件发送的数据?

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

    您好、Vigita、

    GPIO72 和 GPIO84 仅在复位时进行采样、以决定进入哪种引导模式。 只要 XRSn 被释放时它们为低电平、器件就会进入并行 I/O 引导(模式 0)。 在引导 ROM 做出该决定后、更改这些引脚对正在进行的引导没有影响。

    我将把这个主题指派给我们的引导专家 、以便在这里更好地提供帮助。

    此致、

    Masoud

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

    您好:

    在将引导代码下载到设备后、我们是否要将引脚设置为高电平?

    对引导引脚进行采样并选择预期的引导加载程序(遵循引导引脚保持时间)后、您可以使用 GPIO 实现替代功能。

    资料来源: F2838x 数据表

      有关协议和 并行 GPIO 引导 8 位数据流的详细信息、请参阅 TRM 中的第 5.7.7.2.4 节“并行引导模式“。

    此致、

    马特