Adresse in Enumeration hinterlegen

Gast #2176882
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren