Subversion Repositories MK3Mag

Rev

Rev 21 | Rev 23 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 21 Rev 22
Line 134... Line 134...
134
/****************************************************************/
134
/****************************************************************/
135
/*              Initialization of the USART0                    */
135
/*              Initialization of the USART0                    */
136
/****************************************************************/
136
/****************************************************************/
137
void USART0_Init (void)
137
void USART0_Init (void)
138
{
138
{
139
        uint8_t sreg = SREG;
-
 
140
 
-
 
141
        uint16_t ubrr = (uint16_t) ((uint32_t) SYSCLK/(8 * BAUD_RATE) - 1);
139
        uint16_t ubrr = (uint16_t) ((uint32_t) SYSCLK/(8 * BAUD_RATE) - 1);
142
 
140
 
143
        // disable all interrupts before configuration
141
        // disable all interrupts before configuration
144
        cli();
142
        cli();
145
 
143
 
Line 148... Line 146...
148
        // disable TX-Interrupt
146
        // disable TX-Interrupt
149
        UCSR0B &= ~(1 << TXCIE0);
147
        UCSR0B &= ~(1 << TXCIE0);
150
 
148
 
151
        // set direction of RXD0 and TXD0 pins
149
        // set direction of RXD0 and TXD0 pins
152
 
150
 
153
        // set RXD0 (PD0) as an input pin
151
        // set RXD0 (PD0) as an input pin tristate
154
        PORTD |= (1 << PORTD0);
-
 
155
        DDRD  &= ~(1 << DDD0);
152
        DDRD  &= ~(1 << DDD0);
-
 
153
        PORTD &= ~(1 << PORTD0);
156
        // set TXD0 (PD1) as an output pin
154
        // set TXD0 (PD1) as an output pin
157
        PORTD |= (1 << PORTD1);
-
 
158
        DDRD  |= (1 << DDD1);
155
        DDRD  |= (1 << DDD1);
-
 
156
        PORTD &= ~(1 << PORTD1);
-
 
157
 
159
 
158
 
160
        // USART0 Baud Rate Register
159
        // USART0 Baud Rate Register
161
        // set clock divider
160
        // set clock divider
162
        UBRR0H = (uint8_t)(ubrr >> 8);
161
        UBRR0H = (uint8_t)(ubrr >> 8);
163
        UBRR0L = (uint8_t)ubrr;
162
        UBRR0L = (uint8_t)ubrr;
164
 
163
 
165
        // USART0 Control and Status Register A, B, C
164
        // USART0 Control and Status Register A, B, C
166
 
165
 
167
        // enable double speed operation
166
        // enable double speed operation
168
        UCSR0A |= (1 << U2X0);
167
        UCSR0A |= (1 << U2X0);
169
        // enable receiver and transmitter
-
 
170
        UCSR0B |= (1 << TXEN0) | (1 << RXEN0);
-
 
-
 
168
 
171
        // set asynchronous mode
169
        // set asynchronous mode
172
        UCSR0C &= ~(1 << UMSEL01);
170
        UCSR0C &= ~(1 << UMSEL01);
173
        UCSR0C &= ~(1 << UMSEL00);
171
        UCSR0C &= ~(1 << UMSEL00);
174
        // no parity
172
        // no parity
175
        UCSR0C &= ~(1 << UPM01);
173
        UCSR0C &= ~(1 << UPM01);
Line 179... Line 177...
179
        // 8-bit
177
        // 8-bit
180
        UCSR0B &= ~(1 << UCSZ02);
178
        UCSR0B &= ~(1 << UCSZ02);
181
        UCSR0C |=  (1 << UCSZ01);
179
        UCSR0C |=  (1 << UCSZ01);
182
        UCSR0C |=  (1 << UCSZ00);
180
        UCSR0C |=  (1 << UCSZ00);
183
 
181
 
-
 
182
        // enable receiver and transmitter
-
 
183
        UCSR0B |= (1 << RXEN0);
-
 
184
        UCSR0B |= (1 << TXEN0);
-
 
185
 
184
        // flush receive buffer
186
        // flush receive buffer
185
        while ( UCSR0A & (1<<RXC0) ) UDR0;
187
        while ( UCSR0A & (1<<RXC0) ) UDR0;
186
 
188
 
187
        // enable interrupts at the end
-
 
188
        // enable RX-Interrupt
189
        // enable RX-Interrupt
189
        UCSR0B |= (1 << RXCIE0);
190
        UCSR0B |= (1 << RXCIE0);
190
        // enable TX-Interrupt
191
        // enable TX-Interrupt
191
        UCSR0B |= (1 << TXCIE0);
192
        UCSR0B |= (1 << TXCIE0);
192
 
193
 
193
        rxd_buffer_locked = FALSE;
194
        rxd_buffer_locked = FALSE;
194
        txd_complete = TRUE;
195
        txd_complete = TRUE;
195
 
196
 
196
        Debug_Timer = SetDelay(200);
-
 
197
 
-
 
198
 
-
 
199
        // restore global interrupt flags
-
 
200
    SREG = sreg;
-
 
201
 
197
 
202
        VersionInfo.Major = VERSION_MAJOR;
198
        VersionInfo.Major = VERSION_MAJOR;
203
        VersionInfo.Minor = VERSION_MINOR;
199
        VersionInfo.Minor = VERSION_MINOR;
204
    VersionInfo.PCCompatible = VERSION_COMPATIBLE;
200
    VersionInfo.PCCompatible = VERSION_COMPATIBLE;
205
 
201
 
-
 
202
 
206
        // Version beim Start ausgeben (nicht schön, aber geht... )
203
    // Version beim Start ausgeben (nicht schön, aber geht... )
-
 
204
        uart_putchar ('\n');
-
 
205
        uart_putchar ('C');
-
 
206
        uart_putchar ('P');
-
 
207
        uart_putchar (':');
-
 
208
        uart_putchar ('V');
-
 
209
        uart_putchar (0x30 + VERSION_MAJOR);
207
        uart_putchar ('\n');uart_putchar ('C');uart_putchar ('P');uart_putchar (':');
210
        uart_putchar ('.');uart_putchar (0x30 + VERSION_MINOR/10);
208
        uart_putchar ('V');uart_putchar (0x30 + VERSION_MAJOR);uart_putchar ('.');uart_putchar (0x30 + VERSION_MINOR/10); uart_putchar (0x30 + VERSION_MINOR%10);
211
        uart_putchar (0x30 + VERSION_MINOR%10);
209
    uart_putchar ('\n');
212
    uart_putchar ('\n');
210
}
213
}
211
 
214
 
212
// ---------------------------------------------------------------------------------
215
// ---------------------------------------------------------------------------------
213
void USART0_EnableTXD(void)
216
void USART0_EnableTXD(void)
214
{
217
{
215
        //if(!(UCSR0B & (1 << TXEN0))) return;
-
 
216
        DDRD |= (1<<DDD1);              // set TXD pin as output
218
        DDRD |= (1<<DDD1);                      // set TXD pin as output
-
 
219
        PORTD &= ~(1 << PORTD1);
217
        UCSR0B |= (1 << TXEN0);         // enable TX in USART
220
        UCSR0B |= (1 << TXEN0);         // enable TX in USART
-
 
221
        UCSR0B |= (1 << TXCIE0);        // disable TX-Interrupt
218
}
222
}
219
 
223
 
220
// ---------------------------------------------------------------------------------
224
// ---------------------------------------------------------------------------------
221
void USART0_DisableTXD(void)
225
void USART0_DisableTXD(void)
222
{
226
{
223
        //if((UCSR0B & (1 << TXEN0))) return;
-
 
224
        while(!txd_complete){ };
227
        while(!txd_complete){ };
225
 
228
 
-
 
229
        UCSR0B &= ~(1 << TXCIE0);   // disable TX-Interrupt
226
        UCSR0B &= ~(1 << TXEN0);        // disable TXD in USART
230
        UCSR0B &= ~(1 << TXEN0);        // disable TXD in USART
227
        DDRD &= ~(1<<DDD1);             // set TXD pin as input
231
        DDRD &= ~(1<<DDD1);             // set TXD pin as input
-
 
232
        PORTD &= ~(1 << PORTD1);
228
}
233
}
229
 
234
 
230
/****************************************************************/
235
/****************************************************************/
231
/*               USART0 transmitter ISR                         */
236
/*               USART0 transmitter ISR                         */
232
/****************************************************************/
237
/****************************************************************/