Hallo, ich habe jetzt einen Microblaze. Und möchte gerne, dass das
Programm darauf endlos läuft. Also dass immer wenn ich einen GPIO
DIP-Switch schalte, das auch zeitnah und ohne Interaktion wie Reset auf
den ebenfalls angeschlossenen LEDs angezeigt wird.
Ich habe dazu ein while(1){ Anweisungen } geschrieben. Aber: Das scheint
nur einmal zu laufen?! Oder brauche ich irgendwelche Interrupts, damit
die LEDs aktualisiert werden?
Hier der vollständige Text:
1 | #include "xgpio.h"
|
2 | #include "xparameters.h"
|
3 | #include "platform.h"
|
4 | #include "xil_printf.h"
|
5 |
|
6 | int main(void)
|
7 | {
|
8 | XGpio LED;
|
9 | XGpio DIP;
|
10 | XGpio PB;
|
11 |
|
12 | XGpio_Initialize(&LED, XPAR_LEDS_DEVICE_ID);
|
13 | XGpio_Initialize(&DIP, XPAR_DIP_SWITCHES_DEVICE_ID);
|
14 | XGpio_Initialize(&PB, XPAR_PUSH_BUTTONS_DEVICE_ID);
|
15 |
|
16 | XGpio_SetDataDirection(&LED, 1, 0x00000000);
|
17 | XGpio_SetDataDirection(&DIP, 1, 0x0000001F);
|
18 | XGpio_SetDataDirection(&PB, 1, 0x0000001F);
|
19 |
|
20 | Xuint32 data_DIP_old = 0;
|
21 | Xuint32 data_DIP_new = 0;
|
22 |
|
23 | char c = 0;
|
24 |
|
25 | while(1){
|
26 | data_DIP_new = XGpio_DiscreteRead(&DIP, 1);
|
27 |
|
28 | if(data_DIP_new != data_DIP_old)
|
29 | {
|
30 | data_DIP_old = data_DIP_new;
|
31 | XGpio_DiscreteWrite(&LED, 1, data_DIP_new);
|
32 | c = (char)data_DIP_new;
|
33 | xil_printf("%c",c);
|
34 | }
|
35 |
|
36 | }
|
37 | }
|
Der PushButton wird derzeit nicht verwendet, der UART schon, der soll
das an den DIP-Switches eingestelle Byte als Char senden. Das macht der
auch mehrmals wenn ich statt der while eine for Schleife verwenden. Bei
while wird nur einmal direkt nach dem Reset gesendet/LEDs zugewiesen.
Was muss ich also noch beachten?
Vielen Dank!