Also ich hab das Programm jetzt nocheinmal neu geschrieben, wobei ich es
so einfach wie möglich gehalten habe und dabei nur den Timer von 65000
runterzahälen lasse und durch die interrupt Funktion dann die LED´s
einschalten lasse.
Auf jeden Fall funktioniert das nun, ich weiß zwar nicht an was es
gelgen hat und wo der Fehler in dem anderen Programm liegt aber is ja
schon mal was^^
Hier das neue Prog
1 | #include <XE167F.h>
|
2 |
|
3 | void initLED();
|
4 | void timer6_init();
|
5 | void unlockProtectedRegister(void);
|
6 |
|
7 |
|
8 |
|
9 | void timer_tic() interrupt 0x24 //Interruptroutine für Timer6
|
10 | {
|
11 | P10_OUT = 0x00; //LED einschalten
|
12 | }
|
13 |
|
14 | int main(void)
|
15 | {
|
16 | initLED(); // P10 auf Ausgaberegister
|
17 | timer6_init();
|
18 |
|
19 | P10_OUT = 0xff; //LED´s auschalten
|
20 |
|
21 | while(1);
|
22 |
|
23 | return 0;
|
24 | }
|
25 |
|
26 | void timer6_init()
|
27 | {
|
28 | GPT12E_T6 = 65000;
|
29 | GPT12E_T6CON_T6UDE = 1; //External Up/Down Enable
|
30 | GPT12E_T6CON_T6UD = 1; //Timer T6 Counts Down
|
31 | GPT12E_T6CON |= 0x0106; //Prescaler gpt/2,Timer Mode,Prescale Factor 128
|
32 |
|
33 | GPT12E_T6CON_T6R = 1; //Timer T6 runs
|
34 | GPT12E_T6IC = 0x04E; //Interrupt enable, int.priority
|
35 |
|
36 | PSW_IEN = 1;
|
37 | }
|
38 |
|
39 | void initLED()
|
40 | {
|
41 | //Einstellen der Port Input/Output Control Register: Pn_IOCRx
|
42 | // -> User's Manual 7.2.5 - Seite 471
|
43 | P10_IOCR00 = 0x0080; // P10.0 auf Ausgaberegister
|
44 | P10_IOCR01 = 0x0080; // P10.1 auf Ausgaberegister
|
45 | P10_IOCR02 = 0x0080; // P10.2 -"-
|
46 | P10_IOCR03 = 0x0080; // P10.3 -"-
|
47 | P10_IOCR04 = 0x0080; // P10.4 -"-
|
48 | P10_IOCR05 = 0x0080; // P10.5 -"-
|
49 | P10_IOCR06 = 0x0080; // P10.6 -"-
|
50 | P10_IOCR07 = 0x0080; // P10.7 -"-
|
51 |
|
52 | unlockProtectedRegister();
|
53 | GPT12E_KSCCFG = 0x0003;
|
54 | }
|
55 |
|
56 | void unlockProtectedRegister(void) //XE167F Spezifisch um auf bestimmte Register zugreifen zu dürfen oder so...^^
|
57 | {
|
58 | unsigned int pass;
|
59 |
|
60 | SCU_SLC = 0xAAAA;
|
61 | SCU_SLC = 0x5554;
|
62 |
|
63 | pass = SCU_SLS & 0x00FF;
|
64 | pass = (~pass) & 0x00FF;
|
65 |
|
66 | SCU_SLC = 0x9600 | pass;
|
67 | SCU_SLC = 0x0000;
|
68 | }
|
Werd nun nach und nach einmal das was ich gegenüber dem alten Programm
geändert habe wieder zurück ändern um daraus vlt zu sehen wo es gahakt
hat.
Danke trozdem für eure schnellen antworten.
Wobei hätte an der Stelle gleich noch ne Frage zu den DIP-Schaltern auf
meinem Board.
Weil ich die ein oder andere Aufgabe zu Programmieren habe anhand der
man in abhängigkeit der Schalter verschiedene Betriebsarten auswählen
können soll oder einen Interrupt über die Schalter auslösen lassen soll.
In der Beschreibung steht das die Schlater mit den IO-Ports 4.0-4.3 als
"pullup-devices" verbunden sind.
Ich hab die Ports dann einmal so declariert
1 | P4_IOCR00 = 0x0020; //P4.0 1. Schalter
|
2 | P4_IOCR01 = 0x0020;
|
3 | P4_IOCR02 = 0x0020;
|
4 | P4_IOCR03 = 0x0020;
|
Entspricht: Pull-up device connected, Input value = 1; pull-up
Ich hab dann schon öfters versucht in abhängikeit der
Schalterstellungen, sprich
oder ähnliches in verschieden Programmstücke zu verzweigen usw.
Aber egal was ich mit den schaltern mache, habe ich bis jetzt noch nie
eine andere Reaktion erlebt als die der Standarteinstellung.
Weiß da jemand genaueres wie man die Schalterstellung abfragen und
danach verzweigen kann bzw. einen interrupt durch einen schalter
auslösen kann ?