AVR32 EVK1100 PWM Beispiel

Gast #1841283
Lesenswert?

Hallo,
ich arbeite bin mit einem EVK1100 Bord und AVR32 Studio Ver. 2,5
Ich möchte ein PWM-Signal mit einer Frequenz von 66 MHz erzeugen. Ich 
habe
bereits versucht, mit Hilfe der eingebauten Programm Beispiel in AVR32 
Studio dh EVK1100-Driver-PWM Example.
Es funktioniert prima, und ich bin in der Lage, das empfangene Signal 
mit
Änderung des Wertes der Channel Prescaler und der Channel Period in
Haupt-C-Programm. Aber der Minimalwert der Vorteiler, das ich beantragen 
kann, ist AVR32_PWM_CPRE_MCK. Auch die Werte der Period und duty cycle 
sind 2 & 1 bzw. (angeschlossen haben einen Screenshot der
gleich). Ich beobachte die Ausgabe auf LED 7. Die max freq, die ich 
erreiche, ist 56 kHz. Ist es möglich, einen PWM-Signal des 66Mhz mit 
dieser Konfiguration erhalten? Ist einem externen Taktsignal für den 
gleichen Bedarf? Was kann ich weiter in das Programm zu modifizieren?
Bitte helfen Sie ...
Angehängte Dateien:
#1849884
Lesenswert?

Hi,

66Mhz ist nicht möglich ;).

Wenn du 66Mhz als ausgang an einem Pin haben willst schau dir mal die 
Generic Clock an:

13.6.9 Generic Clock Control

Wenn es umbedingt pulsweiten gesteuert sein muss, dann programmier mal 
die PWM lib selber. Aber 66Mhz wirst du nicht hinbekommen.

Gruß
Zippi
#1851009
Lesenswert?

Phil S. schrieb:
> Hi,
>
> 66Mhz ist nicht möglich ;).
>
> Wenn du 66Mhz als ausgang an einem Pin haben willst schau dir mal die
> Generic Clock an:
>
> 13.6.9 Generic Clock Control
>
> Wenn es umbedingt pulsweiten gesteuert sein muss, dann programmier mal
> die PWM lib selber. Aber 66Mhz wirst du nicht hinbekommen.
>
> Gruß
> Zippi

Hej zippi,

ich hab eigentlich den code gefunden damit ich statt Internal Oscillator 
115kHz, kann ich den Main Clock dh OSC0 12MHz verwenden. Der Code 
lautet,
1
pm_switch_to_osc0(&AVR32_PM, FOSC0, OSC0_STARTUP);
Aber es gibt mir Fehler warnung weil die richtige Include files habe ich 
nicht eingefügt. Weißt jemand was das ist? Dann muss ich die PLL 
benutzen um den Signal zu multiplieren können.
Also, für eine Antwort wäre ich dankbar.

Gruß,
Jack
#1851236
Lesenswert?

Hi,

Hier:
du musst nur das define ändern und die funktion einmal aufrufen. Du 
kannst aber nur folgende takte einstellen:
18, 24, 30, 36, 42, 48, 54, 60, 66 (72, 78, 84, 90, 96). In klammer ist 
übertacktet. Ist aber unspezifisch.
1
#define clock 24  // 18-66
2

3
void cpu_clock()
4
{
5
  int clockh = (clock/6) - 1;
6

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

9
  AVR32_PM.mcctrl =       AVR32_PM_OSC0EN_MASK;        // Enable Oscillator 0
10

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

13

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

19

20
  AVR32_PM.cksel =       0x80808080;
21

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

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

26

27
  AVR32_FLASHC.fcr |=      1 << AVR32_FLASHC_FWS_OFFSET;    // The flash is read with 1 wait state.
28

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

31
}

Gruß
Zippi

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren