Forum: Mikrocontroller und Digitale Elektronik Frage zu VPB und IODIR beim ARM7


von Birger M (Gast)


Lesenswert?

Hallo,

ich möchte ein analoges Signal am Eingang 1 einlesen, was mit dem 
folgenden Code auch funktioniert. Den Code habe ich im Manual gefunden:
1
int getWert()
2
{
3
  unsigned int val;
4
  
5
  /* Setup the A/D converter */
6
  VPBDIV = 0x00000002;  /* Set the Pclk to 30MHz */
7
  IODIR1 = 0x00FF0000;  /* P1.16..23 defined as Outputs */
8
  ADCR = 0x00210602;    /* Setup A/D: 10-bit AIN1 @ 3MHz */
9
  
10
  ADCR |= 0x01000000;    /* Start A/D conversion */
11
  while((ADDR & 0x80000000) == 0);  /* Wait for the conversion to complete */
12
  val = ((ADDR >> 6) & 0x03FF);    /* Extract the A/D result */
13
  
14
  return val;
15
}

Nun habe ich eine Frage zu den Einstellungen von VPBDIV. Warum wird der 
Pclk auf 30MHz gesetzt und nicht auf einen anderen Wert? Hat das einen 
bestimmten Grund?

Und warum wird mit IODIR1 gesagt das die Pins von P1.16 bis .23 als 
Outputs deklariert werden? Dies könnte man doch weg lassen oder warum 
wird dies im Beispiel des Manual drin gelassen?

Wo wird bei ADCR gesagt das der AIN1 mit 3MHz läuft? Rechnet man hierfür 
30MHz (Pclk) / 10-bit ?

Danke,
Birger

von Mark .. (mork)


Lesenswert?

Hallo Birger,

>Nun habe ich eine Frage zu den Einstellungen von VPBDIV. Warum wird der
>Pclk auf 30MHz gesetzt und nicht auf einen anderen Wert? Hat das einen
>bestimmten Grund?

VPBDIV teilt den Prozessortakt für die Peripherie. Wahrscheinlich läuft 
der µC mit 60 MHz, 60/2 währen dann 30 MHz.

Warum die Bits in IODIR1 kann man nicht sagen, wahrscheinlich hat es 
etwas mit der restlichen Code zu tun, auf die Funktion sollte es keinen 
Einfluss haben.

>Wo wird bei ADCR gesagt das der AIN1 mit 3 MHz läuft? Rechnet man hierfür
>30 MHz (Pclk) / 10-bit ?

Lies mal im Datenblatt, was in das ADCR-Register reinkommt: die Bits 
8-15 sind  der Prescaler für den ADC. In diesem Fall sind es 0x06. 30 
MHz/(0x06+1)=4,29 MHz, der ADC wird also mit 4,29 MHz betrieben un nicht 
mit 3 MHz, der Kommentar ist also falsch.

MfG Mark

von Birger M (Gast)


Lesenswert?

Hallo Mark,

stimmt der Prozessor läuft bei 60MHz und somit erhält man auch die 30MHz 
für VPB. Aber man könnte den Teiler auch auf 4 stellen oder 1. Meine 
Frage ist wann nimmt man welchen Wert und warum?
Kennst du oder jemand anderes vielleicht die Ausschrift für die 
Abkürzung VPB?

Stimmt der ADC wird mit 4,5MHz betrieben also fast 4,29MHz. Dann ist das 
wirklich ein Kommentarfehler.

Gruß,
Birger

von Robert Teufel (Gast)


Lesenswert?

Hallo Birger,

man nimmt den Wert "1" wenn man fuer irgendein Peripheral die maximale 
Geschwindigkeit braucht. Du hast nicht geschrieben welcher LPC es ist 
aber z.B. der LPC213x/214x um die SSP bei 30 Mbit/sec lauden zu lassen 
muss VPBDIV auf 1 sein.

Man nimmt den Teiler 4, wenn man die Timer z.B. nur bei ein paar MHz 
laufen hat und nicht hochaufloesende PWM generieren moechte. Der Teiler 
4 spart ein paar mA wenn alle Peripherals in Betrieb sind.

Also generell, kleiner Teiler 1 oder 2, schnellere Peripherals, Teiler 2 
oder 4 spart Strom.

Robert

von Birger M (Gast)


Lesenswert?

Hallo Robert,

danke erst einmal für deine Antwort! Das hilft mir schon einmal weiter.

Könnte mir vielleicht auch noch jemand sagen wofür die Abkürzung VPBDIV 
steht? DIV steht doch für divider also Teiler und wofür steht VPB?

Danke,
Birger

von Mark .. (mork)


Lesenswert?

VPB=VLSI Peripheral Bus.

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.