Other Parts Discussed in Thread: SYSCONFIG
器件型号: AM2432
主题: SysConfig 中讨论的其他器件
尊敬的 TI 团队:
我需要说明计时器在切换 GPIO 的速度方面的功能。
您能否指定计时器可以实现多少次最短时间来切换 GPIO?
同时、当计时器配置为寄存器的最高值时、我能够在 1us 时切换 GPIO。
请向我提供同样的信息。
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.
Other Parts Discussed in Thread: SYSCONFIG
器件型号: AM2432
主题: SysConfig 中讨论的其他器件
尊敬的 TI 团队:
我需要说明计时器在切换 GPIO 的速度方面的功能。
您能否指定计时器可以实现多少次最短时间来切换 GPIO?
同时、当计时器配置为寄存器的最高值时、我能够在 1us 时切换 GPIO。
请向我提供同样的信息。
供参考、 e2e.ti.com/.../faq-processor-sdk-am64x-how-to-create-a-pwm-using-a-timer
你好 Nilesh、
PRU 内核以 333MHz 的最大频率运行、对应于每条指令~3ns 的周期时间。
•将 PRU GPIO 切换为高电平通常需要一条指令 (~3ns)。
•将 GPIO 切换为低电平也需要另一条指令 (~3ns)。
•当切换操作放置在循环内时、循环指令本身会每次迭代增加另一个~3ns。
由于每个 PRU 指令大约需要一个周期、因此 PRU 固件中的任何额外指令都将进一步按比例增加时序。
因此、PRU 无法实现 1ns 的 GPIO 控制、因为可实现的最小时序粒度约为指令周期时间 (~3ns)。 因此、利用 PRU GPIO、1ns 的精度无法实现。
此致、
Anil.
您好、
我已经使用计时器 ISR 实施 GPTIMER 来切换 GPIO (MAIN_DOMAIN)、从而实现最大切换速度。 因此、当计时器配置为 25MHz 时钟时、GPIO 切换速度为 300kHz。 我也尝试增加时钟、但没有得到任何结果。
我想知道这是否是我可以实现的 GPIO 的最大切换速度? 如果否、则我必须在 SysConfig 中对计时器或 GPIO 进行哪些修改?
当我使用时钟勾选延迟功能执行 GPIO 切换(在几秒内可用)时、它为我提供了大约 1MHz 的速度 然而、在 GPTIMER 中、这并不能提供富有成效的结果。
请提供您的反馈、说明如何实现最大切换速度。
#include <kernel/dpl/DebugP.h>
#include <kernel/dpl/ClockP.h>
#include "ti_drivers_config.h"
#include "ti_drivers_open_close.h"
#include "ti_board_open_close.h"
#include <kernel/dpl/SemaphoreP.h>
#include <drivers/hw_include/cslr_gpio.h>
SemaphoreP_Object gOverflowSemObj;
uint32_t pinToggle = 0;
uint32_t gpioAdd;
uint32_t regIndex, regVal;
volatile CSL_GpioRegs* hGpio;
void tickTimerCallBack(void *args)
{
//Nothing...
}
void OverFlowCallbackUser(GPTIMER_Handle handle)
{
pinToggle ^= 1;
if(pinToggle)
{
CSL_REG32_WR(&hGpio->BANK_REGISTERS[regIndex].SET_DATA, regVal);
}
else {
CSL_REG32_WR(&hGpio->BANK_REGISTERS[regIndex].CLR_DATA, regVal);
}
//GPTIMER_setCount(gGpTimerHandle[0], 0xFFFFFFAEU);
}
void gp_timer_overflow_callback_main(void *args)
{
Drivers_open();
Board_driversOpen();
gpioAdd = (uint32_t) AddrTranslateP_getLocalAddr(CONFIG_GPIO0_BASE_ADDR);
hGpio = (volatile CSL_GpioRegs*)((uintptr_t) gpioAdd);
regIndex = GPIO_GET_REG_INDEX(CONFIG_GPIO0_PIN);
regVal = GPIO_GET_BIT_MASK(CONFIG_GPIO0_PIN);
/* Set Tiemr Count to a high value so that overflow can happen sooner */
//GPTIMER_setCount(gGpTimerHandle[0], 0xFFFFFFAEU);
/* Start the Timer */
GPTIMER_start(gGpTimerHandle[0]);
DebugP_log("Overflow Interrupt triggered !!\r\n");
}你好 Nilesh、
您目前正在使用 PWM 控制 GPIO、这不是测量优化的 GPIO 切换时间的正确方法。
相反、您只需在连续循环中调用 GPIO 设置高电平和设置低电平函数。 这将为您提供 GPIO 引脚的实际切换时间。
请确保使用 Release Build 执行此测试。
从理论上讲、当 R5F 内核以 800MHz 运行时、R5F 内核需要大约 0.2µs 才能写入寄存器。
因此、对于完全打开+关闭的切换、您应该期望大约 0.4µs 延迟。
此外、使用 PRU 内核时、当 PRU 在 333MHz 上运行时、在没有任何环路开销的情况下切换 GPIO 大约需要 0.006µs。
此致、
Anil.