Habe folgendes "Problem":
Ich wollte für das USBProg eine neue Firmware schreiben die Werte mit
dem ADC aufzeichnet und dann per USB an den Host schickt mittels eines
virtuellen COM ports. Habe mir daher Benedikts usbserial firmware als
Grundlage runtergeladen
(http://svn.berlios.de/svnroot/repos/usbprog/trunk/usbprog_base/firmware/),
dort wird aber immer nur ein Zeichen versendet. Im Datenblatt des
USBN9604 ließt sich das aber so das man über den TXBUFFER auch mehr
bytes gleichzeitig versenden kann, jezt quäl ich mich damit aber schon
ne Weile und komm auf keinen Grünen Zweig.
Habe mal die Aktuelle Version als zip angehängt.
mittels der transmit funktion
1 | void transmit(unsigned char c) {
|
2 | USBNWrite(TXC2,FLUSH);
|
3 | USBNWrite(TXD2, c);
|
4 | rs232_send();
|
5 | interrupt_ep_send();
|
6 | wait_ms(20);
|
7 | }
|
Kann ich zwar wie gesagt ein Zeichen problemlos senden aber ohne das
Delay funktionierts nicht und macht die Sache natürlich laaaaaangsam. ;)
Daher habe ich folgendes versucht:
1 | USBNWrite(TXC2,FLUSH+TX_EN);
|
2 | for(i=start;i<length;i+=burst) {
|
3 | for(j=0;j<burst;j++) {
|
4 | USBNWrite(TXD2, buffer[i+j]);
|
5 | }
|
6 | rs232_send();
|
7 | interrupt_ep_send();
|
8 | wait_ms(20);
|
9 | }
|
Hat auch ganz gut funktioniert, nur das burst nicht größer als 4 sein
darf, sonst geht wieder nix, und wenn ich größere Datenpakete damit
sende hängt sich das Terminalprogram auf, ich habe auch Versucht den
FIFO Pufferplatz zu lesen: Der ist aber immer = 31 was heißt das der
Fifo leer ist, daran kann es eigentlich auch nicht liegen.
Auch das Abfragen des TX_DONE Flags brachte nix.
Ich verzweifel hier schon langsam weil das alles für mich keinen Sinn
ergibt, erlaubt so ein CDC Device (oder die Implementierung von
Benedikt?) nur das Senden EINES Zeichens/X ms??