Forum: Mikrocontroller und Digitale Elektronik Port_Fer ändern ADSP BF592


von gerhard s. (Firma: tgm) (draugluin)


Angehängte Dateien:

Lesenswert?

Ich versuche derzeit auf dem Blackfin eine SPI Schnittstelle zu 
realisieren.

Es soll ein Master sein und mit den Einstellungen der Spi-Parameter habe 
ich auch keine Probleme allerdings mit den Pins. Inzwischen vermute ich 
das ich erst mit dem Port_Fer Register die entsprechenden Pins enablen 
muss. Das Problem daran ist nun, dass ich nicht weiß wie ich auf das 
Port_Fer Register zugreifen kann um es zu ändern. Ich verwende eine 
ursprünglich funktionierende SPI-Schnittstelle welche ich nur 
vereinfacht habe und welche offenbar auch intern funktioniert.

Mein Programm derzeit:
void SPI_Test(void)
{
  //Test Selfmade
  unsigned char *test = malloc(8);
  memset(test, 0xAA, 8);
  //Setup
  //*pFIO_DIR |= PF0;
  *pFIO_DIR |= PF15;
  *pFIO_DIR |= PF14;
  *pFIO_DIR |= PF13;
  *pFIO_FLAG_C |= PF15;


  *pSPI_BAUD = 25;
  *pSPI_CTL = MSTR | TIMOD01 | SPE;  //SPI Mode 0
  *pSPI_FLG = FLS1 | FLG1;
  *pSPI_TDBR = 25;

   *pPORT_MUX      = (~(PF0 | PF1 | PF2));

  //Write_Status
  if (*pSPI_CTL & CPHA)
  {
       *pSPI_FLG &= ~FLG1;
  }
  else
  {
     *pFIO_FLAG_C = PF1;
  }
  for(dummy=0; dummy<100; dummy++);

  WaitForSPIF();
  *pSPI_TDBR=WRSR;
  WaitForSPIF();
  for(dummy=0; dummy<100; dummy++);

  tempchar = rbyte();

  WaitForSPIF();
  *pSPI_TDBR=0;
  WaitForSPIF();
  for(dummy=0; dummy<100; dummy++);

  tempchar = rbyte();
WaitForSPIF();
  *pSPI_TDBR=WRDI;
  WaitForSPIF();
  for(dummy=0; dummy<100; dummy++);
  tempchar = rbyte();
  for(dummy=0; dummy<100; dummy++);
  if (*pSPI_CTL & CPHA)
  {
      *pSPI_FLG |= FLG1;
  }
  else
  {
      *pFIO_FLAG_S = PF1;
  }
  //Disable_SPI();
  *pSPI_CTL  &= ~SPE;
  free(test);
}

Der dazugehörige Header im Anhang

Es ist nun der Fall, dass die pointer auf alle Register mit ausnahme von 
Port_Fer funktionieren. Die möglichkeit direkt auf das Register würde 
auch noch offenstehen, aber ich nicht wie.

Bitte um Hilfe
lg Draugluin

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.