Get no GTP1 capture. Input config wrong?

0xABCD

Member
C:
volatile uint32_t captureValue = 0;
volatile bool newCapture = false;

void setup() {
  // Initialize serial output
  Serial.begin(9600);
  while (!Serial); // Wait for serial connection

  // Print build date and time
  Serial.println(__DATE__);
  Serial.println(__TIME__);

  // Print CPU clock frequency
  Serial.print("CPU clock: ");
  Serial.print(F_CPU_ACTUAL / 1E6);
  Serial.println(" MHz");

  // Print BUS clock frequency
  Serial.print("BUS clock: ");
  Serial.print(F_BUS_ACTUAL / 1E6);
  Serial.println(" MHz");

  // Configure Pin 4 as input
  pinMode(4, INPUT);

  // Configure IOMUXC for Pin 4 (GPT1 Capture 1)
  IOMUXC_SW_MUX_CTL_PAD_GPIO_B1_01 = 0x3; // Pin 4 as GPT1_CAPTURE1 (ALT3)
  IOMUXC_SW_PAD_CTL_PAD_GPIO_B1_01 = 0x13000; // Pull-Up (100 kOhm), hysteresis, medium drive strength

  // Enable clock for GPT1
  CCM_CCGR1 |= CCM_CCGR1_GPT(CCM_CCGR_ON);

  // Configure GPT1
  GPT1_CR = 0; // Reset control register
  GPT1_PR = 0; // Prescaler = 0 (no divider)
  GPT1_SR = 0x3F; // Clear all prior status
  GPT1_IR = GPT_IR_IF1IE; // Enable Input Capture 1 interrupt
  GPT1_CR = GPT_CR_EN | GPT_CR_CLKSRC(1) | GPT_CR_FRR | GPT_CR_IM1(1) | GPT_CR_IM2(2); // Enable timer, IPG_CLK, free-run, rising edge on Capture 1, falling edge on Capture 2 (unused)

  // Attach interrupt vector and enable interrupt
  attachInterruptVector(IRQ_GPT1, gpt1_capture_isr);
  NVIC_ENABLE_IRQ(IRQ_GPT1);

}

void loop() {
  // Nothing in loop, output handled in interrupt
  Serial.println("test");
  delay(500);
}

// Interrupt Service Routine for Input Capture
void gpt1_capture_isr() {
  if (GPT1_SR & GPT_SR_IF1) { // Check if Capture 1 triggered
    captureValue = GPT1_ICR1; // Read capture value (counter state)
    float timeUs = captureValue / 150.0; // Convert to microseconds (150 MHz = 6.67 ns/tick)
    Serial.printf("Capture-Wert: %u, Zeit: %.3f us\n", captureValue, timeUs);
    GPT1_SR |= GPT_SR_IF1; // Clear capture flag
  }
}
 
Back
Top