MSP430 Sleep Funktion

Gast #6875113
Lesenswert?

Hallo,

für eine Anwendung wird ein MSP430 Mikrocontroller eingesetzt. Bestimmt 
IO Pins müssen unterschiedlich von high auf low und so weiter gesetzt 
werden.
Dazu benötige ich quasi eine Sleep Funktion. mit delay und while 
Schleife möchte ich allerdings nicht benutzen. Gibt es bereits schon 
Implementierungen auf Interrupt Basis die sowas ermöglichen?
Gast #6875385
Lesenswert?

Die Variante die dir nicht passt, wäre ja die folgende, oder?
1
#define MCLK (8000000)
2
void delay_ms(unsigned int delay_in_milliseconds) {
3
  do {
4
    __delay_cycles(1000 / MCLK);
5
  } while(--delay_in_milliseconds > 0);
6
}

Geht es darum, dass ein so generiertes "Delay" relativ ungenau ist - 
oder geht es darum, dass der Mikrocontroller so "busy" wartet?
Gast #6875429
Lesenswert?

Konkret könnte dies so ähnlich wie folgt aussehen:
1
void config_sys_tick(void) {
2
  TB0CTL |= TBSSEL_2;
3
  TB0CCTL0 &= ~CCIE;
4
  TB0CCR0 = 16000000 * 0.01; //T = 10 ms @ SMCLK = 16 MHz
5
  TB0CTL &= ~MC;
6
  TB0CTL |= TBCLR;
7
}
8

9
void start_sys_tick(void) {
10
  TB0CCTL0 |= CCIE;
11
  TB0CTL |= MC_1;
12
  __enable_interrupt();
13
}
14

15
int main(void) {
16
  config_sys_tick();
17
  start_sys_tick();
18
}
19

20
unsigned long Sys_Tick_Count = 0;
21

22
#pragma vector=TIMER0_B0_VECTOR
23
__interrupt void My_Application_Loop(void) {
24
  ++Sys_Tick_Count;
25

26
  {
27
    //Deine Anwendung... Dieser "Loop" wird nun alle 10 ms ausgeführt.
28
    //(Sys_Tick_Count muss da auf jeden Fall noch periodisch irgendwie
29
    //zurückgesetzt werden.)
30
  }
31

32
  __bis_SR_register(LPM0_bits + GIE);
33
}

Andererseits könntest du auch jeweils einen entsprechend konfigurierten 
Timer starten und in einer Schlaufe das Überlauf-Flag pollen. Falls du 
es aber eben nicht "busy" haben möchtest, könntest du statt pollen dann 
auch einfach den Interrupt benutzen, der bei Überlauf "abgefeuert" 
wird...

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