Rev 1 | Rev 41 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1 | Rev 24 | ||
---|---|---|---|
1 | /*#######################################################################################*/ |
1 | /*#######################################################################################*/ |
2 | /* !!! THIS IS NOT FREE SOFTWARE !!! */ |
2 | /* !!! THIS IS NOT FREE SOFTWARE !!! */ |
3 | /*#######################################################################################*/ |
3 | /*#######################################################################################*/ |
4 | // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
4 | // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
5 | // + Copyright (c) 2008 Ingo Busker, Holger Buss |
5 | // + Copyright (c) 2008 Ingo Busker, Holger Buss |
6 | // + Nur für den privaten Gebrauch |
6 | // + Nur für den privaten Gebrauch |
7 | // + FOR NON COMMERCIAL USE ONLY |
7 | // + FOR NON COMMERCIAL USE ONLY |
8 | // + www.MikroKopter.com |
8 | // + www.MikroKopter.com |
9 | // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
9 | // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
10 | // + Es gilt für das gesamte Projekt (Hardware, Software, Binärfiles, Sourcecode und Dokumentation), |
10 | // + Es gilt für das gesamte Projekt (Hardware, Software, Binärfiles, Sourcecode und Dokumentation), |
11 | // + dass eine Nutzung (auch auszugsweise) nur für den privaten (nicht-kommerziellen) Gebrauch zulässig ist. |
11 | // + dass eine Nutzung (auch auszugsweise) nur für den privaten (nicht-kommerziellen) Gebrauch zulässig ist. |
12 | // + Sollten direkte oder indirekte kommerzielle Absichten verfolgt werden, ist mit uns (info@mikrokopter.de) Kontakt |
12 | // + Sollten direkte oder indirekte kommerzielle Absichten verfolgt werden, ist mit uns (info@mikrokopter.de) Kontakt |
13 | // + bzgl. der Nutzungsbedingungen aufzunehmen. |
13 | // + bzgl. der Nutzungsbedingungen aufzunehmen. |
14 | // + Eine kommerzielle Nutzung ist z.B.Verkauf von MikroKoptern, Bestückung und Verkauf von Platinen oder Bausätzen, |
14 | // + Eine kommerzielle Nutzung ist z.B.Verkauf von MikroKoptern, Bestückung und Verkauf von Platinen oder Bausätzen, |
15 | // + Verkauf von Luftbildaufnahmen, usw. |
15 | // + Verkauf von Luftbildaufnahmen, usw. |
16 | // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
16 | // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
17 | // + Werden Teile des Quellcodes (mit oder ohne Modifikation) weiterverwendet oder veröffentlicht, |
17 | // + Werden Teile des Quellcodes (mit oder ohne Modifikation) weiterverwendet oder veröffentlicht, |
18 | // + unterliegen sie auch diesen Nutzungsbedingungen und diese Nutzungsbedingungen incl. Copyright müssen dann beiliegen |
18 | // + unterliegen sie auch diesen Nutzungsbedingungen und diese Nutzungsbedingungen incl. Copyright müssen dann beiliegen |
19 | // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
19 | // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
20 | // + Sollte die Software (auch auszugesweise) oder sonstige Informationen des MikroKopter-Projekts |
20 | // + Sollte die Software (auch auszugesweise) oder sonstige Informationen des MikroKopter-Projekts |
21 | // + auf anderen Webseiten oder sonstigen Medien veröffentlicht werden, muss unsere Webseite "http://www.mikrokopter.de" |
21 | // + auf anderen Webseiten oder sonstigen Medien veröffentlicht werden, muss unsere Webseite "http://www.mikrokopter.de" |
22 | // + eindeutig als Ursprung verlinkt werden |
22 | // + eindeutig als Ursprung verlinkt werden |
23 | // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
23 | // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
24 | // + Keine Gewähr auf Fehlerfreiheit, Vollständigkeit oder Funktion |
24 | // + Keine Gewähr auf Fehlerfreiheit, Vollständigkeit oder Funktion |
25 | // + Benutzung auf eigene Gefahr |
25 | // + Benutzung auf eigene Gefahr |
26 | // + Wir übernehmen keinerlei Haftung für direkte oder indirekte Personen- oder Sachschäden |
26 | // + Wir übernehmen keinerlei Haftung für direkte oder indirekte Personen- oder Sachschäden |
27 | // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
27 | // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
28 | // + Die PORTIERUNG der Software (oder Teile davon) auf andere Systeme (ausser der Hardware von www.mikrokopter.de) ist nur |
28 | // + Die PORTIERUNG der Software (oder Teile davon) auf andere Systeme (ausser der Hardware von www.mikrokopter.de) ist nur |
29 | // + mit unserer Zustimmung zulässig |
29 | // + mit unserer Zustimmung zulässig |
30 | // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
30 | // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
31 | // + Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist hiervon nicht betroffen |
31 | // + Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist hiervon nicht betroffen |
32 | // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
32 | // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
33 | // + Redistributions of source code (with or without modifications) must retain the above copyright notice, |
33 | // + Redistributions of source code (with or without modifications) must retain the above copyright notice, |
34 | // + this list of conditions and the following disclaimer. |
34 | // + this list of conditions and the following disclaimer. |
35 | // + * Neither the name of the copyright holders nor the names of contributors may be used to endorse or promote products derived |
35 | // + * Neither the name of the copyright holders nor the names of contributors may be used to endorse or promote products derived |
36 | // + from this software without specific prior written permission. |
36 | // + from this software without specific prior written permission. |
37 | // + * The use of this project (hardware, software, binary files, sources and documentation) is only permitted |
37 | // + * The use of this project (hardware, software, binary files, sources and documentation) is only permitted |
38 | // + for non-commercial use (directly or indirectly) |
38 | // + for non-commercial use (directly or indirectly) |
39 | // + Commercial use (for excample: selling of MikroKopters, selling of PCBs, assembly, ...) is only permitted |
39 | // + Commercial use (for excample: selling of MikroKopters, selling of PCBs, assembly, ...) is only permitted |
40 | // + with our written permission |
40 | // + with our written permission |
41 | // + * If sources or documentations are redistributet on other webpages, out webpage (http://www.MikroKopter.de) must be |
41 | // + * If sources or documentations are redistributet on other webpages, out webpage (http://www.MikroKopter.de) must be |
42 | // + clearly linked as origin |
42 | // + clearly linked as origin |
43 | // + * PORTING this software (or part of it) to systems (other than hardware from www.mikrokopter.de) is NOT allowed |
43 | // + * PORTING this software (or part of it) to systems (other than hardware from www.mikrokopter.de) is NOT allowed |
44 | // |
44 | // |
45 | // + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
45 | // + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
46 | // + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
46 | // + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
47 | // + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
47 | // + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
48 | // + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
48 | // + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
49 | // + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
49 | // + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
50 | // + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
50 | // + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
51 | // + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
51 | // + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
52 | // + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
52 | // + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
53 | // + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
53 | // + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
54 | // + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
54 | // + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
55 | // + POSSIBILITY OF SUCH DAMAGE. |
55 | // + POSSIBILITY OF SUCH DAMAGE. |
56 | // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
56 | // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
57 | #include "main.h" |
57 | #include "91x_lib.h" |
58 | 58 | ||
59 | //________________________________________________________________________________________________________________________________________ |
59 | //________________________________________________________________________________________________________________________________________ |
60 | // Module name: fat16.c |
60 | // Module name: ssc.c |
61 | // Compiler used: avr-gcc 3.4.5 |
61 | // Compiler used: avr-gcc 3.4.5 |
62 | // Last Modifikation: 24.07.2007 |
62 | // Last Modifikation: 24.07.2007 |
63 | // Version: 1.02 |
63 | // Version: 1.02 |
64 | // Authors: Stephan Busker |
64 | // Authors: Stephan Busker |
65 | // Description: Source files for access to the synchrnous serial channel. |
65 | // Description: Source files for access to the synchrnous serial channel. |
66 | // Copyright (C) 2007 Stephan Busker |
66 | // Copyright (C) 2007 Stephan Busker |
67 | //........................................................................................................................................ |
67 | //........................................................................................................................................ |
68 | // Functions: extern void SSC_Init(void); |
68 | // ext. Functions: extern void SSC_Init(void); |
69 | // extern u8 SSC_GetChar (void); |
69 | // extern u8 SSC_GetChar (void); |
70 | // extern void SSC_PutChar (u8 Byte); |
70 | // extern void SSC_PutChar (u8 Byte); |
71 | // extern void SSC_Disable(void); |
71 | // extern void SSC_Disable(void); |
72 | // extern void SSC_Enable(void); |
72 | // extern void SSC_Enable(void); |
- | 73 | // extern void SSC_ClearRxFifo(); |
|
73 | //........................................................................................................................................ |
74 | //........................................................................................................................................ |
74 | // ext. functions: extern u8 SDC_GetSector (unsigned long,u8 *); |
- | |
75 | // extern u8 SDC_PutSector (unsigned long,u8 *); |
- | |
76 | //........................................................................................................................................ |
- | |
77 | // |
- | |
78 | // URL: www.Mikro-Control.de |
75 | // URL: www.Mikro-Control.de |
79 | // mailto: stephan.busker@mikro-control.de |
76 | // mailto: stephan.busker@mikro-control.de |
80 | //________________________________________________________________________________________________________________________________________ |
77 | //________________________________________________________________________________________________________________________________________ |
81 | 78 | ||
82 | 79 | ||
- | 80 | ||
- | 81 | //________________________________________________________________________________________________________________________________________ |
|
- | 82 | // Function: SSC_Enable(void); |
|
- | 83 | // |
|
- | 84 | // Description: This function enables chipselect of the sdcard (active low) |
|
- | 85 | // |
|
- | 86 | // |
|
- | 87 | // Returnvalue: none |
|
- | 88 | //________________________________________________________________________________________________________________________________________ |
|
- | 89 | ||
- | 90 | void SSC_Enable(void) |
|
- | 91 | { |
|
- | 92 | // enable chipselect of the sd-card (P5.4 -> SD-CS, active low). |
|
- | 93 | GPIO_WriteBit(GPIO5, GPIO_Pin_4 , Bit_RESET); |
|
83 | 94 | } |
|
- | 95 | ||
- | 96 | //________________________________________________________________________________________________________________________________________ |
|
- | 97 | // Function: SSC_Disable(void); |
|
- | 98 | // |
|
- | 99 | // Description: This function disables chipselect of the sdcard (active low) |
|
- | 100 | // |
|
- | 101 | // |
|
- | 102 | // Returnvalue: none |
|
- | 103 | //________________________________________________________________________________________________________________________________________ |
|
- | 104 | ||
- | 105 | void SSC_Disable(void) |
|
- | 106 | { |
|
- | 107 | // disable chipselect of the sd-card (P5.4 -> SD-CS, active low). |
|
- | 108 | GPIO_WriteBit(GPIO5, GPIO_Pin_4 , Bit_SET); |
|
- | 109 | } |
|
- | 110 | ||
84 | 111 | ||
85 | //________________________________________________________________________________________________________________________________________ |
112 | //________________________________________________________________________________________________________________________________________ |
86 | // Funtion: SSC_Init(void); |
113 | // Function: SSC_Init(void); |
87 | // |
114 | // |
88 | // Description: This function initialises the synchronus serial channel to the sdcard. |
115 | // Description: This function initialises the synchronus serial channel to the sdcard. |
89 | // |
116 | // |
90 | // |
117 | // |
91 | // Returnvalue: none |
118 | // Returnvalue: none |
92 | //________________________________________________________________________________________________________________________________________ |
119 | //________________________________________________________________________________________________________________________________________ |
93 | 120 | ||
94 | void SSC_Init(void) |
121 | void SSC_Init(void) |
95 | { |
122 | { |
- | 123 | GPIO_InitTypeDef GPIO_InitStructure; |
|
- | 124 | SSP_InitTypeDef SSP_InitStructure; |
|
- | 125 | WIU_InitTypeDef WIU_InitStructure; |
|
- | 126 | // enable APB clock for SPI1 |
|
- | 127 | SCU_APBPeriphClockConfig(__SSP1 ,ENABLE); |
|
- | 128 | // configure P5.4 -> SD-CS as an output pin |
|
- | 129 | GPIO_InitStructure.GPIO_Direction = GPIO_PinOutput; |
|
- | 130 | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; |
|
- | 131 | GPIO_InitStructure.GPIO_Type = GPIO_Type_PushPull ; |
|
- | 132 | GPIO_InitStructure.GPIO_IPConnected = GPIO_IPConnected_Disable; |
|
- | 133 | GPIO_InitStructure.GPIO_Alternate = GPIO_OutputAlt1; |
|
- | 134 | GPIO_Init (GPIO5, &GPIO_InitStructure); |
|
- | 135 | // configure P3.4 -> SCK1 and P3.6 -> MOSI1 as an output pin |
|
- | 136 | GPIO_InitStructure.GPIO_Direction = GPIO_PinOutput; |
|
- | 137 | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_6; |
|
- | 138 | GPIO_InitStructure.GPIO_Type = GPIO_Type_PushPull ; |
|
- | 139 | GPIO_InitStructure.GPIO_IPConnected = GPIO_IPConnected_Enable; |
|
- | 140 | GPIO_InitStructure.GPIO_Alternate = GPIO_OutputAlt2; |
|
- | 141 | GPIO_Init (GPIO3, &GPIO_InitStructure); |
|
- | 142 | // configure P3.5 <- MISO1 as an input pin |
|
- | 143 | GPIO_InitStructure.GPIO_Direction = GPIO_PinInput; |
|
- | 144 | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; |
|
- | 145 | GPIO_InitStructure.GPIO_Type = GPIO_Type_PushPull; |
|
- | 146 | GPIO_InitStructure.GPIO_IPConnected = GPIO_IPConnected_Enable; |
|
- | 147 | GPIO_InitStructure.GPIO_Alternate = GPIO_InputAlt1; |
|
- | 148 | GPIO_Init (GPIO3, &GPIO_InitStructure); |
|
- | 149 | // configure SPI1 |
|
- | 150 | SSP_DeInit(SSP1); |
|
- | 151 | SSP_StructInit(&SSP_InitStructure); |
|
- | 152 | SSP_InitStructure.SSP_FrameFormat = SSP_FrameFormat_Motorola; |
|
- | 153 | SSP_InitStructure.SSP_Mode = SSP_Mode_Master; |
|
- | 154 | SSP_InitStructure.SSP_CPHA = SSP_CPHA_1Edge; |
|
- | 155 | SSP_InitStructure.SSP_CPOL = SSP_CPOL_Low; |
|
- | 156 | // Set Baud Rate (Prescaler) |
|
- | 157 | // bit rate is BRCLK/SSP_ClockPrescaler/(1+SSP_ClockRate)) |
|
- | 158 | // With MSCLK = 48MHz/2 = BRCLK we get for the SPICLK = 24Mhz / 8 / (1+5) = 500 kHz |
|
- | 159 | SSP_InitStructure.SSP_ClockRate = 14; //5 |
|
- | 160 | SSP_InitStructure.SSP_ClockPrescaler = 8; |
|
- | 161 | SSP_Init(SSP1, &SSP_InitStructure); |
|
- | 162 | SSC_Disable(); |
|
- | 163 | SSP_Cmd(SSP1, ENABLE); |
|
- | 164 | ||
- | 165 | // Configure SD_SWITCH at pin GPIO5.3 as an external irq 11 |
|
- | 166 | ||
- | 167 | // configure the port |
|
- | 168 | SCU_APBPeriphClockConfig(__GPIO5, ENABLE); // Enable the GPIO5 Clock |
|
- | 169 | GPIO_InitStructure.GPIO_Direction = GPIO_PinInput; |
|
- | 170 | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; |
|
- | 171 | GPIO_InitStructure.GPIO_Type = GPIO_Type_PushPull ; |
|
- | 172 | GPIO_InitStructure.GPIO_IPConnected = GPIO_IPConnected_Disable; |
|
- | 173 | GPIO_InitStructure.GPIO_Alternate = GPIO_InputAlt1; |
|
- | 174 | GPIO_Init(GPIO5, &GPIO_InitStructure); |
|
- | 175 | ||
- | 176 | // configure the EXT11 interrupt line (P5.3) as an IRQ with the lowest priority |
|
- | 177 | SCU_APBPeriphClockConfig(__WIU, ENABLE); |
|
- | 178 | WIU_Cmd(ENABLE ); |
|
- | 179 | WIU_ClearITPendingBit(WIU_Line11); |
|
- | 180 | WIU_DeInit(); |
|
- | 181 | WIU_InitStructure.WIU_TriggerEdge = WIU_FallingEdge; |
|
- | 182 | WIU_InitStructure.WIU_Line = WIU_Line11; |
|
- | 183 | WIU_Init(&WIU_InitStructure); |
|
- | 184 | // The EXTIT1_IRQHandler() is called every time the SD-Switch is activated (falling edge) |
|
- | 185 | // by inserting an sd-card |
|
- | 186 | SCU_WakeUpLineConfig(11); |
|
- | 187 | VIC_Config(EXTIT1_ITLine, VIC_IRQ, 7); |
|
- | 188 | VIC_ITCmd(EXTIT1_ITLine, ENABLE); |
|
- | 189 | } |
|
- | 190 | ||
- | 191 | void SSC_Deinit(void) |
|
- | 192 | { |
|
- | 193 | GPIO_InitTypeDef GPIO_InitStructure; |
|
96 | 194 | ||
97 | SerialPutString("SPI1 init..."); |
- | |
98 | - | ||
99 | GPIO_InitTypeDef GPIO_InitStructure; |
195 | SSP_Cmd(SSP1, DISABLE); |
100 | SSP_InitTypeDef SSP_InitStructure; |
196 | SSP_DeInit(SSP1); |
101 | - | ||
102 | SCU_APBPeriphClockConfig(__SSP1 ,ENABLE); |
- | |
103 | 197 | ||
104 | // GPIO_DeInit(GPIO2); |
198 | // configure P5.4 -> SD-CS as an input pin |
105 | GPIO_InitStructure.GPIO_Direction = GPIO_PinOutput; |
199 | GPIO_InitStructure.GPIO_Direction = GPIO_PinInput; |
106 | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_6; |
200 | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; |
107 | GPIO_InitStructure.GPIO_Type = GPIO_Type_PushPull ; |
201 | GPIO_InitStructure.GPIO_Type = GPIO_Type_PushPull ; |
108 | GPIO_InitStructure.GPIO_IPConnected = GPIO_IPConnected_Enable; |
202 | GPIO_InitStructure.GPIO_IPConnected = GPIO_IPConnected_Disable; |
109 | GPIO_InitStructure.GPIO_Alternate = GPIO_OutputAlt2; |
- | |
- | 203 | GPIO_InitStructure.GPIO_Alternate = GPIO_InputAlt1; |
|
110 | GPIO_Init (GPIO3, &GPIO_InitStructure); |
204 | GPIO_Init (GPIO5, &GPIO_InitStructure); |
111 | 205 | // configure P3.4 -> SCK1 and P3.6 -> MOSI1 as an input pin |
|
112 | GPIO_InitStructure.GPIO_Direction = GPIO_PinOutput; |
206 | GPIO_InitStructure.GPIO_Direction = GPIO_PinInput; |
113 | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; |
207 | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_6; |
114 | GPIO_InitStructure.GPIO_Type = GPIO_Type_PushPull ; |
208 | GPIO_InitStructure.GPIO_Type = GPIO_Type_PushPull ; |
115 | GPIO_InitStructure.GPIO_IPConnected = GPIO_IPConnected_Disable; |
209 | GPIO_InitStructure.GPIO_IPConnected = GPIO_IPConnected_Disable; |
116 | GPIO_InitStructure.GPIO_Alternate = GPIO_OutputAlt1; |
- | |
- | 210 | GPIO_InitStructure.GPIO_Alternate = GPIO_InputAlt1; |
|
117 | GPIO_Init (GPIO5, &GPIO_InitStructure); |
211 | GPIO_Init (GPIO3, &GPIO_InitStructure); |
118 | 212 | // configure P3.5 <- MISO1 as an input pin |
|
119 | GPIO_InitStructure.GPIO_Direction = GPIO_PinInput; |
213 | GPIO_InitStructure.GPIO_Direction = GPIO_PinInput; |
120 | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; |
214 | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; |
121 | GPIO_InitStructure.GPIO_Type = GPIO_Type_PushPull; |
215 | GPIO_InitStructure.GPIO_Type = GPIO_Type_PushPull; |
122 | GPIO_InitStructure.GPIO_IPConnected = GPIO_IPConnected_Enable; |
216 | GPIO_InitStructure.GPIO_IPConnected = GPIO_IPConnected_Disable; |
123 | GPIO_InitStructure.GPIO_Alternate = GPIO_InputAlt1; |
217 | GPIO_InitStructure.GPIO_Alternate = GPIO_InputAlt1; |
124 | GPIO_Init (GPIO3, &GPIO_InitStructure); |
218 | GPIO_Init (GPIO3, &GPIO_InitStructure); |
125 | 219 | ||
- | 220 | // disable APB clock for SPI1 |
|
126 | SSP_DeInit(SSP1); |
221 | SCU_APBPeriphClockConfig(__SSP1 ,DISABLE); |
127 | SSP_StructInit(&SSP_InitStructure); |
222 | |
128 | SSP_InitStructure.SSP_FrameFormat = SSP_FrameFormat_Motorola; |
223 | // configure the port of the SDC-Switch |
129 | SSP_InitStructure.SSP_Mode = SSP_Mode_Master; |
224 | SCU_APBPeriphClockConfig(__GPIO5, ENABLE); // Enable the GPIO5 Clock |
130 | SSP_InitStructure.SSP_CPHA = SSP_CPHA_1Edge; |
225 | GPIO_InitStructure.GPIO_Direction = GPIO_PinInput; |
131 | SSP_InitStructure.SSP_CPOL = SSP_CPOL_Low; |
226 | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; |
132 | // Hier muss die Baudrate noch richtig eingestellt werden (mit Prescaler) |
227 | GPIO_InitStructure.GPIO_Type = GPIO_Type_PushPull ; |
133 | SSP_InitStructure.SSP_ClockRate = 5; |
228 | GPIO_InitStructure.GPIO_IPConnected = GPIO_IPConnected_Disable; |
134 | SSP_InitStructure.SSP_ClockPrescaler = 8; |
- | |
135 | SSP_Init(SSP1, &SSP_InitStructure); |
- | |
136 | SSC_Disable(); |
- | |
137 | SSP_Cmd(SSP1, ENABLE); |
- | |
138 | /* MMC_Direction_REG &=~(1<<SPI_DI); // Set the direction of the ssc-port |
- | |
139 | MMC_Direction_REG |= (1<<SPI_Clock); // _______ _______ |
- | |
140 | MMC_Direction_REG |= (1<<SPI_DO); // CS \________________________/ |
- | |
141 | MMC_Direction_REG |= (1<<MMC_Chip_Select); // |
- | |
142 | MMC_Direction_REG |= (1<<SPI_SS); // ___ ___ ___ |
- | |
143 | // clk __________/ \___/ \___/ \_________ |
- | |
144 | // |
- | |
145 | // ___ ___ |
- | |
146 | // data_________/ \___________/ \___________ |
- | |
147 | - | ||
148 | // initialise ssc, clock = Idel low |
- | |
149 | // devide clock by 32 |
- | |
150 | SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR1)|(1<<CPOL); // Enable SSC in mastermode, invert clockpolarity (idle high) |
- | |
151 | SPSR = SPSR|(1<<SPI2X);*/ |
- | |
152 | 229 | GPIO_InitStructure.GPIO_Alternate = GPIO_InputAlt1; |
|
153 | SerialPutString("ok\n\r"); |
230 | GPIO_Init(GPIO5, &GPIO_InitStructure); |
154 | } |
231 | } |
155 | 232 | ||
156 | 233 | ||
157 | //________________________________________________________________________________________________________________________________________ |
234 | //________________________________________________________________________________________________________________________________________ |
158 | // Funtion: SSC_GetChar(void); |
235 | // Function: SSC_GetChar(void); |
159 | // |
236 | // |
160 | // Description: This function reads one byte from the SSC |
237 | // Description: This function reads one byte from the SSC |
161 | // |
238 | // |
162 | // |
239 | // |
163 | // Returnvalue: the byte received. |
240 | // Returnvalue: the byte received. |
164 | //________________________________________________________________________________________________________________________________________ |
241 | //________________________________________________________________________________________________________________________________________ |
165 | 242 | ||
166 | u8 SSC_GetChar (void) |
243 | u8 SSC_GetChar (void) |
167 | { |
244 | { |
168 | u8 Byte = 0; |
245 | u8 Byte = 0; |
169 | // SerialPutString("\n\rGetChar."); |
- | |
170 | SSP_SendData(SSP1, 0xFF); |
- | |
171 | while(SSP_GetFlagStatus(SSP1, SSP_FLAG_TxFifoEmpty) != SET); |
246 | while(SSP_GetFlagStatus(SSP1, SSP_FLAG_TxFifoNotFull) != SET); // wait for space in the tx fifo |
172 | Byte = SSP_ReceiveData(SSP1); |
- | |
173 | /* SPDR = 0x00; // read one byte of data from the SSC |
247 | SSP_SendData(SSP1, 0xFF);// send dymmy byte (0xFF) as master to receive a byte from the slave |
174 | while(!(SPSR & (1<<SPIF))){}; // wait until the data has been read. |
248 | while(SSP_GetFlagStatus(SSP1, SSP_FLAG_TxFifoEmpty) != SET); // wait for the byte to be sent |
175 | Byte = SPDR; |
- | |
176 | */ |
- | |
177 | // sprintf(text," %02X ", Byte); SerialPutString(text);SerialPutString("done."); |
249 | Byte = SSP_ReceiveData(SSP1); // read the byte transmitted from the slave |
178 | return (Byte); |
250 | return (Byte); |
179 | - | ||
180 | } |
251 | } |
181 | 252 | ||
182 | //________________________________________________________________________________________________________________________________________ |
253 | //________________________________________________________________________________________________________________________________________ |
183 | void SSC_ClearRxFifo (void) |
254 | void SSC_ClearRxFifo (void) |
184 | { |
255 | { |
185 | // SerialPutString("\n\rClr RxFifo "); |
256 | // wait that the tx fifo is empty |
186 | while(SSP_GetFlagStatus(SSP1, SSP_FLAG_TxFifoEmpty) != SET); |
257 | while(SSP_GetFlagStatus(SSP1, SSP_FLAG_TxFifoEmpty) != SET); |
- | 258 | // then empty the rx fifo by reading all the bytes that are available |
|
187 | while(SSP_GetFlagStatus(SSP1, SSP_FLAG_RxFifoNotEmpty) == SET) SSP_ReceiveData(SSP1); |
259 | while(SSP_GetFlagStatus(SSP1, SSP_FLAG_RxFifoNotEmpty) == SET) SSP_ReceiveData(SSP1); |
188 | // SerialPutString("done."); |
- | |
189 | } |
260 | } |
190 | //________________________________________________________________________________________________________________________________________ |
261 | //________________________________________________________________________________________________________________________________________ |
191 | // Funtion: SSC_PutChar(u8 Byte); |
262 | // Function: SSC_PutChar(u8 Byte); |
192 | // |
263 | // |
193 | // Description: This function writes one byte to the SSC |
264 | // Description: This function writes one byte to the SSC |
194 | // |
265 | // |
195 | // |
266 | // |
196 | // Returnvalue: none |
267 | // Returnvalue: none |
197 | //________________________________________________________________________________________________________________________________________ |
268 | //________________________________________________________________________________________________________________________________________ |
198 | 269 | ||
199 | void SSC_PutChar (u8 Byte) |
270 | void SSC_PutChar (u8 Byte) |
200 | { |
271 | { |
201 | //SerialPutString("\n\rPutChar."); sprintf(text," %02X ", Byte); SerialPutString(text); |
272 | // wait for some space in the tx fifo |
202 | while(SSP_GetFlagStatus(SSP1, SSP_FLAG_TxFifoNotFull) != SET); |
273 | while(SSP_GetFlagStatus(SSP1, SSP_FLAG_TxFifoNotFull) != SET); |
- | 274 | // put the byte to send in the tx fifo |
|
203 | SSP_SendData(SSP1, Byte); |
275 | SSP_SendData(SSP1, Byte); |
204 | //SerialPutString("done."); |
- | |
205 | - | ||
206 | } |
276 | } |
207 | 277 | ||
208 | - | ||
209 | //________________________________________________________________________________________________________________________________________ |
- | |
210 | // Funtion: SSC_Disable(void); |
- | |
211 | // |
- | |
212 | // Description: This function enables chipselect of the sdcard (active low) |
- | |
213 | // |
- | |
214 | // |
- | |
215 | // Returnvalue: none |
- | |
216 | //________________________________________________________________________________________________________________________________________ |
- | |
217 | - | ||
218 | void SSC_Disable(void) |
- | |
219 | { |
- | |
220 | //MMC_Write &= ~(1<<MMC_Chip_Select); // disable chipselect of the sdcard (active low). |
- | |
221 | GPIO_WriteBit(GPIO5, GPIO_Pin_4 , Bit_SET); |
278 | |
222 | } |
279 | |
223 | 280 | ||
224 | 281 | ||
225 | 282 | ||
226 | - | ||
227 | //________________________________________________________________________________________________________________________________________ |
- | |
228 | // Funtion: SSC_Enable(void); |
- | |
229 | // |
- | |
230 | // Description: This function disables chipselect of the sdcard (active low) |
- | |
231 | // |
- | |
232 | // |
- | |
233 | // Returnvalue: none |
- | |
234 | //________________________________________________________________________________________________________________________________________ |
- | |
235 | - | ||
236 | void SSC_Enable(void) |
- | |
237 | { |
- | |
238 | //MMC_Write |= (1<<MMC_Chip_Select); // enable chipselect of the sdcard (active low). |
- | |
239 | GPIO_WriteBit(GPIO5, GPIO_Pin_4 , Bit_RESET); |
283 | |
240 | } |
284 | |
241 | 285 |