Hallo.
ich bin neu in der µC programmierung und habe Verständisprobleme mit dem
UART INTERFACE.
Ich hab mir ein testboard gebaut das über ein USB->FTDI232->MSP430
interface eine datenstrecke realisiert. Die ist mit einem
beisielprogramm, bereits getestet, die funktioniert.
Jetzt folgende Situation:
Es soll per UART ein auf dem PC vorhandenes Array mit daten sätzen
übermittelt werden an den MSP
Die anzahl der Datensätze variiert, ich kann im mikrokontroller also
keine feste array größe angeben, weil ich sie ned weiß.
Ein Datzen Satz besteht immer aus 2 Integerzahlen
1 34455
5 33325
2 234
so zum beispiel. (1 gibt einen last wert an. die große zahl ist ein wert
in sekunden)
Wie bekomme ich diese im uC gespeichert, bzw wie verarbeitet der die
Daten die über die schnittstelle kommen?
Prinzipiell hätte ich mir gewünscht, das wenn ich meine Sequenz auf dem
PC starte, der PC per virtuellem Com port (die treiber dafür von ftdi
sind installiert und funzen) das komplette array übermittelt, dass ich
die daten dafür im µC zur verfügung habe.
Der UART ist soweit initialisiert
1 | void main( void )
|
2 | {
|
3 | WDTCTL = WDTPW + WDTHOLD; // Stop WDT
|
4 |
|
5 | InitializeHardware();
|
6 | BIS_SR(LPM0_bits + GIE); // Enter LPM0 w/ interrupt
|
7 | _EINT(); // Enable interrupts
|
8 |
|
9 | while(1)
|
10 | {
|
11 | }
|
12 | }
|
13 |
|
14 | void InitializeHardware( void )
|
15 | {
|
16 |
|
17 | //Setup UART1
|
18 | // Enable module pin functions
|
19 | P3SEL |= (BIT6);
|
20 | P3DIR |= (BIT6);
|
21 |
|
22 | // Enable module
|
23 | ME2 |= (UTXE1);
|
24 |
|
25 | // Reset UART
|
26 | U1CTL = (CHAR );
|
27 | U1TCTL = (TXEPT+UTCTL_ACLK);
|
28 |
|
29 | // Setup 2400 baud with ACLK
|
30 | U1BR0 = 0x0D;
|
31 | U1BR1 = 0x00;
|
32 | U1MCTL = 0x6B;
|
33 |
|
34 | // Set Tx Flag
|
35 | IFG2 |= (UTXIFG1);
|
36 |
|
37 | // Enable module pin functions
|
38 | P3SEL |= (BIT7);
|
39 |
|
40 | // Enable module
|
41 | ME2 |= (URXE1);
|
42 |
|
43 | // Reset UART
|
44 | U1RCTL = (URXEIE);
|
45 |
|
46 | IE2 |= (URXIE1);
|
47 |
|
48 | }
|
DAs hab ich aus dem testprogramm übernommen. Soweit ich das verstehe ist
nun dieser #pragma teil dafür zuständig, was passiert, wenn daten kommen
1 | // UART1 RX interrupt service routine
|
2 | #pragma vector=UART1RX_VECTOR
|
3 | __interrupt void UART1RX (void)
|
4 | {
|
5 |
|
6 | }
|
Meine erste idee wäre es gewesen, als erste zahl, die array größe zu
übermitteln und mit dieser dann das Arrray zu erzeugen, IAR workbench
nörgelt allerdings, das array nicht mit variablen erzeugt werden dürfen,
sondern feste werte haben müssen.
Wie wird das normalerweise gehandhabt, mehrere Datensätze gleichen typs
zu übermitteln abzuspeichern, wenn man die anzahl der datensätze nicht
vorher kennt?