Forum: Mikrocontroller und Digitale Elektronik Programmierung TI MSP432


von M. M. (blackcow)


Lesenswert?

Eigentlich komm ich aus der AVR-Ecke, spiele aber nun mit einem MSP432 
Launchpad herum und bin mir nicht ganz sicher wie ich dieses 
programmieren soll. Beispielsweise will ich mit dem Timer_A drei 
PWM-Signale erzeugen. Also mit CCR0 die Frequenz und mit CCR1-3 jeweils 
den Duty-Cycle festlegen. Soweit sogut, nun habe ich aus einem Tutorial 
Initialisierungsfunktionen dieser Art entnommen:
1
/* DriverLib Includes */
2
#include <ti/devices/msp432p4xx/driverlib/driverlib.h>
3
4
initTimers(){
5
//Timer_A -> PWM generation
6
const Timer_A_UpModeConfig upConfig = {
7
TIMER_A_CLOCKSOURCE_MCLK,              // MCLK Clock Source = 24MHz
8
TIMER_A_CLOCKSOURCE_DIVIDER_1,         // MCLK/1 = 24MHz
9
2400,                                  // 2400 tick period = 10kHz
10
TIMER_A_TAIE_INTERRUPT_DISABLE,        // Disable Timer interrupt
11
TIMER_A_CCIE_CCR0_INTERRUPT_DISABLE,   // Disable CCR0 interrupt
12
TIMER_A_DO_CLEAR                       // Clear value
13
};
14
Timer_A_configureUpMode(TIMER_A1_BASE, &upConfig);
15
Timer_A_startCounter(TIMER_A1_BASE, TIMER_A_UP_MODE);
16
return;
17
}
18
19
main(){
20
while(1){}
21
}
22
23
// Timer_A PWM ISR
24
void TA1_0_IRQHandler(void){
25
Timer_A_clearCaptureCompareInterrupt(TIMER_A1_BASE, TIMER_A_CAPTURECOMPARE_REGISTER_0);
26
}

Als ich dann im Internet suchte, wie ich die CCR Interrupts einschalten 
kann fand ich vor allem diesen 'Style':
1
/*** Clocks and GPIO set-up would be here and are in the downloadable
2
example, but have not been shown to reduce the code size ***/
3
 
4
  /*** Timer0_A Set-Up ***/
5
    TA0CCR0 |= 1000-1;
6
    TA0CCR1 |= 1;
7
    TA0CCTL1 |= OUTMOD_7;
8
    TA0CTL |= TASSEL_2 + MC_1;
9
 
10
  /*** Timer1_A Set-Up ***/
11
    TA1CCR0 |= 4000-1;
12
    TA1CCTL0 |= CCIE;
13
    TA1CTL |= TASSEL_2 + MC_1;
14
 
15
    _BIS_SR(LPM0_bits + GIE);
16
}
17
 
18
#pragma vector=TIMER1_A0_VECTOR
19
   __interrupt void Timer1_A0 (void) {
20
 
21
    TA0CCR1 += IncDec_PWM*2;
22
 
23
    if( TA0CCR1 > 998 || TA0CCR1 < 2 )
24
       IncDec_PWM = -IncDec_PWM;
25
}

Dort werden die Register direkt beschrieben, so wie ich es bei den 
Atmegas immer mache. Also ohne diese Funktionen. Mir geht's jetzt nicht 
direkt um die PWM, sondern um die Art zu Programmieren. Diese Funktionen 
erscheinen mir eher umständlich und verlagern das Problem vom Wissen der 
Registernamen zum Wissen der richtigen Funktionen. Wobei diese 
Funktionen zwar manchmal bequemer sind, aber eine gute Dokumentation 
habe ich nicht gefunden. Außerdem wird durch den Overhead 
Programmspeicher belegt und der Controller wird langsamer?! Kann mir 
jemand aus der Embedded Ecke sagen wie das bei Profis gehandhabt wird?

von Clemens L. (c_l)


Lesenswert?

M. M. schrieb:
> Wobei diese Funktionen zwar manchmal bequemer sind, aber eine gute
> Dokumentation habe ich nicht gefunden.

Die Dokumentation der driverlib findest du im driverlib-Paket. :)

Und so oder so muss man die Hardware selbst verstehen.

> Außerdem wird durch den Overhead Programmspeicher belegt

Der MSP432 hat die driverlib auch im ROM.

> und der Controller wird langsamer?!

Du kannst auch alles inlinen.

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.