Forum: Mikrocontroller und Digitale Elektronik PWM Kanäle auf AVR32 UC3B 1512


von hhhhhuie (Gast)


Lesenswert?

Hallo

Ich versuche die PWM Kanäle auf dem AVR32UC3B1512 zu verwenden. Leider 
komme ich hierbei nicht weiter, daher hoffe ich hier auf Hilfe. Selbst 
habe ich leider nur Beispiele unter Verwendung des ASF gefunden, in 
welches ich mich nur ungern einarbeiten würde.

Konkret, ich  erhalte kein PWMSignal, und somit auch keine verwertbare 
Information. Dies habe ich auch mit einem Oszilloskop überprüft. Ich 
habe PWMC, GPIOC, PM und INTC initialisiert.

Hier die Initialisierungsfunktion. Konkrete Adressen und Werte sind in 
einer Header Datei definiert:
1
void MC_init(){
2
3
  /*PM initializations*/
4
  PM_CPUMASK |= PM_CPUMASK_OCDEN;         // OnChipDebugger
5
  PM_PBAMASK |= PM_PBAMASK_ENS;           // enabling interrupt, gpio and pwm clocks, to be sure (should be enabled by default/reset)
6
7
  /*interrupt controller initializations*/
8
  
9
  IPR12_PWM &= IPR_LEVEL0;  //zeroing
10
  IPR12_PWM |= IPR_LEVEL1;  
11
12
  
13
  /*PWM channels initializations*/
14
  
15
  PWM_MR |= PWM_DEFCLK;   //Mode Register, DEFCLK => selcted by prea, preb
16
  
17
    //assigning unmanipulated clock to the channels (value = 0)
18
  PWM_CMR0 &= PWM_CMR_STDCLK;
19
  PWM_CMR1 &= PWM_CMR_STDCLK;
20
  PWM_CMR2 &= PWM_CMR_STDCLK;
21
  PWM_CMR3 &= PWM_CMR_STDCLK;
22
  PWM_CMR4 &= PWM_CMR_STDCLK;
23
  PWM_CMR5 &= PWM_CMR_STDCLK;
24
  PWM_CMR6 &= PWM_CMR_STDCLK;
25
  
26
    //assigning polarity to start on lowlevel on all channels (value = 0)
27
  PWM_CMR0 &= PWM_CMR_POL_L;
28
  PWM_CMR1 &= PWM_CMR_POL_L;
29
  PWM_CMR2 &= PWM_CMR_POL_L;
30
  PWM_CMR3 &= PWM_CMR_POL_L;
31
  PWM_CMR4 &= PWM_CMR_POL_L;
32
  PWM_CMR5 &= PWM_CMR_POL_L;
33
  PWM_CMR6 &= PWM_CMR_POL_L;
34
  
35
    //assigning left alignment to all channels (value = 0)
36
  PWM_CMR0 &= PWM_CMR_ALG_L;
37
  PWM_CMR1 &= PWM_CMR_ALG_L;
38
  PWM_CMR2 &= PWM_CMR_ALG_L;
39
  PWM_CMR3 &= PWM_CMR_ALG_L;
40
  PWM_CMR4 &= PWM_CMR_ALG_L;
41
  PWM_CMR5 &= PWM_CMR_ALG_L;
42
  PWM_CMR6 &= PWM_CMR_ALG_L;
43
44
    //assigning period of 1024 to all channels
45
  PWM_CPRD0 |= PWM_DEFPRD;
46
  PWM_CPRD1 |= PWM_DEFPRD;
47
  PWM_CPRD2 |= PWM_DEFPRD;
48
  PWM_CPRD3 |= PWM_DEFPRD;
49
  PWM_CPRD4 |= PWM_DEFPRD;
50
  PWM_CPRD5 |= PWM_DEFPRD;
51
  PWM_CPRD6 |= PWM_DEFPRD;
52
  
53
    //assigning individual duty cycles to the channels
54
  PWM_CDTY0 |= 0x100;    //3,3V *1/4  = 0,825V
55
  PWM_CDTY1 |= 0x200;    //3,3V *1/2  = 1,65V
56
  PWM_CDTY2 |= 0x050;    //3,3V *1/8  = 0,4125V
57
  PWM_CDTY3 |= 0x020;    //3,3V *1/20= 0,165V
58
  PWM_CDTY4 |= 0x010;    //3,3V *1/40= 0,0825V
59
  PWM_CDTY5 |= 0x300;    //3,3V *3/4  = 2,475V
60
  PWM_CDTY6 |= 0x350;    //3,3V *7/8  = 2,8875V
61
  
62
63
  /*GPIO initializations*/
64
  GPIO_GPER &= PWM_PERIPHERAL_ENABLE;    //resulting: FFBA9E7F
65
  GPIO_PMR0 |= PMR0_PWM_BITS;        //MUX Bit 0
66
  GPIO_PMR1 |= PMR1_PWM_BITS;        //MUX Bit 1
67
68
  
69
  PWM_IER |= PWM_IER_ALL;                 // enable interrupt for all channels
70
  PWM_ENA |= PWM_ENA_ALL;                 // enable PWM channels
71
72
}

Die Kanäle sind mit Tiefpässen erster Ornung verbunden, was das direkte 
Ausgabesignal meines Wissens aber nicht beeinflussen sollte.

Danke im Voraus.

hhhhhuie

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.