Hallo, ich drehe mich gerade im Kreis, denn ich versuche eine Adresse in einer Enumeration zu speichern. Wie mache ich denn das. Der C-Compiler meckert immer bei "DMA6_Config_PAD_Address = (&U2RXREG)". Danke schonmal.
:D Ok. Moment^^
1 | // DMA Configurations
|
2 | typedef enum DMA_INIT_VALUES_enum { |
3 | /***** DMA0 *****/
|
4 | DMA0_Config_Control = 0, |
5 | DMA0_Config_Irq_Select = 0, |
6 | DMA0_Config_Irq_Priority = 0, |
7 | DMA0_Config_Irq_enable = 0, |
8 | DMA0_Config_STA_Address = 0, |
9 | DMA0_Config_STB_Address = 0, |
10 | DMA0_Config_PAD_Address = 0, |
11 | DMA0_Config_Count = 0, |
12 | |
13 | /***** DMA1 *****/
|
14 | DMA1_Config_Control = 0, |
15 | DMA1_Config_Irq_Select = 0, |
16 | DMA1_Config_Irq_Priority = 0, |
17 | DMA1_Config_Irq_enable = 0, |
18 | DMA1_Config_STA_Address = 0, |
19 | DMA1_Config_STB_Address = 0, |
20 | DMA1_Config_PAD_Address = 0, |
21 | DMA1_Config_Count = 0, |
22 | |
23 | |
24 | /***** DMA2 *****/
|
25 | DMA2_Config_Control = 0, |
26 | DMA2_Config_Irq_Select = 0, |
27 | DMA2_Config_Irq_Priority = 0, |
28 | DMA2_Config_Irq_enable = 0, |
29 | DMA2_Config_STA_Address = 0, |
30 | DMA2_Config_STB_Address = 0, |
31 | DMA2_Config_PAD_Address = 0, |
32 | DMA2_Config_Count = 0, |
33 | |
34 | |
35 | /***** DMA3 *****/
|
36 | DMA3_Config_Control = 0, |
37 | DMA3_Config_Irq_Select = 0, |
38 | DMA3_Config_Irq_Priority = 0, |
39 | DMA3_Config_Irq_enable = 0, |
40 | DMA3_Config_STA_Address = 0, |
41 | DMA3_Config_STB_Address = 0, |
42 | DMA3_Config_PAD_Address = 0, |
43 | DMA3_Config_Count = 0, |
44 | |
45 | |
46 | /***** DMA4 *****/
|
47 | DMA4_Config_Control = 0, |
48 | DMA4_Config_Irq_Select = 0, |
49 | DMA4_Config_Irq_Priority = 0, |
50 | DMA4_Config_Irq_enable = 0, |
51 | DMA4_Config_STA_Address = 0, |
52 | DMA4_Config_STB_Address = 0, |
53 | DMA4_Config_PAD_Address = 0, |
54 | DMA4_Config_Count = 0, |
55 | |
56 | |
57 | /***** DMA5 *****/
|
58 | DMA5_Config_Control = 0, |
59 | DMA5_Config_Irq_Select = 0, |
60 | DMA5_Config_Irq_Priority = 0, |
61 | DMA5_Config_Irq_enable = 0, |
62 | DMA5_Config_STA_Address = 0, |
63 | DMA5_Config_STB_Address = 0, |
64 | DMA5_Config_PAD_Address = 0, |
65 | DMA5_Config_Count = 0, |
66 | |
67 | /***** DMA6 *****/
|
68 | DMA6_Config_Control = ((DMA_Control_CHEN_disabled << DMA_Control_CHEN_gp) | |
69 | (DMA_Control_SIZE_word << DMA_Control_SIZE_gp) | |
70 | (DMA_Control_DIR_read_peripheral << DMA_Control_DIR_gp) | |
71 | (DMA_Control_HALF_init_irq_full << DMA_Control_HALF_gp) | |
72 | (DMA_Control_NULLW_disabled << DMA_Control_NULLW_gp) | |
73 | (DMA_Control_AMODE_reg_indirect_post << DMA_Control_AMODE_gp) | |
74 | (DMA_Control_MODE_continuous << DMA_Control_MODE_gp)), |
75 | DMA6_Config_Irq_Select = DMA_Irq_IRQSEL_UART2RX, |
76 | DMA6_Config_Irq_Priority = DMA_INT_PRI_1, |
77 | DMA6_Config_Irq_enable = TRUE, |
78 | DMA6_Config_STA_Address = (void*)(DMA_BufferA[DMA6]), |
79 | DMA6_Config_STB_Address = (int*)(DMA_BufferB[DMA6]), |
80 | DMA6_Config_PAD_Address = (&U2RXREG), |
81 | DMA6_Config_Count = 1, |
82 | |
83 | /***** DMA7 *****/
|
84 | DMA7_Config_Control = ((DMA_Control_CHEN_disabled << DMA_Control_CHEN_gp) | |
85 | (DMA_Control_SIZE_word << DMA_Control_SIZE_gp) | |
86 | (DMA_Control_DIR_read_peripheral << DMA_Control_DIR_gp) | |
87 | (DMA_Control_HALF_init_irq_full << DMA_Control_HALF_gp) | |
88 | (DMA_Control_NULLW_disabled << DMA_Control_NULLW_gp) | |
89 | (DMA_Control_AMODE_reg_indirect_post << DMA_Control_AMODE_gp) | |
90 | (DMA_Control_MODE_continuous << DMA_Control_MODE_gp)), |
91 | DMA7_Config_Irq_Select = DMA_Irq_IRQSEL_UART2TX, |
92 | DMA7_Config_Irq_Priority = DMA_INT_PRI_1, |
93 | DMA7_Config_Irq_enable = TRUE, |
94 | DMA7_Config_STA_Address = (int)(DMA_BufferA[DMA7]), |
95 | DMA7_Config_STB_Address = (int)(DMA_BufferB[DMA7]), |
96 | DMA7_Config_PAD_Address = (&U2TXREG), |
97 | DMA7_Config_Count = 1 |
98 | }DMA_Init_Values; |
99 | |
100 | void hw_Open_DMA6 (void) |
101 | {
|
102 | IEC4bits.DMA6IE = 0; // Disable DMA Interrupt |
103 | |
104 | DMA6CON = DMA6_Config_Control; |
105 | DMA6REQ = DMA6_Config_Irq_Select; |
106 | DMA6STA = (unsigned int) Sta_Address - (unsigned int)&_DMA_BASE; |
107 | DMA6STB = (unsigned int) Stb_Address - (unsigned int)&_DMA_BASE; |
108 | DMA6PAD = Pad_Address; |
109 | DMA6CNT = DMA6_Config_Count-1; |
110 | |
111 | IPC17bits.DMA6IP = DMA6_Config_Irq_Priority; // Set DMA Interrupt Priority |
112 | IFS4bits.DMA6IF = 0; // Clear DMA Interrupt Flag |
113 | IEC4bits.DMA6IE = DMA6_Config_Irq_enable; // Enable / Disable DMA Interrupt |
114 | DMA6CONbits.CHEN = 1; // Enable DMA Channel |
115 | }
|
Achtung, die Sta, Stb und Pad-Adressenamen in der Funktion stimmen noch nicht. Fehlermeldung des Compilers: hw_DMA.c:262: error: enumerator value for 'DMA6_Config_STA_Address' is not an integer constant hw_DMA.c:263: error: enumerator value for 'DMA6_Config_STB_Address' is not an integer constant hw_DMA.c:264: error: enumerator value for 'DMA6_Config_PAD_Address' is not an integer constant hw_DMA.c:278: error: enumerator value for 'DMA7_Config_STA_Address' is not an integer constant hw_DMA.c:279: error: enumerator value for 'DMA7_Config_STB_Address' is not an integer constant hw_DMA.c:280: error: enumerator value for 'DMA7_Config_PAD_Address' is not an integer constant
Jo stimmt, mensch. Ich machs dementsprechend mit #define. Irgendwie nich mehr so ganz fit. Nacht :D
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.