Forum: Mikrocontroller und Digitale Elektronik AT91SAM7 Programmable Clock Output


von Johannes (Gast)


Lesenswert?

Hallo,

ich versuche an meinem AT91SAM764 einen der drei programmierbaren Clocks 
zum laufen zu bringen.

Ich rufe die Funktion programmable_clock() von main aus auf.

void programmable_clock(void)
{
    AT91PS_PMC  pPMC  = AT91C_BASE_PMC;

    pPMC->PMC_PCKR[1] = 0x15;
    pPMC->PMC_SCER = (pPMC->PMC_SCSR | AT91C_PMC_PCK1);

    while (!(pPMC->PMC_SR & AT91C_PMC_PCK1RDY));
}

Damit sollte nach meiner Meinung auf auf Pin 9 (PCK1) ein Clock 
herausgehen, der MCK geteilt durch 32 ist.

Aber ich sehe auf meinem Oszi nichts. Was mache ich falsch?

Muss ich davor noch den PIO-Controller auf Periferie B umschalten?

Schönen Gruß,
Johannes

von Steffen (Gast)


Lesenswert?

sollte so gehen. Ist nur ein Bsp. mit anderen Signalen noch.

  AT91PS_PMC     pPMC = AT91C_BASE_PMC;
  // First, enable the clock of the PIO
  AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1 << AT91C_ID_PIOA ) ;


  AT91F_PIO_CfgPeriph(
   AT91C_BASE_PIOA, // PIO controller base address
  ((unsigned int) AT91C_PA11_NPCS0   ) |  //- CS-LCD
  ((unsigned int) AT91C_PA13_MOSI    ) |  //- MOSI
  ((unsigned int) AT91C_PA12_MISO    ) |  //- MISO
  ((unsigned int) AT91C_PA14_SPCK    ),   //- SCK Peripheral A
  ((unsigned int) AT91C_PA9_NPCS1    ) |   //- CS_SOUND
  ((unsigned int) AT91C_PA17_PCK1    ) |   //- CLK_SOUND
  ((unsigned int) AT91C_PA22_NPCS3   ));  //- CS_DATA // Peripheral B

  *AT91C_PMC_SCER = AT91C_PMC_PCK1; //- CLK Sound

    pPMC->PMC_PCKR[1] = AT91C_PMC_PRES_CLK_8 ;
    while(!(*AT91C_PMC_SR & AT91C_PMC_PCK1RDY));

    pPMC->PMC_PCKR[1] |= AT91C_PMC_CSS_PLL_CLK  ;
    while(!(*AT91C_PMC_SR & AT91C_PMC_PCK1RDY));

Mfg

von Johannes (Gast)


Lesenswert?

Danke schön.

Mit den Funktionen läuft es wie erwartet.

Aber kann mir jemand erklären, warum es nicht geht, wenn ich die 
Befehle, die in den Funktionen aufgerufen werden, selbst aufrufe?
Das ist für mich unverständlich.

Servus,
Johannes

von Kalle N. (Firma: FH-Wolfenbuettel) (pixelkalle)


Lesenswert?

Hi,

bei mir läuft es auch mit nicht, aber ich versuche auch einen anderen 
Pin anzusteuern. Ich versuch's hiermit:

//Try to set Programmable Clock Output Controller to PB30 (PCK2) with 
Main CLK
dbgu_print_ascii("Trying to configure clock, stopping first...\n\r");
AT91C_BASE_PMC->PMC_SCDR = AT91C_PB30_PCK2;
DelayMs(1000);

dbgu_print_ascii("Setting: AT91C_PMC_PRES_CLK_8 \n\r");
AT91C_BASE_PMC->PMC_PCKR[2] = AT91C_PMC_PRES_CLK_8 ;
//while(!(*AT91C_PMC_SR & AT91C_PB30_PCK2));

dbgu_print_ascii("Setting: AT91C_PMC_CSS_MAIN_CLK \n\r");
AT91C_BASE_PMC->PMC_PCKR[2] |= AT91C_PMC_CSS_MAIN_CLK ;
//while(!(*AT91C_PMC_SR & AT91C_PB30_PCK2));

//Setting Pin PB30 to Enable
dbgu_print_ascii("Trying to enable clock\n\r");
AT91C_BASE_PMC->PMC_SCER = AT91C_PB30_PCK2;

dbgu_print_ascii("Enabled?\n\r");

Ich hab das SAM7-EX256 Board von Olimex 
http://www.olimex.com/dev/sam7-ex256.html

Vllt. weiß ja jemand wie ich ein CKL Signal aus einem Pin bekomme. Ich 
versuch jetzt erstmal den TC (Timer Counter) -- Ja, ich bin neu im 
Bereich MC

Cya

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.