Guten Abend liebes Forum,
Keil verhält sich im Debugmodus unterschiedlich. Führe ich mein Programm
Step by Step aus, funktioniert es wie es soll, lass ich es normal
laufen, passiert gar nichts.
Das Programm liest über SPI den optischen Sensor ADNS3090 das Register
0x00 (ADNS_3090_PRODUCT_ID) aus. Wenn die SPI-Schnittstelle richtig
arbeitet (was sie tut) bekomme ich den Wert 0x07 zurück. Dieses frage
ich nun über eine if-Anweisung ab:
adns3090.c:
1 | void adns3090_STATUS (void)
|
2 | {
|
3 | ADNS3090_NPD_ON; /*Schalte Control_LED an*/
|
4 | ADNS3090_NSS_LOW; /*Chip-Select auf LOW*/
|
5 | status_result = adns3090_Read(SPI2, ADNS3090_PRODUCT_ID);
|
6 | ADNS3090_NSS_HIGH; /*Chip-Select auf HIGH*/
|
7 |
|
8 | if (status_result == 0x07)
|
9 | {
|
10 | DEBUG_LED_ON;
|
11 | }
|
12 | delay_ns(500);
|
13 | }
|
main.c
1 | int main (void)
|
2 | {
|
3 | startUp(); /*Alles was der uC braucht*/
|
4 | adns3090_STARTUP(); /*GPIO, RCC, SPI für den Betrieb des ADNS3090*/
|
5 | adns3090_STATUS(); /*Prüfe den Status*/
|
6 |
|
7 | while(1)
|
8 | {
|
9 | /*hier kommt die FIFO für die Bilddaten hin*/
|
10 | }
|
11 | }
|
Wenn ich dieses Programm Step-by-Step durchlaufe funktioniert alles
wunderbar, in der Variable status_result steht 0x07 und die Debug-LED
geht an. Dies trifft ebenfalls auch zu, wenn ich diese Funktion in die
while-Schleife stecke.
Lass ich es so laufen (mit F5) steht in der Variable 0x00 und die LED
geht nicht an.
Wie kann das sein?
Vielen Dank im voraus und Gruß
Daniel