Am einfachsten geht das mit dem Timer und den Output Units. Schau dir
mal den User Guide zu dem MSP an, da findest du unter Timer jede Menge
Infos. Wenn du die Register passend setzt, dann kannst du bei einem
bestimmten Zählerstand den Ausgabe-Pin setzen und bei einem anderen
Zählerstand bzw. Timer-Überlauf wieder rücksetzen lassen.
Es gibt da auch ein schönes Beispiel von TI:
1 | //******************************************************************************
|
2 | // MSP-FET430X120 Demo - Timer_A, Toggle P1.1/TA0, Up Mode, 32kHz ACLK
|
3 | //
|
4 | // Description: Toggle P1.1 using hardware TA0 output. Timer_A is configured
|
5 | // for up mode with CCR0 defining period, TA0 also output on P1.1. In this
|
6 | // example, CCR0 is loaded with 10-1 and TA0 will toggle P1.1 at TACLK/10.
|
7 | // Thus the output frequency on P1.1 will be the TACLK/20. No CPU or software
|
8 | // resources required. Normal operating mode is LPM3.
|
9 | // ACLK = TACLK = 32kHz, MCLK = default DCO ~800kHz
|
10 | // As coded with TACLK = ACLK, P1.1 output frequency = 32768/20 = 1.6384kHz
|
11 | // //* External watch crystal installed on XIN XOUT is required for ACLK *//
|
12 | //
|
13 | // MSP430F123(2)
|
14 | // -----------------
|
15 | // /|\| XIN|-
|
16 | // | | | 32kHz
|
17 | // --|RST XOUT|-
|
18 | // | |
|
19 | // | P1.1/TA0|--> ACLK/20
|
20 | //
|
21 | // M. Buccini
|
22 | // Texas Instruments Inc.
|
23 | // Feb 2005
|
24 | // Built with IAR Embedded Workbench Version: 3.21A
|
25 | //******************************************************************************
|
26 |
|
27 | #include <msp430x12x2.h>
|
28 |
|
29 | void main(void)
|
30 | {
|
31 | WDTCTL = WDTPW + WDTHOLD; // Stop WDT
|
32 | P1DIR |= 0x02; // P1.1 output
|
33 | P1SEL |= 0x02; // P1.1 option select
|
34 | CCTL0 = OUTMOD_4; // CCR0 toggle mode
|
35 | CCR0 = 10-1;
|
36 | TACTL = TASSEL_1 + MC_1; // ACLK, upmode
|
37 |
|
38 | _BIS_SR(LPM3_bits); // Enter LPM3 w/interrupt
|
39 | }
|
Das müsstest du halt an deine Frequenz und Taktquelle anpassen. Wenn die
Ausgangsfrequenz halbwegs genau sein soll, müsstest du einen passenden
Quarz dran bauen.