Hallo, ich habe hier ein Zybo Board (Zynq 7010) und programmiere es Bare-Metal. Jetzt wollte ich eine AUX (AD6) verwenden über den XADC. Also habe ich im Block-Design ein XADC Wizard IP Core eingefügt, den AD6P_P/N ausgewählt und die Pins im IO Planner entsprechend verbunden. Jetzt habe ich ein Beispiel auf Basis des xadc polling Beispiels erstellt. In einer Schleife frage ich die XADCPS_CH_TEMP und (XADC_CH_AUX_MIN + 6) ab (500ms Interval). Der Wert vom XADCPS_CH_TEMP ändert sich, der AD6 bleibt immer gleich. Nach einem Reset ändert sich der AD6 (der Wert der dann aber ausgegeben wert stimmt, nur wird er eben nicht aktualisiert). Jemand eine Idee woran das liegen kann? Im Wizard habe ich Continuous ausgewählt und alle Alarme deaktiviert.
1 | int xadc_init(){ |
2 | XAdcPs_Config *ConfigPtr; |
3 | |
4 | int Status; |
5 | |
6 | ConfigPtr = XAdcPs_LookupConfig(XADC_DEVICE_ID); |
7 | if (ConfigPtr == NULL) { |
8 | return XST_FAILURE; |
9 | }
|
10 | XAdcPs_CfgInitialize(XAdcInstPtr, ConfigPtr, ConfigPtr->BaseAddress); |
11 | |
12 | Status = XAdcPs_SelfTest(XAdcInstPtr); |
13 | if (Status != XST_SUCCESS) { |
14 | return XST_FAILURE; |
15 | }
|
16 | XAdcPs_SetSequencerMode(XAdcInstPtr, XADCPS_SEQ_MODE_SAFE); |
17 | |
18 | |
19 | return 0; |
20 | }
|
21 | |
22 | int xadc_read(int channel){ |
23 | int val = 0; |
24 | val = XAdcPs_GetAdcData(XAdcInstPtr, channel); |
25 | return val; |
26 | }
|
27 | ...
|
28 | //in der main
|
29 | while(1){ |
30 | val = xadc_read(XADCPS_CH_TEMP); |
31 | xil_printf("xadc Temp: %d\r\n", val); |
32 | |
33 | val = xadc_read(XADC_CH_AUX_MIN + 6); |
34 | xil_printf("xadc AUX: %d\r\n", val); |
35 | }
|