c++
This commit is contained in:
parent
82d41c19a0
commit
d2548dc950
@ -65,8 +65,8 @@ const int bPinTowPin[41] =
|
||||
-1, 29, //39, 40
|
||||
} ;
|
||||
|
||||
unsigned int SUNXI_PIO_BASE = 0;
|
||||
unsigned int SUNXI_PIO_LM_BASE = 0;
|
||||
unsigned int SUNXI_PIO_BASE = 0;
|
||||
unsigned int SUNXI_PIO_LM_BASE = 0;
|
||||
static volatile long int *gpio_map = NULL;
|
||||
|
||||
void delay(unsigned int howLong)
|
||||
@ -174,17 +174,17 @@ void sayhello()
|
||||
}
|
||||
}
|
||||
|
||||
void mikuPiSetup (void)
|
||||
void mikuPiSetup (void)
|
||||
{
|
||||
int fd;
|
||||
unsigned int addr_start, addr_offset;
|
||||
unsigned int PageSize, PageMask;
|
||||
|
||||
if (geteuid () != 0)
|
||||
piBoardRevOops("MikuPiSetup: Must be root. (Did you forget sudo?)");
|
||||
|
||||
int model, mem;
|
||||
piBoardId (&model, &mem);
|
||||
int fd;
|
||||
unsigned int addr_start, addr_offset;
|
||||
unsigned int PageSize, PageMask;
|
||||
|
||||
if (geteuid () != 0)
|
||||
piBoardRevOops("MikuPiSetup: Must be root. (Did you forget sudo?)");
|
||||
|
||||
int model, mem;
|
||||
piBoardId (&model, &mem);
|
||||
if (model == PI_MODEL_UNKNOWN)
|
||||
{
|
||||
printf ("Your Pi has an unknown model type. Please report this to\n") ;
|
||||
@ -194,56 +194,56 @@ void mikuPiSetup (void)
|
||||
if (model == PI_MODEL_M2p)
|
||||
{
|
||||
wPinToGpio=wPinToGpioM2p;
|
||||
}
|
||||
}
|
||||
if (model == PI_MODEL_M3)
|
||||
{
|
||||
wPinToGpio=wPinToGpioM3;
|
||||
}
|
||||
|
||||
fd = open("/dev/mem", O_RDWR);
|
||||
|
||||
PageSize = sysconf(_SC_PAGESIZE);
|
||||
PageMask = (~(PageSize-1));
|
||||
|
||||
addr_start = SW_PORTC_IO_BASE & PageMask;
|
||||
addr_offset = SW_PORTC_IO_BASE & ~PageMask;
|
||||
gpio_map = (void *)mmap(0, PageSize*2, PROT_READ|PROT_WRITE, MAP_SHARED, fd, addr_start);
|
||||
|
||||
SUNXI_PIO_BASE = (unsigned int)gpio_map;
|
||||
SUNXI_PIO_BASE += addr_offset;
|
||||
|
||||
addr_start = SW_PORTL_IO_BASE & PageMask;
|
||||
addr_offset = SW_PORTL_IO_BASE & ~PageMask;
|
||||
gpio_map = (void *)mmap(0, PageSize*2, PROT_READ|PROT_WRITE, MAP_SHARED, fd, addr_start);
|
||||
|
||||
SUNXI_PIO_LM_BASE = (unsigned int)gpio_map;
|
||||
SUNXI_PIO_LM_BASE += addr_offset;
|
||||
|
||||
}
|
||||
|
||||
fd = open("/dev/mem", O_RDWR);
|
||||
|
||||
PageSize = sysconf(_SC_PAGESIZE);
|
||||
PageMask = (~(PageSize-1));
|
||||
|
||||
addr_start = SW_PORTC_IO_BASE & PageMask;
|
||||
addr_offset = SW_PORTC_IO_BASE & ~PageMask;
|
||||
gpio_map = (volatile long int*)mmap(0, PageSize*2, PROT_READ|PROT_WRITE, MAP_SHARED, fd, addr_start);
|
||||
|
||||
SUNXI_PIO_BASE = (unsigned int)gpio_map;
|
||||
SUNXI_PIO_BASE += addr_offset;
|
||||
|
||||
addr_start = SW_PORTL_IO_BASE & PageMask;
|
||||
addr_offset = SW_PORTL_IO_BASE & ~PageMask;
|
||||
gpio_map = (volatile long int*)mmap(0, PageSize*2, PROT_READ|PROT_WRITE, MAP_SHARED, fd, addr_start);
|
||||
|
||||
SUNXI_PIO_LM_BASE = (unsigned int)gpio_map;
|
||||
SUNXI_PIO_LM_BASE += addr_offset;
|
||||
|
||||
close(fd);
|
||||
}
|
||||
|
||||
void pinMode(int pin, int mode)
|
||||
{
|
||||
pin=wPinToGpio[pin];
|
||||
unsigned int val = mode;
|
||||
unsigned int cfg;
|
||||
unsigned int bank = GPIO_BANK(pin);
|
||||
unsigned int index = GPIO_CFG_INDEX(pin);
|
||||
unsigned int offset = GPIO_CFG_OFFSET(pin);
|
||||
|
||||
if(SUNXI_PIO_BASE == 0)
|
||||
return;
|
||||
|
||||
struct sunxi_gpio *pio;
|
||||
if(bank>10)
|
||||
pio = &((struct sunxi_gpio_reg *)SUNXI_PIO_LM_BASE)->gpio_bank[bank-11];
|
||||
else
|
||||
pio = &((struct sunxi_gpio_reg *)SUNXI_PIO_BASE)->gpio_bank[bank];
|
||||
|
||||
cfg = *(&pio->cfg[0] + index);
|
||||
cfg &= ~(0xf << offset);
|
||||
cfg |= val << offset;
|
||||
|
||||
{
|
||||
pin=wPinToGpio[pin];
|
||||
unsigned int val = mode;
|
||||
unsigned int cfg;
|
||||
unsigned int bank = GPIO_BANK(pin);
|
||||
unsigned int index = GPIO_CFG_INDEX(pin);
|
||||
unsigned int offset = GPIO_CFG_OFFSET(pin);
|
||||
|
||||
if(SUNXI_PIO_BASE == 0)
|
||||
return;
|
||||
|
||||
struct sunxi_gpio *pio;
|
||||
if(bank>10)
|
||||
pio = &((struct sunxi_gpio_reg *)SUNXI_PIO_LM_BASE)->gpio_bank[bank-11];
|
||||
else
|
||||
pio = &((struct sunxi_gpio_reg *)SUNXI_PIO_BASE)->gpio_bank[bank];
|
||||
|
||||
cfg = *(&pio->cfg[0] + index);
|
||||
cfg &= ~(0xf << offset);
|
||||
cfg |= val << offset;
|
||||
|
||||
*(&pio->cfg[0] + index) = cfg;
|
||||
}
|
||||
|
||||
@ -251,20 +251,21 @@ void digitalWrite(int pin, int value)
|
||||
{
|
||||
pin=wPinToGpio[pin];
|
||||
unsigned int val = value;
|
||||
unsigned int bank = GPIO_BANK(pin);
|
||||
unsigned int num = GPIO_NUM(pin);
|
||||
|
||||
if(SUNXI_PIO_BASE == 0)
|
||||
return;
|
||||
|
||||
struct sunxi_gpio *pio;
|
||||
if(bank>10)
|
||||
pio = &((struct sunxi_gpio_reg *)SUNXI_PIO_LM_BASE)->gpio_bank[bank-11];
|
||||
else
|
||||
pio = &((struct sunxi_gpio_reg *)SUNXI_PIO_BASE)->gpio_bank[bank];
|
||||
|
||||
if(val)
|
||||
*(&pio->dat) |= 1 << num;
|
||||
else
|
||||
unsigned int bank = GPIO_BANK(pin);
|
||||
unsigned int num = GPIO_NUM(pin);
|
||||
|
||||
if(SUNXI_PIO_BASE == 0)
|
||||
return;
|
||||
|
||||
struct sunxi_gpio *pio;
|
||||
if(bank>10)
|
||||
pio = &((struct sunxi_gpio_reg *)SUNXI_PIO_LM_BASE)->gpio_bank[bank-11];
|
||||
else
|
||||
pio = &((struct sunxi_gpio_reg *)SUNXI_PIO_BASE)->gpio_bank[bank];
|
||||
|
||||
if(val)
|
||||
*(&pio->dat) |= 1 << num;
|
||||
else
|
||||
*(&pio->dat) &= ~(1 << num);
|
||||
}
|
||||
|
||||
@ -4,9 +4,11 @@
|
||||
cd MikuPi
|
||||
sudo make
|
||||
|
||||
because Arduino based C++, update MikuDuino to C++, 2016-6-4
|
||||
|
||||
<pre><code>
|
||||
cd examples
|
||||
gcc -Wall -o blink blink.c -lMikuDuino
|
||||
gcc -Wall -o blink blink.cpp -lMikuDuino
|
||||
sudo ./blink
|
||||
</code></pre>
|
||||
|
||||
|
||||
BIN
examples/blink
BIN
examples/blink
Binary file not shown.
Binary file not shown.
@ -1,9 +1,9 @@
|
||||
/*
|
||||
* blink.c:
|
||||
* blink-qubot.cpp:
|
||||
*
|
||||
* Welcome to MikuQ.com! MikuDuino for BananaPi
|
||||
*
|
||||
* by MikuQ(i@mikuq.com) 2016-6-2
|
||||
* by MikuQ(i@mikuq.com) 2016-6-3
|
||||
*
|
||||
* https://github.com/bpiq/MikuPi
|
||||
*
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* blink.c:
|
||||
* blink.cpp:
|
||||
*
|
||||
* Welcome to MikuQ.com! MikuDuino for BananaPi
|
||||
*
|
||||
4
makefile
4
makefile
@ -1,5 +1,5 @@
|
||||
libMikuDuino.so : MikuPi.c MikuDuino.c
|
||||
@gcc MikuPi.c MikuDuino.c -fPIC -shared -o libMikuDuino.so
|
||||
libMikuDuino.so : MikuPi.cpp MikuDuino.cpp
|
||||
@gcc MikuPi.cpp MikuDuino.cpp -fPIC -shared -o libMikuDuino.so
|
||||
@install libMikuDuino.so /usr/lib/
|
||||
@install *.h /usr/include/
|
||||
@rm -f *.so
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user