mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem mit dem UART, senden.


Autor: Sven Berstiou (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich habe hier einen M32C mal zum testen bekommen. Meine putchar Routine 
scheint ihren Job fast richtig zu machen, aber leider funktioniert die 
Kommunikation mit einem Vinculum troz Hardware Handshake nicht 
richtig.Nur wenn ich in die Putchar Routine eine Warte Schleife einbaue 
läuft alles wie gewollt.
Hat jemand eine Idee? Beim M32C ist RTS in Hardware an und CTS in 
Software realisiert:
void putch_4(char send_byte) // vinculum port
{
  int i;

 while(VIN_CTS); //software CTS
// while(U4C0_bit.TXEPT!=1);
 while(U4C1_bit.TI==0);
 U4TB=send_byte;
 
  for(i=0;i<0xfff;i++);
}

Danke!

Autor: Sven Berstiou (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier ist die Funktion aus der das putchar aufgerufen wird (soll einen 
Vinculum flashen)
void flash_vinc(void)
{
   unsigned long i,j;
   union addr_t {unsigned short adrr; unsigned char addr_lh[2];}; // for low & high byte selection of address
   union addr_t write_adr;
   
   init_uart_4(115200, 1);

   VIN_PROG  = 0;           // load vinculum Booloader
   for(i=0;i<0xff;i++);
   VIN_RESET = 0;
   for(i=0;i<0xff;i++);
   VIN_RESET = 1;
   for(i=0;i<0xffff;i++);
   
   for(i=0;i<100;i++) putch_4(0xff);
   
  do{ 
    putch_4(0xff);
  }while(getch_4()!=0xff);
  
  do{ 
    putch_4(0xfa);
  }while(getch_4()!=0xfa);
  
    //set data variables, sets baud rate reg in vinculum
   putch_4(0x01);
   putch_4(0x70);
   putch_4(0x17);
   putch_4(0x1a);
   putch_4(0x00);
   putch_4(0x00);
   getch_4(); //wait for answer, 0x02

   write_adr.adrr=0x0000;
   
  for(j=0;j<512;j++) // 512 x 128 Bytes = 64K Firmware to flash
  { 

   putch_4(0x03);
   putch_4(write_adr.addr_lh[0]); //low byte of adresse
   putch_4(write_adr.addr_lh[1]); //low byte of adresse
   putch_4(0x80); //count = 128
   getch_4(); // 1st answer
   for(i=0;i<128;i++)
   {
      putch_4(vinculum_firmware[(j*128)+i]);
   }
   getch_4(); // 2nd answer in this block of 128 Bytes
   write_adr.adrr+=128;
  }

   init_uart_4(9600,0);
  
   VIN_PROG  = 1;           // normal start of firmware
   for(i=0;i<0xffff;i++);
   VIN_RESET = 0;
   for(i=0;i<0xfff;i++);
   VIN_RESET = 1;
   for(i=0;i<0xffff;i++);
  

}

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.