Forum: Mikrocontroller und Digitale Elektronik Adresse in Enumeration hinterlegen


von karl (Gast)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

Frei nach Goethe:
Mehr Code!

von karl (Gast)


Lesenswert?

: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

von Sam .. (sam1994)


Lesenswert?

Steht doch klar und deutlich da: Ein Enum möchte Konstanten!

von karl (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.