Thread 中讨论的其他器件:SysConfig
Sitara 器件具有 PRU 内核、可以完全确定的方式执行指令。
因此、用户可以将 PRU 内核用于实时 I/O 控制应用。
本常见问题解答旨在说明如何在 PRU 上编写简单的 GPIO 切换软件以及如何从 CCS 加载和运行该软件。
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.
AM64X 具有两个 PRU 内核。 默认情况 下、PRU0和 PRU1内核能够控制所有 GPIO 引脚。 每个 PRU 内核直接连接到20个 GPIO 引脚、可使用 R30 和 R31寄存器进行控制。
可以使用 R31 寄存器读取引脚值。
可以使用 R30 寄存器写入引脚值。
有关 PRU 内核的更多详细信息、请使用以下链接。
https://software-dl.ti.com/mcu-plus-sdk/esd/AM64X/latest/exports/docs/api_guide_am64x/PRU_IO.html
驱动 GPIO 引脚需要 PRU CPU 频率和引脚多路复用、因此我们可以将其代码包含在 main.asm 文件中、也可以使用 MCU+SDK 示例中提供的 SysConfig 轻松实现。
请在 R5F0_0上的任何示例中执行以下步骤。 我选择了以下示例 C:\ti\mcu_plus_sdk_am64x_08_05_00_24\examples\empty\am64x-evm\r5fs0-0_freertos。
R5F0_0:
1.启用 PRU 外设并在系统配置中选择 PRU CPU 时钟频率。 提供的各种时钟速度选项包括200MHz、225MHz、250MHz、300MHz 和333MHz。 选择所需的频率。

2. 选择要从20个引脚切换的 GPIO 引脚。 我在我的示例中选择了 GPO1。

3.编译您的 R5F0_0应用程序。
请在 PRU_0示例中按照以下步骤操作。 我选择了以下示例 C:\ti\mcu_plus_sdk_am64x_08_05_00_24\examples\pru_io\empty\firmware\am64x-evm\icssg0-pru0_fw
PRU_0:
如上所述、我们需要 R30寄存器来控制输出引脚。 我使用下面的两条指令在引脚上写入逻辑高电平和低电平、没有任何延迟、并一直执行相同的指令。
main:
init:
zero &r0, 120
; Configure the Constant Table entry C28 to point to start of shared memory
; PRU_ICSSG Shared RAM (local-C28) : 00nn_nn00h, nnnn = c28_pointer[15:0]
; ldi R5, 0x0100
; sbco &R5, C11, 0x28, 2
CHECK_FOR_SIGNAL:
LDI R30, 0x2 ; toggles GPIO pin 1
LDI R30, 0x0
QBA CHECK_FOR_SIGNAL ; Branch operation
HALT
有关 PRU 完整指令集的更多详细信息、请参阅以下链接。
https://www.ti.com/lit/ug/spruij2/spruij2.pdf
2. 编译 PRU_0应用程序。
从 CCS 加载并运行 PRU 应用程序:
注: 如果 要在外部存储器中加载 PRU 二进制文件,请使用 下面的常见问题 解答。
示例项目:
我已附上 R5F 和 PRU 的示例项目供您参考。
R5F 项目:
PRU 项目: