Hallo zusammen,
anbei ein Stück Sourcecode, welches den MSP430 in den LPM4 versetzt.
Löst man über einen Schalter ( P3.0) einen Interrupt aus, wird der
Ausgang P 3.1 HIGH und gleich wieder LOW.
Am Oszilloskop kann ich sowohl das Interrupt Ereignis, als auch den HIGH
Low Pegel sehen. Soweit funktioniert das. Allerdings benötigt der MSP430
zum aufwachen nur 10 µs. Laut Datenblatt sollten das aber 300µs sein?
Jemand eine Idee warum das so ist?
1 | #include <msp430.h>
|
2 | int main(void)
|
3 | {
|
4 | //Initialize stage
|
5 |
|
6 | // Stop watchdog timer
|
7 | WDTCTL = WDTPW + WDTHOLD;
|
8 |
|
9 | // Defines Ports
|
10 | //Configure P3.1 Out for Measurement
|
11 | P3DIR |= BIT1;
|
12 | P3OUT &= ~BIT1;
|
13 |
|
14 | //Initialize Switch S1
|
15 | P3OUT &= ~BIT0;
|
16 |
|
17 | // P3.0 Lo/Hi edge
|
18 | P3IES &= ~BIT0;
|
19 |
|
20 | // P3.0 interrupt enabled
|
21 | P3IE |= BIT0;
|
22 |
|
23 | // P3.0 IFG cleared
|
24 | P3IFG &= ~BIT0;
|
25 |
|
26 | // P3.0 Pull-Down Resistor
|
27 | P3REN |= BIT0;
|
28 |
|
29 | for(;;)
|
30 | {
|
31 | __bis_SR_register(LPM4_bits + GIE);
|
32 | }
|
33 | }
|
34 |
|
35 | // Port 3 interrupt service routine
|
36 | #pragma vector=PORT3_VECTOR
|
37 | __interrupt void Port_3(void)
|
38 | {
|
39 | //Set TEST PIN P3.1/A13 = HIGH
|
40 | P3OUT |= BIT1;
|
41 |
|
42 | //Clear Interrupt Register
|
43 | P3IFG &= ~BIT0;
|
44 |
|
45 | //Set TEST PIN P3.1/A13 = LOW
|
46 | P3OUT &= ~BIT1;
|
47 | }
|
Beste Grüße,
Michael