您好!
在其中一个应用中、我需要时间测量、因此、为了检查控制器是否合适、我需要时间读取 GPIO 引脚、或不读取。 读取数字输入所需的时钟周期。 通过使用 PLL、我的系统时钟为120MHz。
PSFLT=GPIOPinRead (GPIO_PORTK_base、GPIO_PIN_4);
请帮助
此致
Khodidas Domadiya
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.
您好!
在其中一个应用中、我需要时间测量、因此、为了检查控制器是否合适、我需要时间读取 GPIO 引脚、或不读取。 读取数字输入所需的时钟周期。 通过使用 PLL、我的系统时钟为120MHz。
PSFLT=GPIOPinRead (GPIO_PORTK_base、GPIO_PIN_4);
请帮助
此致
Khodidas Domadiya
您好、Khodidas、
您是否需要读取信号的总高电平(或低电平)时间? 如果是这样、我们有一个计时器示例、可在 TivaWare 中执行该操作: timer_边缘_capture
这样就无需了解时钟周期。
就答案而言、这取决于引脚的读取方式。 您需要查看首先执行的代码行数。 如果计时器不工作、这可能是您从 DRM 代码中受益的罕见情况之一、因此您可以绕过将增加时钟周期的 TivaWare API。
此致、
Ralph Jacobi
您好、Khodidas、
因此、通常情况下、假设系统时钟以120MHz 运行、每条指令需要8.33ns 的执行时间、因此这一点可以归结为代码执行的效率。 使用 TivaWare 与 DRM 会有不同的结果。 DRM 与汇编也可能是因为 DRM 仍然仅从原始汇编中简化代码。
另一个元件是、根据指令、执行可能需要多个时钟周期。 请见 :Cortex-M4指令
对于 TivaWare GPIOPinRead、将会存在诸如 assert 校验之类的开销、以及函数将变量向下传递到行而不是进行硬编码校验的方式:
//
// Check the arguments.
//
ASSERT(_GPIOBaseValid(ui32Port));
//
// Return the pin value(s).
//
return(HWREG(ui32Port + (GPIO_O_DATA + (ui8Pins << 2))));
最终、您需要评估您需要对代码进行多精细的处理、然后计算您最终为此目的使用的代码的周期数、以了解该元素。
此致、
Ralph Jacobi