www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik mmap


Autor: stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo
Ich habe ein MBX-Board (Motorola). Das Board hat drei LED's die ich zu
testes halber ansteuern möchte. Ich habe ein kleines programm ich C,
dass mir den zugriff auf ein register ermöglichen soll, von dem aus ich
die LED's steuern kann. Leider klappt das aber nicht so ganz.
Sieht vielleicht gerade jemand wo ich einen fehler mache?




#include <unistd.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/time.h>
#include <fcntl.h>
#include <asm/system.h>
#include <asm/io.h>
#include <sys/mman.h>

#define     C_MEMSPACE    0xFA100000                  /* physical
address */
#define     C_MEMSIZE    0x100                         /* count */
#define     C_PAGE        0x1000                     /* page size */

int           mem_fd;                    /* handle to /dev/mem */
unsigned char  *vMemory;               /* array for memory-access */
unsigned long  vFIFOMask;                  /* set by SET_TRACE */

/* enables access to memory and I/O space */
unsigned char fGetAccess( void )
{
  /* accessing memory */
  mem_fd = open( "/dev/mem", O_RDWR );                 /* open
/dev/mem */
  if( mem_fd < 0 )
    return( 0 );
  vMemory = (unsigned char *)malloc( C_MEMSIZE + (C_PAGE-1) );      /*
allocate */
  if( vMemory == NULL )
    return( 0 );
  if( (unsigned long)vMemory % C_PAGE )             /* start on
boundary */
    vMemory += C_PAGE - ((unsigned long)vMemory % C_PAGE );
  vMemory = (unsigned char *)mmap(         /* map vMemory on physical
space */
       (caddr_t)vMemory,
       C_MEMSIZE,
       PROT_READ | PROT_WRITE,
       MAP_SHARED | MAP_FIXED,
       mem_fd,
       C_MEMSPACE );
  if( (long)vMemory < 0 )
    return( 0 );
  return( 1 );                            /* successful */
}

/* releases resources (notmally never called) */
void fReleaseAccess( void )
{
  close( mem_fd );
}

/* turn LED on, FIFO will not be resetted */
void fLEDOn( void )
{
  vMemory[0x00] = 0x00;
}


/* turn LED off, FIFO will not be resetted */
void fLEDOff( void )
{
  vMemory[0x01] = 0x0E;
}



void main( void )
{
  fGetAccess();                   /* Enable access */
  fLEDOff();                   /* LED off shows ready */
  fReleaseAccess();
}



hier noch die spezifikationen vom Board
Das MBX-Board verfügt über drei LED’s die von einem Register aus
gesteuert werden können.
Es gibt zwei verschieden Register auf dem Board. Das erste befindet
sich an allen geraden Adressen von $FA100000- $FA1FFFFE. Das zweite an
allen ungeraden Adressen von $FA100001- $FA1FFFFF. Die LED’s können mit
Hilfe des zweiten Registers gesteuert werden.
Das Register besitzt 7 nutzbare Datenbits, die nachfolgend beschrieben
werden.
Die ersten vier Bits im Kontrollregister (2) definieren die Spannung
für die PCMCIA Karte ( für uns nicht von Bedeutung). Die Bits vier bis
sechs sind die Kontrollstatus LED’s. Bit sieben setzt das PCI Interface
zurück (falls es gesetzt ist).

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.