Hardware Reference
In-Depth Information
#include <sys/mman.h>
#include <fcntl.h>
#include <signal.h>
// Defines signal-handling functions (i.e. trap
Ctrl-C)
#include "pushLEDmmap.h"
// Global variables
int
keepgoing
=
1
;
// Set to 0 when Ctrl-c is pressed
// Callback called when SIGINT is sent to the process (Ctrl-C)
void
signal_handler
(
int
sig
) {
printf
(
"
\n
Ctrl-C pressed, cleaning up and exiting...
\n
"
);
keepgoing
=
0
;
}
int
main
(
int
argc
,
char
*
argv
[]) {
volatile
void
*
gpio_addr
;
volatile
unsigned int
*
gpio_datain
;
volatile
unsigned int
*
gpio_setdataout_addr
;
volatile
unsigned int
*
gpio_cleardataout_addr
;
// Set the signal callback for Ctrl-C
signal
(
SIGINT
,
signal_handler
);
int
fd
=
open
(
"/dev/mem"
,
O_RDWR
);
printf
(
"Mapping %X - %X (size: %X)
\n
"
,
GPIO0_START_ADDR
,
GPIO0_END_ADDR
,
GPIO0_SIZE
);
gpio_addr
=
mmap
(
0
,
GPIO0_SIZE
,
PROT_READ
|
PROT_WRITE
,
MAP_SHARED
,
fd
,
GPIO0_START_ADDR
);
gpio_datain
=
gpio_addr
+
GPIO_DATAIN
;
gpio_setdataout_addr
=
gpio_addr
+
GPIO_SETDATAOUT
;
gpio_cleardataout_addr
=
gpio_addr
+
GPIO_CLEARDATAOUT
;
if
(
gpio_addr
==
MAP_FAILED
) {
printf
(
"Unable to map GPIO
\n
"
);
exit
(
1
);
}
printf
(
"GPIO mapped to %p
\n
"
,
gpio_addr
);
printf
(
"GPIO SETDATAOUTADDR mapped to %p
\n
"
,
gpio_setdataout_addr
);
printf
(
"GPIO CLEARDATAOUT mapped to %p
\n
"
,
gpio_cleardataout_addr
);