Hallo
Zur RP6-Jukebox:
Meist verlinke ich den endsprechenden Thread bei meinen Filmchen:
https://www.roboternetz.de/phpBB2/vi...=339495#339495
Der Zugriff auf's Flash ist nicht so einfach, denn nur aus dem Loaderbereich heraus kann man darauf schreibend zugreifen. Die einzige Chance dafür wär wohl eine Funktion im Loader mit der man indirekt was ins Flash schreibt.
Mein aktueller Ansatz: Der RP6 sampled die Daten und sendet sie zum Terminal. Per Copy&Paste erzeugt man daraus ein Daten[]-Array und included es im Programm:
GrußCode:// RP6 als Tonband mit Aufnehmen und Abspielen (Daten im Flash) 1.1.2008 mic #include "rblib.h" // bindet u.a io.h und stdlib.h ein #include "rblib.c" // und dient vorrangig dem Debuggen #define speichergroesse 2048 // Anzahl der einzulesenden Bytes int main(void) { uint8_t daten[]=""; uint8_t temp, bit_nr; // Speicherplatz bereitstellen uint16_t byte_nr, i, dummy; // und ein paar Hilfsvariablen rblib_init(); // ein paar Initialisierungen setMotorPWM(0,0); // PWM0= sterrt den PWM-Interrupt PORTA &= ~(1 << PINA4); // PINA4 liest die Daten ein DDRA &= ~(1 << PINA4); // PullUp PINA4 aus DDRC |= (1 << PINC0); // an PINC4 hängt der Speaker byte_nr=speichergroesse; // Zähler für die Bytes daten[0]=daten[0]; while(0) // Zum Einstellen des Pegels { // wird nicht verwendet if (PINA & (1 << PINA4)) { setLEDs(1); PORTC |= (1 << PINC0); writeInteger(255,16); } else { setLEDs(0); PORTC &= ~(1 << PINC0); writeInteger(0,16); } if (!temp--) writeString("\n\r"); } // Ende Testschleife writeString("\n\rStart\n\r"); cli(); // Keine Störung zulassen, wir lesen ein do // Schleife der Datenbytes { temp=0; bit_nr=8; // acht Bit einlesen do // Schleife der Bits { if (PINA & (1 << PINA4)) // Pegel als High erkannt? { setLEDs(1); // Ja, LED an PORTC |= (1 << PINC0); // Speaker an temp += 1; // und Bit0 im Datenbyte setzen } else { setLEDs(0); // Nein, LED aus PORTC &= ~(1 << PINC0); // Speaker aus temp += 0; // für's Timing Bit0 nicht setzen } if (--bit_nr) // alle Bits komplett? { temp *= 2; // Speicherbyte nach links shiften //for(i=0;i<100;i++) dummy+=i; // kurze Verzögerung (8MHz!) if (byte_nr % 32) { if (bit_nr == 6) writeString(","); if (bit_nr == 4) writeString("&"); if (bit_nr == 2) writeString("H"); } else { if (bit_nr == 6) writeString(",\\"); if (bit_nr == 4) writeString("\n"); if (bit_nr == 2) writeString("&H"); } } else { writeInteger(temp,16); // Fertig, Byte als Hex senden } } while(bit_nr); // Wenn nötig, nächstes Bit einlesen } while(--byte_nr); // nächstes Byte bis Speicher voll sei(); // eigentlich nicht nötig writeString("\n\rFertig\n\r"); return(0); // das war's. Einfach und blechern }
mic







Zitieren

Lesezeichen