1 | void init_Clock( void )
|
2 | { unsigned char i = 0;
|
3 | // Turning XT1 (32kHz) on
|
4 | _BIC_SR (OSCOFF); // Turn on XT1
|
5 | BCSCTL1 &= ~XTS; // LF mode
|
6 | for (i = 0xFFFF; i > 0; i--); // Time for osc. to set
|
7 | // XT1 is on
|
8 |
|
9 | // Turning XT2 (8MHz) on
|
10 | BCSCTL1 &= ~XT2OFF; // Turn on XT2
|
11 | do
|
12 | { // pruefroutine, ob 8 Mhz-oszillator schon stabil ist
|
13 | IFG1 &= ~OFIFG; // OSCFault flag loeschen (zeigt oszillatorfehler an)
|
14 | for (i=0xFF;i>0;i--); // warten, ob es wieder gesetzt wird
|
15 | }
|
16 | while ((IFG1 & OFIFG) != 0); // OSCFault immer noch gesetzt?
|
17 |
|
18 | BCSCTL2 |= SELM_2 + DIVM_0 + // MCLK source is XT2, MCLK div is 1
|
19 | SELS + DIVS_0; // SMCLK souce is DCO, SMCLK div is 1
|
20 | BCSCTL1 |= DIVA_0; // Divider for ACLK is 1
|
21 |
|
22 | // At this point we have the following clock configuration:
|
23 | // MCLK is 8 MHz (from XT2)
|
24 | // SMCLK is 8 MHz (from XT2)
|
25 | // ACLK is 32 kHz (from XT1)
|
26 | }
|
27 |
|
28 | void main(void)
|
29 | {
|
30 | _STOP_WATCHDOG(); //definiert in "msp430def.h"
|
31 |
|
32 | ptr_mw = &mw;
|
33 | ptr_mw0 = &mw0;
|
34 | ptr_mw1 = &mw1;
|
35 | ptr_mw2 = &mw2;
|
36 |
|
37 | P1SEL = 0x00; //Std.IO
|
38 | P1DIR = 0xFF; //alles Ausgänge
|
39 |
|
40 | P2SEL = 0x00; //Std.IO
|
41 | P2DIR = 0xFF; //alles Ausgänge
|
42 |
|
43 | P3SEL = 0xf0; //P3.0..3 Standard I/O; P3.4..7 Peripheral Modul Function (UART)
|
44 | P3DIR = 0x00; //P3.0..3 Ausgaenge; P3.4..7 = x
|
45 |
|
46 | P6SEL = 0xFF; //Peripheral Modul Function (ADC12)
|
47 |
|
48 | //init_Clock();
|
49 | timera_init();
|
50 | timerb_init();
|
51 | init_DAC();
|
52 | init_ADC();
|
53 | init_SIO();
|
54 |
|
55 |
|
56 | //Interruptfreigaben
|
57 | //ADC12IE = 0xFFFF; //Int-Freigabe für das Ergebnisregister ADC12MEM0
|
58 | //ADC12IE = ADC12IE2;
|
59 | ADC12IE = 0x0004; // ADC12 memory 0,2,
|
60 | //ADC12IE = 0x0001;
|
61 | TACCTL0 |= CCIE; //Timer A C/C Int Enable (für TACCR0)
|
62 |
|
63 | TBCCTL0 |= CCIE; //Tiemr_B C/C Int Enable (für TBCCR0)
|
64 |
|
65 | IE1 |= UTXIE0; //SIO0 TX-Int freigeben
|
66 |
|
67 | _BIS_SR(GIE); //GIE = 1, globale Interruptfreigabe
|
68 |
|
69 |
|
70 | TACTL |= MC_1; //Timer_A starten
|
71 | // CPU Takt
|
72 | DCOCTL = DCO0 + DCO1 + DCO2;
|
73 | BCSCTL1 = RSEL0 + RSEL1 + RSEL2;
|
74 | BCSCTL2 = SELM_0 + DIVM_0 + DIVS_0;
|
75 |
|
76 |
|
77 | while(1); //Endlosschleife - Warten auf Interrupts
|
78 |
|
79 | }
|
80 | void init_SIO(void)
|
81 | {
|
82 | //SIO0
|
83 | ME1 |= UTXE0; //Transmitter enablen
|
84 | U0CTL |= CHAR; //8 data bits, 1 stop bit, no parity (8N1)
|
85 | //U0TCTL |= 0x10; //ACLK als UCLK festlegen
|
86 | UTCTL0 |= SSEL1; // SMCLK als UCLK festlegen
|
87 | //U0BR0 = 0x03; //9600 baud aus 32.768 kHz erzeugen
|
88 | //U0MCTL = 0x4A; //Korrektur der Division (Tabelle auf 13-16)
|
89 | //U0BR0 = 0x41; // 19200 baud aus 8 MHz erzeugen
|
90 | //U0BR1 = 0x03; // siehe application note tabelle 1, seite 9
|
91 | //U0MCTL = 0x09; // keine korrektur der division noetig
|
92 | //UBR00=0xA0; UBR10=0x01; UMCTL0=0x00; /* uart0 8000000Hz 19198bps */
|
93 | //UBR00=0x41; UBR10=0x03; UMCTL0=0x09; /* uart0 8000000Hz 9600bps */
|
94 | UBR00=0x45; UBR10=0x00; UMCTL0=0xAA; /* uart0 8000000Hz 115107bp */
|
95 | U0BR1 = 0x00;
|
96 | U0CTL &= ~SWRST; //USART freigeben
|
97 | // IFG1 &= ~UTXIFG0; //initales Int-Flag löschen
|
98 | }
|