RT2500 SMCLK

Gast #1337241
Hallo,

ich programmiere hier mit dem Tool RT2500 und hab mich mal mit den 
Clock´s befasst. Laut Datenblatt hat der MSP430F2274 keinen externen 
Clock. Laut Datenblatt kann der dieser MSP bis 16Mhz arbeiten, aber 
welcher Clock dennn nun verbaut ist steht niergends. Ich woll die auf 
dem Tool befindlichen LED´s jeweils mit den verschiedenen Clocks blinken 
lassen. Bei ACLK passiert garnichts. Es wird kein Interrupt aufgerufen. 
Verwende ich stattdessen SMCLK in der üblichen Initialiserung also über 
den DCO dann blinken sie. Jedoch in undefinierter Frequenz. Wenn ich von 
16Mhz ausgehe und mit dem Timer nach 1000 Schritten (mit Teilung 8) 
einen Interrupt auslöse und dann nochmal in der ISR bis 1000 zähle 
sollte ich bei 16Mhz bei 1s sein. (ja die Periode der LED wird dann 
doppelt so groß sein). Praktisch jedoch blinkt die LED jedoch ungefähr 5 
mal langsamer.

Auf was ist der DC0 standardmäßig eingestellt? Warum kan ich keinen ACLK 
verwenden.
Gast #1341175
Wäre echt cool, wenn mir jemand Hilfe beim Einstellen des DCO geben 
könnte. Überall steht was anderes. User Guide ist dort nicht genau genug 
und in den Beispielen werden nur Definitions benutzt und kein Bitweises 
setzen wie ich es zum verstehen anwenden will. Wenn ich das somache wie 
in den Beispielen ist der Takt des DCO´s bereits nach 1 Sekunde nicht 
mehr zu gebrauchen.
Zum Test habe ich mit dem RT2500 Tool versucht unter Nutzung 2 
verschiedener Takte einen 1s Takt zu erzeugen.
1
volatile unsigned int cgreen,cred,c;
2
void main( void )
3
{  
4
  WDTCTL = WDTPW + WDTHOLD;
5
  
6
  //BCSCTL2 |= SELS;              //VLOCLK an SMCLK/ACLK durchschalten     
7
  
8
  BCSCTL1 = CALBC1_1MHZ;                    // Set DCO to 1MHz
9
  DCOCTL = CALDCO_1MHZ; 
10
  
11
  BCSCTL3 |= LFXT1S_2;          //VLOCLK freischalten 12kHz
12
 
13
 TACCTL0 |= CCIE;              //Capture/Compare Interrupt enable
14
  TACTL = TASSEL_1 + ID_0 + MC_1; //ACLK + Devider 1 + UP-Mode
15
  TACCR0 = 12000;
16

17
  TBCCTL0 |= CCIE;
18
  TBCTL = TBSSEL_2 + ID_0 + MC_1; //SMCLK + Devider 1 + UP-Mode
19
  TBCCR0 = 1000;
20
    
21
  _BIS_SR(LPM0_bits + GIE);
22
}
23

24
#pragma vector=TIMERA0_VECTOR
25
__interrupt void Timer_A (void)
26
{
27
  P1OUT ^= BIT0;         //LED ROT toggeln
28
}
29

30
#pragma vector=TIMERB0_VECTOR
31
__interrupt void Timer_B (void)
32
{
33
  if (cgreen==999)
34
  {
35
    P1OUT ^= BIT1;         //LED grün toggeln
36
  }
37
}

PDIR usw sind richtig gesetzt

Wie gesagt ist einer (oder beide) der Takte total ungenau. Wie kann man 
festlegen welche Frequenz der DCO ausgibt? Die Formeln aus dem User 
Guide ist für mich verwirrend, denn da ist die Rede von f_dco und 
f_dco+1 Woher soll ich diese Werte wissen?

Wäre über Hilfe sehr dankbar.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.