¿Reloj de salida del LPC1768?

Estoy usando la placa de desarrollo LPC1768 de NXP y encontré el Manual del usuario para esta parte y la sección 4.10 de la página 67/849 trata sobre la salida del reloj externo. No pude averiguar en qué pin de los 40 pines en el tablero está sentado este reloj. Al buscar en Google, encontré este código que se supone que emite 10 MHz:

/* clkout of 10mhz on 1.27 */
LPC_PINCON->PINSEL3 &=~(3<<22);
LPC_PINCON->PINSEL3 |= (1<<22);
LPC_SC->CLKOUTCFG = (1<<8)|(14<<4); //enable and divide by 12

Pero, de nuevo, no estoy seguro de cuál de los pines de la placa sale este reloj. ¿O tengo que soldar una conexión en algún lugar de la placa?

ACTUALIZAR He probado el código que Nils Pipenbrinckproporcionó. Funciona. Pero no estoy seguro de si existen limitaciones en la salida de ese reloj y su precisión. Aquí hay capturas de pantalla para frecuencias de 10 MHz, 5 MHz, 1 MHz: - parece degradarse a medida que subimos. ¿Algún aporte sobre cómo mejorar la forma y la precisión de la señal?

ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí

Respuestas (2)

Inspirado por la respuesta de Zuofus, pensé en publicar el código para configurar timer2 para esta tarea. Lo uso para registrar un CPLD en varias frecuencias, y funciona de maravilla.

// flexible frequency synthesizer for the LPC1768 mbed board.
// this uses the TIM2 timer in countdown mode, toggling
// the MAT2.0 pin on each event (DIP-8 in the prototype board)

// the frequency will always be a bit off for high clock-rates because
// only integer divisions of the main clock are possible. 

void StartFreqSynth (uint32_t freqHz)
/////////////////////////////////////
{
  // ------------------------
  // Enable Power for Timer2:
  // ------------------------
  LPC_SC->PCONP |= (1<<22);

  // -----------------------------------
  // Disable counter and hold in reset:
  // -----------------------------------
  LPC_TIM2->TCR = 2;       // rest counter

  // -------------------------------------------
  // Set Clock source for Timer2 (bit 12 and 13)
  // we pick full system clock, divider 2,4,8
  // are also available
  // -------------------------------------------
  LPC_SC->PCLKSEL1 = (LPC_SC->PCLKSEL1 & ~(3<<12)) | (1<<12);

  // ----------------------------------
  // Use normal Timer mode, no capture
  // ---------------------------------- 
  LPC_TIM2->CTCR = 0;

  // -----------------------------------------------
  // Match on MR0 = TC. Reset counter, no interrupts
  // -----------------------------------------------
  LPC_TIM2->MCR = 2;     

  // ------------------------------------------------
  // set pin function for pin DIP_8 (P0.6) to MAT2.0
  // ------------------------------------------------
  LPC_PINCON->PINSEL0 |= 3<<12;

  // ----------------------------------
  // toggle pin MAT2.0 (DIP_8) on match
  // ----------------------------------
  LPC_TIM2->EMR  = 1 | (3<<4);

  // -----------------------------------
  // Set clock divider and match value
  // this determines the final frequency
  // -----------------------------------  
  LPC_TIM2->PR   = 0; // set prescaler to full speed.

  // since we toggle the pin, the generated frequency is half
  // as fast as a cycle, so we have to run the timer twice as
  // fast to compensate:
  LPC_TIM2->MR0  = CORE_FREQ / (freqHz*2);  // match value

  // start counter
  LPC_TIM2->TCR  = 1;       
}



void StopFreqSynth()
////////////////////
{
  // check if timer2 is powered:
  if (LPC_SC->PCONP & (1<<22))
  {
    // never generate interrupts:
    LPC_TIM2->MCR = 0;

    // put timer2 in reset, stop timer.
    LPC_TIM2->TCR = 2; 

    // disable peripheral power
    LPC_SC->PCONP &= ~(1<<22);
  }
}
Gracias por el ejemplo de código. Lo probaré poco después de soldar un cable. Quería preguntar: ¿es posible usar los pines PWM como reloj?
@KingsInnerSoul Sí, funcionan perfectamente como un reloj de menor velocidad. Utilizo exactamente el código anterior para cronometrar un CPLD CollRunner2 a 12Mhz. Funciona a las mil maravillas, incluso en protoboard.
Entonces, ¿todavía tengo que soldar un cable? No estoy seguro de cuál de los osciladores es el correcto, y el pinout en ethernet y uC es demasiado pequeño. ¿Cómo rompiste el pasador del reloj?
@KingsInnerSoul Si usa el código anterior, obtendrá su reloj en el pin P8, no se requiere soldadura.
Gracias. ¿Qué es "CORE_FREQ"? Obtengo un error para esa variable.
@KingsInnerSoul Puede definirlo como 96000000 (también conocido como 96Mhz). Es la velocidad del procesador principal.
He probado el código, con Core Frequency de 96MHz y funciona. Pero la frecuencia de salida (con respecto al pin GND) no es tan buena. Adjunté capturas de pantalla en la Pregunta, y muestra que la frecuencia no es realmente precisa y la forma del reloj se degrada a medida que avanzamos. ¿Hay límites en la frecuencia? Necesito 10 MHz.
@KingsInnerSoul mi frecuencia más alta es 5.6Mhz y no tengo problemas para alcanzarla. ¿Cómo se ve tu configuración? ¿Alguna pista larga? ¿Quizás la sonda de alcance está cargando el pin?
Sin largas pistas. No estaba cargado en absoluto. Solo la sonda Tektronix entre el pin 8 y GND. Puedes ver que @ 1MHz está bien y 5 comienza a empeorar. ¿Cuál es el tiempo de subida/bajada para esto?

De acuerdo con este esquema , el pin que está usando para CLKOUT es P1.27, que se usa para habilitar el reloj Ethernet (ETH_OSC_EN). Este es el pin 43 en el chip LPC1768 y va al pin de habilitación en el oscilador Ethernet (ASE-50-CT). No parece estar roto en ningún otro lugar de la placa, por lo que tendrá que soldarle un cable en uno de esos dos puntos de la placa.

Si necesita generar un reloj externo sin usar CLKOUT y sin desperdiciar ciclos de CPU, puede usar una de las salidas de coincidencia. Establezca el registro de coincidencia en un valor pequeño (que será su divisor de reloj de su PCLK) y habilite el registro de contador/coincidencia correspondiente. Configúrelo para restablecer el contador y alternar la salida en un evento de coincidencia de temporizador.

Eso es lo que hago para generar una salida de reloj flexible. Funciona de maravilla.
¿Está CLKOUT roto en alguna parte de la placa LPC1768? Si es así, ¿cómo se puede usar CLKOUT?
La idea detrás del uso del registro de coincidencia es evitar tener que soldar a CLKOUT. La respuesta de Nils a continuación usa MAT2.0, que ya está conectado al pin 8 en el MBED.