Hallo miteinander.
Ich habe eine kleine Frage bei einem momentanen Projekt:
Bei einem Buffer-System werden kontinuierlich Daten gesendet (@60Hz
~3000 Byte). Jetzt habe ich aber das Problem, dass der FT245 "nur" einen
RX-Buffer von 128 Byte hat.
Muss ich jetzt die 3000 Byte in 128 Byte Pakete unterteilen?
und auf der MCU-Seite das ganze jeweils in einer for-Schlaufe
entgegennehmen?
Bis jetzt lese ich die Daten so aus dem FTDI:
1 | void usart_rx(void){ // read function (polling)
|
2 | int8 data = 0; // data
|
3 | if(input_state(RX) == 0){ // if new data in the FTDI buffer
|
4 | if(index_rxBuf_W == rxBuf_max){ // ringbuffer
|
5 | index_rxBuf_W = 0;
|
6 | }
|
7 | else{
|
8 | index_rxBuf_W ++;
|
9 | }
|
10 |
|
11 | // take datas and set it dynamic in the buffer
|
12 | output_low(RD); // read data
|
13 | delay_cycles(1);
|
14 | if(input_state(D0) == 1) data |= (1 << 0);
|
15 | if(input_state(D1) == 1) data |= (1 << 1);
|
16 | if(input_state(D2) == 1) data |= (1 << 2);
|
17 | if(input_state(D3) == 1) data |= (1 << 3);
|
18 | if(input_state(D4) == 1) data |= (1 << 4);
|
19 | if(input_state(D5) == 1) data |= (1 << 5);
|
20 | if(input_state(D6) == 1) data |= (1 << 6);
|
21 | if(input_state(D7) == 1) data |= (1 << 7);
|
22 | rxBuf[index_rxBuf_W] = data; // store data
|
23 | output_high(RD); // read finished
|
24 | }
|
25 | }
|
Da aber bei einer for-Schlaufe der MCU für eine Zeit "blockiert" ist,
müsste dies sehr schnell gehen. Wäre da eine Alternative die
FTDI-Funktionen in Assembler zu schreiben? Was würde mir das für einen
Geschwindigkeitsvorteil bringen?
Leider bin ich bei Assembler nicht so sehr bewandert...
Besten Dank für den Rat
MFG
P51D