mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem mit AVR32 GPIO


Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

habe ein kleines Problem mit dem AVR32UC3B0256. Im langsamen Betrieb mit 
internen RC Oszilator funktioniert das Setzen und Löschen der Pins. Wenn 
ich jedoch versuche die PLL0 als Main Clock zu verwenden bleibt der Pin 
immer auf HIGH.
Habe ich vergessen ein Register zu setzen oder was mache ich falsch?
Hier mein code.
#include <avr32/io.h>

void UsePLL(unsigned int clock)
{
  int clockh = (clock/6) - 1;

  AVR32_PM.oscctrl0 = (AVR32_PM.oscctrl0 | 0x00000407);        // Startup time  /  Oscillator Mode

  AVR32_PM.mcctrl =       AVR32_PM_OSC0EN_MASK;          // Enable Oscillator 0

  while((AVR32_PM.poscsr & AVR32_PM_POSCSR_OSC0RDY_MASK)== 0);  // Oscillator 0 is ready


  AVR32_PM.pll[0] =       0 << AVR32_PM_PLLOSC_OFFSET  |    // Oscillator 0 is the source for the PLL
                    1 << AVR32_PM_PLLDIV_OFFSET  |    // div = 1
                    clockh << AVR32_PM_PLLMUL_OFFSET |  // multi clock z.b. if clockh = 10 (10+1)*12=132/2Fvc = 66Mhz
                    5 << AVR32_PM_PLLOPT_OFFSET;      // 80MHz<fvco<180MHz / fPLL = fvco / Wide Bandwidth Mode disabled

  AVR32_PM.cksel =       0x80808080;

  AVR32_PM.pll[0] |=       AVR32_PM_PLLEN_MASK;            // PLL enable

  while(!(AVR32_PM.poscsr & AVR32_PM_POSCSR_LOCK0_MASK));      // PLL 0 is locked, and ready to be selected as clock source


  AVR32_FLASHC.fcr |=      0 << AVR32_FLASHC_FWS_OFFSET;      // The flash is read with 0 wait state. (write 1 otherwise)

  AVR32_PM.mcctrl |=       2 << AVR32_PM_MCSEL_OFFSET;        // PLL0 as main oscillator

}

int main()
{
  char c=0;

  UsePLL(24);


  AVR32_GPIO.port[1].gper = 0x00000fff; //Set Enable
  AVR32_GPIO.port[1].oder = 0x00000fff; //As Output

  AVR32_GPIO.port[1].ovrs = 0x00000001;

  while(1)
  {
    AVR32_GPIO.port[1].gperc = 0x00000001;
    c++;
    c++;
    AVR32_GPIO.port[1].gpers = 0x00000001;
  }
  return 0;
}

Wäre echt toll wenn mir jemand helfen kann. Bin im moment mit lmeinem 
Latein am ende.
Gruß Stefan

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe noch mal was ausprobiert. Wenn ich den SPI verwende geht dieser mit 
sehr hoher Geschwindigkeit.

Autor: Phil S. (zippi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi,

>while(1)
>{
    >AVR32_GPIO.port[1].gperc = 0x00000001;
    >c++;
    >c++;
    >AVR32_GPIO.port[1].gpers = 0x00000001;
>}

Sollte eigentlich gehen, dein Problem wird wohl sein, dass er sehr 
schnell toggelt. Achja gibt auch ne pin toggle funktion:
AVR32_GPIO.port[1].gpert = 0x00000001; //;)

Und dann mach mal die funktion dazwischen:
void wait_us(int time)
{
  int waittime;
  int delay;
  int time2;

  time2 = __builtin_mfsr(AVR32_COUNT);
  delay = time * clock;
  waittime = __builtin_mfsr(AVR32_COUNT) - time2;

  while(waittime<delay)
  {
    volatile unsigned int counter = __builtin_mfsr(AVR32_COUNT);
    waittime += counter - time2;
    time2 = counter;
  }

}

clock musst du hier natürlich auch noch definieren.

Gruß
Zippi

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.