Forum: Compiler & IDEs [WinArm] BasicUSB (bugfix)


von Thomas P. (pototschnig)


Lesenswert?

Hatte da Probleme mit der isConfigured-Funktion, die unter anderem dazu
verwendet wird um zu schauen, ob ein Device initialisiert ist oder
nicht. Falls nicht, wird es initialisiert und es wird die aktuelle
Configuration zurückgegeben (derzeit default 1)

Nach einem BUS-Reset, durch abgestecktes Gerät, gibt die Funktion aber
immer noch 1 zurück, was mir ein Haufen Probleme bereitet hat, weil das
Programm dann nicht erkannt hat, dass es vom Bus getrennt wurde und
weiterhin in einer Schleife hing, wie Read und Write. Ich hab deshalb
in der Funktion eingebaut, dass pCdc->currentConfiguration auf 0
gesetzt wird, wenn das Gerät vom Bus getrennt wird. Dann wird
ordnungsgemäß das Read und Write abgebrochen, wenn es abgesteckt wird.
1
static uchar AT91F_UDP_IsConfigured(AT91PS_CDC pCdc)
2
{
3
  AT91PS_UDP pUDP = pCdc->pUdp;
4
  AT91_REG isr = pUDP->UDP_ISR;
5
6
  if (isr & AT91C_UDP_ENDBUSRES) {
7
    pUDP->UDP_ICR = AT91C_UDP_ENDBUSRES;
8
    // reset all endpoints
9
    pUDP->UDP_RSTEP  = (unsigned int)-1;
10
    pUDP->UDP_RSTEP  = 0;
11
    // Enable the function
12
    pUDP->UDP_FADDR = AT91C_UDP_FEN;
13
    // Configure endpoint 0
14
    pUDP->UDP_CSR[0] = (AT91C_UDP_EPEDS | AT91C_UDP_EPTYPE_CTRL);
15
//---------------------------------------------------
16
// Meine änderung
17
//---------------------------------------------------
18
    pCdc->currentConfiguration = 0;
19
//---------------------------------------------------
20
  }
21
  else if (isr & AT91C_UDP_EPINT0) {
22
    pUDP->UDP_ICR = AT91C_UDP_EPINT0;
23
    AT91F_CDC_Enumerate(pCdc);
24
  }
25
  return pCdc->currentConfiguration;
26
}

von Thomas P. (pototschnig)


Lesenswert?

Vergessen: cdc_enumerate.c des BasicUSB-Beispiels für die
SAM7S-Controller. Ist im WinARM Paket dabei.

von mthomas (Gast)


Lesenswert?

Fehlerbericht an Atmel wuerde mehr bringen als in diesem Forum. Der Code
stammt von Atmel und wurde nur minimal an WinARM angepasst. Die
Mitarbeiter von Atmel Rousset lesen wahrscheinlich kein
deutschsprachiges Forum. e-mail an at91(a t)atmel(d o t)com oder evtl.
ins Forum auf at91.com

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.