Add gpio destructor
This commit is contained in:
parent
17748b0b0e
commit
2ca0ed14a5
3 changed files with 14 additions and 11 deletions
16
src/gpio.cpp
16
src/gpio.cpp
|
@ -29,13 +29,15 @@ gpio::gpio(uint32_t base, uint32_t len)
|
||||||
{
|
{
|
||||||
|
|
||||||
gpioreg = (uint32_t *)mapmem(base, len);
|
gpioreg = (uint32_t *)mapmem(base, len);
|
||||||
|
gpiolen=len;
|
||||||
/*int mhandle=mbox_open();
|
|
||||||
get_clocks(mhandle);
|
|
||||||
mbox_close(mhandle);
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gpio::~gpio()
|
||||||
|
{
|
||||||
|
if(gpioreg!=NULL)
|
||||||
|
unmapmem((void*)gpioreg,gpiolen);
|
||||||
|
|
||||||
|
}
|
||||||
uint32_t gpio::GetPeripheralBase()
|
uint32_t gpio::GetPeripheralBase()
|
||||||
{
|
{
|
||||||
RASPBERRY_PI_INFO_T info;
|
RASPBERRY_PI_INFO_T info;
|
||||||
|
@ -70,7 +72,7 @@ clkgpio::clkgpio() : gpio(GetPeripheralBase() + CLK_BASE, CLK_LEN)
|
||||||
clkgpio::~clkgpio()
|
clkgpio::~clkgpio()
|
||||||
{
|
{
|
||||||
gpioreg[GPCLK_CNTL] = 0x5A000000 | (Mash << 9) | pllnumber | (0 << 4); //4 is START CLK
|
gpioreg[GPCLK_CNTL] = 0x5A000000 | (Mash << 9) | pllnumber | (0 << 4); //4 is START CLK
|
||||||
gpioreg[GPCLK_CNTL_2] = 0x5A000000 | (Mash << 9) | pllnumber | (0 << 4); //4 is START CLK
|
//gpioreg[GPCLK_CNTL_2] = 0x5A000000 | (Mash << 9) | pllnumber | (0 << 4); //4 is START CLK
|
||||||
usleep(100);
|
usleep(100);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -116,7 +118,7 @@ uint64_t clkgpio::GetPllFrequency(int PllNo)
|
||||||
Freq = XOSC_FREQUENCY * ((uint64_t)gpioreg[PLLH_CTRL] & 0x3ff) + XOSC_FREQUENCY * (uint64_t)gpioreg[PLLH_FRAC] / (1 << 20);
|
Freq = XOSC_FREQUENCY * ((uint64_t)gpioreg[PLLH_CTRL] & 0x3ff) + XOSC_FREQUENCY * (uint64_t)gpioreg[PLLH_FRAC] / (1 << 20);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
fprintf(stderr, "Freq = %lu\n", Freq);
|
fprintf(stderr, "Freq = %llu\n", Freq);
|
||||||
|
|
||||||
return Freq;
|
return Freq;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#ifndef DEF_GPIO
|
#ifndef DEF_GPIO
|
||||||
#define DEF_GPIO
|
#define DEF_GPIO
|
||||||
#include "stdint.h"
|
#include "stdint.h"
|
||||||
|
#include <cstdio>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -9,9 +9,10 @@ class gpio
|
||||||
{
|
{
|
||||||
|
|
||||||
public:
|
public:
|
||||||
volatile uint32_t *gpioreg;
|
volatile uint32_t *gpioreg=NULL;
|
||||||
|
uint32_t gpiolen;
|
||||||
gpio(uint32_t base, uint32_t len);
|
gpio(uint32_t base, uint32_t len);
|
||||||
|
~gpio();
|
||||||
uint32_t GetPeripheralBase();
|
uint32_t GetPeripheralBase();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -74,7 +74,7 @@ void *unmapmem(void *addr, unsigned size)
|
||||||
{
|
{
|
||||||
int s = munmap(addr, size);
|
int s = munmap(addr, size);
|
||||||
if (s != 0) {
|
if (s != 0) {
|
||||||
printf("munmap error %d\n", s);
|
fprintf(stderr,"munmap error %d\n", s);
|
||||||
exit (-1);
|
exit (-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue