Habe nun das ganze ohne printf probiert. Dazu verwende ich nun auch
keinen Heap.
Fehlereingrenzung:
Nehme ich den PIC raus, brücke Tx und Rx, so kann ich das was ich sende
empfangen.
Der PIC läuft, da meine LEDs durch den Interrupt blinken.
Manchmal gibt er mir sogar was aus, jedoch nicht "Ha". Wenn er dann was
ausgibt, dann so wie es sein soll d.h. hintereinander ohne
unterbrechung. Ist allerdings nicht reproduzierbar. Hab es zweimal
hinbekommen, das er mir mein Terminal zuballert.
Als erstes hatte ich ja versucht printf zu benutzten. Kam ja allerdings
wie ihr oben lest, nichts raus. Leider ...
Der interne Loopback (//U1MODE = 0x8040; // Loopback test) funktioniert
auch nicht. D.h. ich empfange nichts, wenn ich sende.
Ich hoffe, ihr könnt mir helfen!!!
Mein gesamter Code:
1 | #include "p30F4012.h"
|
2 | #include <stdio.h>
|
3 | #include <uart.h>
|
4 |
|
5 | #define XTFREQ 7372800 //On-board Crystal frequency
|
6 | #define PLLMODE 16 //On-chip PLL setting
|
7 | #define FCY XTFREQ*PLLMODE/4 //Instruction Cycle Frequency
|
8 |
|
9 | #define BAUDRATE 9600
|
10 | #define BRGVAL ((FCY/BAUDRATE)/16)-1
|
11 |
|
12 |
|
13 | int main(void)
|
14 | {
|
15 |
|
16 | ADPCFG = 0xFF; //Make analog pins digital
|
17 |
|
18 | LATE = 0x0;
|
19 | TRISE = 0x0; //Configure LED pins as output
|
20 |
|
21 | TMR1 = 0; // clear timer 1
|
22 | PR1 = 0x7270; // interrupt every 250ms
|
23 | IFS0bits.T1IF = 0; // clr interrupt flag
|
24 | IEC0bits.T1IE = 1; // set interrupt enable bit
|
25 | T1CON = 0x8030; // Fosc/4, 1:256 prescale, start TMR1
|
26 |
|
27 |
|
28 | TRISF = 0xC;
|
29 | U1BRG = BRGVAL;
|
30 | U1MODE = 0x8000; // Reset UART to 8-n-1, alt pins, and enable
|
31 | //U1MODE = 0x8040; // Loopback test
|
32 | U1STA = 0x0440; // Reset status register and enable TX & RX
|
33 |
|
34 |
|
35 | _U1RXIF=0; // Clear UART RX Interrupt Flag
|
36 |
|
37 |
|
38 | while(1)
|
39 | {
|
40 |
|
41 | //printf("TEST");
|
42 |
|
43 | while(!U1STAbits.TRMT);
|
44 | U1TXREG = 'H';
|
45 |
|
46 | while(!U1STAbits.TRMT);
|
47 | U1TXREG = 'a';
|
48 | }
|
49 | }
|
50 | return 0;
|
51 | }
|
52 |
|
53 |
|
54 | void __attribute__((interrupt, no_auto_psv)) _T1Interrupt(void)
|
55 | {
|
56 | IFS0bits.T1IF = 0; // clear interrupt flag
|
57 |
|
58 | LATE ^= 0xF; //Toggle LED's
|
59 | }
|