Ausgangstakt des LPC1768?

Ich verwende das LPC1768- Entwicklungsboard von NXP und bin auf das Benutzerhandbuch für diesen Teil gestoßen, und auf Seite 67/849, Abschnitt 4.10, wird der externe Taktausgang beschrieben. Ich konnte nicht herausfinden, auf welchem ​​der 40 Pinbelegungen auf der Platine diese Uhr sitzt. Beim Googeln habe ich diesen Code gefunden, der 10MHz ausgeben soll:

/* 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

Aber noch einmal, ich bin mir nicht sicher, aus welchem ​​der Pins der Platine diese Uhr kommt? Oder muss ich irgendwo auf der Platine eine Verbindung löten?

UPDATE Ich habe den bereitgestellten Code getestet Nils Pipenbrinck. Es klappt. Aber ich bin mir nicht sicher, ob es Einschränkungen bei dieser Taktausgabe und ihrer Genauigkeit gibt. Hier sind Screenshots für die Frequenzen 10 MHz, 5 MHz, 1 MHz: - Es scheint sich zu verschlechtern, wenn Sie höher gehen. Irgendwelche Anregungen, wie man die Form und Genauigkeit des Signals verbessern kann?

Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein

Antworten (2)

Inspiriert von der Zuofus-Antwort, dachte ich nur, ich poste den Code, um timer2 für diese Aufgabe einzurichten. Ich benutze es, um ein CPLD mit verschiedenen Frequenzen zu takten, und es funktioniert wie ein Zauber.

// 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);
  }
}
Danke für das Codebeispiel. Ich werde es bald ausprobieren, nachdem ich einen Draht auslöte. Wollte fragen - ist es möglich, die PWM-Pins als Uhr zu verwenden?
@KingsInnerSoul Ja, sie funktionieren perfekt als langsamere Uhr. Ich verwende genau den obigen Code, um einen CollRunner2 CPLD mit 12 MHz zu takten. Funktioniert wie ein Zauber, sogar auf Steckbrett.
Also muss ich noch ein Kabel auslöten? Ich bin mir nicht sicher, welcher der Oszillatoren der richtige ist, und die Pinbelegung von Ethernet und uC selbst sind zu klein. Wie hast du den Uhrstift herausgebrochen?
@KingsInnerSoul Wenn Sie den obigen Code verwenden, erhalten Sie Ihre Uhr am Pin P8, kein Löten erforderlich.
Danke. Was ist "CORE_FREQ" Ich erhalte eine Fehlermeldung für diese Variable.
@KingsInnerSoul Sie können es als 96000000 (auch bekannt als 96 MHz) definieren. Es ist die Geschwindigkeit des Hauptprozessors.
Ich habe den Code mit einer Kernfrequenz von 96 MHz getestet und er funktioniert. Aber die Ausgangsfrequenz (in Bezug auf GND-Pin) ist nicht so groß. Ich habe Screenshots in der Frage angehängt - und es zeigt, dass die Frequenz nicht wirklich genau ist und sich die Uhrform verschlechtert, wenn wir höher gehen. Gibt es Grenzen für die Frequenz? Ich brauche 10 MHz.
@KingsInnerSoul meine höchste Frequenz ist 5,6 MHz, und ich habe keine Probleme, das zu erreichen. Wie sieht dein Setup aus? Irgendwelche langen Leads? Vielleicht lädt die Oszilloskopsonde den Pin?
Keine langen Leitungen. Es wurde überhaupt nicht geladen. Nur die Tektronix-Sonde zwischen Pin 8 und GND. Sie können sehen, dass es bei 1 MHz in Ordnung ist und bei 5 beginnt, beschissener zu werden. Was ist die Anstiegs-/Abfallzeit dafür?

Gemäß diesem Schema ist der Pin, den Sie für CLKOUT verwenden, P1.27, der für die Ethernet-Taktfreigabe (ETH_OSC_EN) verwendet wird. Dies ist Pin 43 auf dem LPC1768-Chip und geht zum Aktivierungspin des Ethernet-Oszillators (ASE-50-CT). Es scheint nirgendwo anders auf der Platine ausgebrochen zu sein, also müssen Sie an einem dieser beiden Punkte auf der Platine einen Draht daran anlöten.

Wenn Sie einen externen Takt erzeugen müssen, ohne CLKOUT zu verwenden und ohne CPU-Zyklen zu verschwenden, können Sie einen der Match-Ausgänge verwenden. Stellen Sie das Übereinstimmungsregister auf einen kleinen Wert ein (der Ihr Taktteiler von Ihrem PCLK sein wird) und aktivieren Sie das entsprechende Zähler-/Übereinstimmungsregister. Stellen Sie es ein, um den Zähler zurückzusetzen und den Ausgang bei einem Timer-Übereinstimmungsereignis umzuschalten.

Das mache ich, um eine flexible Taktausgabe zu erzeugen. Klappt wunderbar.
Ist CLKOUT irgendwo auf der LPC1768-Platine defekt? Wenn ja, wie kann CLKOUT verwendet werden?
Die ganze Idee hinter der Verwendung des Match-Registers besteht darin, das Löten an CLKOUT zu vermeiden. Die Antwort von Nils unten verwendet MAT2.0, das bereits mit Pin 8 des MBED verbunden ist.