Gast
#1676934
Hi Leute! Ich hab hier an der Uni einen nagelneuen Analog Devices BF537 (dh. keiner hat Erfahrung damit). Wir wollen mit ihm verschiedene Sensoren mit I2C auslesen und die Daten später verarbeiten. Wir benutzen Visual DSP++. Mein Problem: Ich finde leider nirgends eine Anleitung, ein Datasheet oder ähnliches, in dem erklärt wird, wie man den Blackfin in C vernüfntig programmiert. Ich hab hier nur was für Assembler. Ich hab bisher µC immer auch nur in Assembler programmiert, deswegen weiß ich nicht wie ich beginnen soll. Das Gute: Ich habe schon ein funktionierendes Codefragment, mit dem ich den I2C-Bus auslesen und beschreiben kann, siehe unten. Jedoch ist das sehr billig ohne Fehlerbehandlung und sonstiges. Vernünftig programmiert sollte es so aussehen wie auf dem angehängtem Bild. Meine konkreten Fragen: 1. Sind meine Fragen alle Blödsinn weil es irgendwo eine Dokumentation für C mit dem Blackfin gibt? :-D 2. Wie beginne ich eine Interruptroutine in C? 3. Ist es sinnvoll im Codefragment diese while()-Schleifen zu benutzen, die warten bis ein Interrupt gesetzt wurde, da diese den Prozessor davon abhalten, was anderes zu tun und Leistung verbraten? Gibt es eine professionellere Lösung oder ist das unproblematisch? 4. Wir haben das Board mittels dem JTAG-Interface ADZS-HPUSB-ICE von Analog per USB am Rechner hängen und können ihn so debuggen und flashen. Ist es auch möglich damit die Pins über eine gewisse Zeit auszulesen? (Ich konnte dies einmal mit einem XC164 mithilfe eines Intronix Logicport machen, wunderbar komfortabel...) Oder beim Debuggen die Werte der Register zu sehen? Ich hab in VirtualDSP++ keine Möglichkeit hierzu gefunden... Vielen Dank Johannes Anhang 2: I2C Codefragment // INIT *pTWI0_CONTROL = TWI_ENA | 0xA; // enable TWI controller *pTWI0_CLKDIV = CLKHI(0x08<<2) | CLKLOW(0x11<<2); // CLKDIV = CLKHI + CLKLOW = TWI SCL period / 10 MHz time reference *pTWI0_MASTER_ADDR = 0x53; // Definition of Adress to write to *pPORTFIO_DIR = 0x0330; // set Input/Output directions on PortxIO for(i=0; i<100000; i++){} // takes some time...... // ##################################################################### // Cheap and dirty I2C reading sequence: *pTWI0_MASTER_CTRL=TWICount(0x01) | MDIR | MEN; // initializing the transmit, reading x Bytes, MDIR is for reading // *pTWI0_MASTER_CTRL=TWICount(0x01) | MDIR | MEN | FAST; while(!(*pTWI0_FIFO_STAT & 0xC)){} // waits until two Bytes are in Fifo buffer // while(!(*pTWI0_FIFO_STAT & 0x1)){} // waits until one Byte is in Fifo buffer data = *pTWI_RCV_DATA8; // the 1 Byte that was read // data = *pTWI_RCV_DATA16; // the 2 Bytes that were read // #####################################################################
