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


von Sven Berstiou (Gast)


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:
1
void putch_4(char send_byte) // vinculum port
2
{
3
  int i;
4
5
 while(VIN_CTS); //software CTS
6
// while(U4C0_bit.TXEPT!=1);
7
 while(U4C1_bit.TI==0);
8
 U4TB=send_byte;
9
 
10
  for(i=0;i<0xfff;i++);
11
}

Danke!

von Sven Berstiou (Gast)


Lesenswert?

Hier ist die Funktion aus der das putchar aufgerufen wird (soll einen 
Vinculum flashen)
1
void flash_vinc(void)
2
{
3
   unsigned long i,j;
4
   union addr_t {unsigned short adrr; unsigned char addr_lh[2];}; // for low & high byte selection of address
5
   union addr_t write_adr;
6
   
7
   init_uart_4(115200, 1);
8
9
   VIN_PROG  = 0;           // load vinculum Booloader
10
   for(i=0;i<0xff;i++);
11
   VIN_RESET = 0;
12
   for(i=0;i<0xff;i++);
13
   VIN_RESET = 1;
14
   for(i=0;i<0xffff;i++);
15
   
16
   for(i=0;i<100;i++) putch_4(0xff);
17
   
18
  do{ 
19
    putch_4(0xff);
20
  }while(getch_4()!=0xff);
21
  
22
  do{ 
23
    putch_4(0xfa);
24
  }while(getch_4()!=0xfa);
25
  
26
    //set data variables, sets baud rate reg in vinculum
27
   putch_4(0x01);
28
   putch_4(0x70);
29
   putch_4(0x17);
30
   putch_4(0x1a);
31
   putch_4(0x00);
32
   putch_4(0x00);
33
   getch_4(); //wait for answer, 0x02
34
35
   write_adr.adrr=0x0000;
36
   
37
  for(j=0;j<512;j++) // 512 x 128 Bytes = 64K Firmware to flash
38
  { 
39
40
   putch_4(0x03);
41
   putch_4(write_adr.addr_lh[0]); //low byte of adresse
42
   putch_4(write_adr.addr_lh[1]); //low byte of adresse
43
   putch_4(0x80); //count = 128
44
   getch_4(); // 1st answer
45
   for(i=0;i<128;i++)
46
   {
47
      putch_4(vinculum_firmware[(j*128)+i]);
48
   }
49
   getch_4(); // 2nd answer in this block of 128 Bytes
50
   write_adr.adrr+=128;
51
  }
52
53
   init_uart_4(9600,0);
54
  
55
   VIN_PROG  = 1;           // normal start of firmware
56
   for(i=0;i<0xffff;i++);
57
   VIN_RESET = 0;
58
   for(i=0;i<0xfff;i++);
59
   VIN_RESET = 1;
60
   for(i=0;i<0xffff;i++);
61
  
62
63
}

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.