mirror of
https://github.com/stianeikeland/go-rpio.git
synced 2025-03-15 17:18:44 +01:00
Mmap pwm memmory
This commit is contained in:
parent
4a31f2cfa6
commit
cc678981b0
12
rpio.go
12
rpio.go
|
@ -76,6 +76,7 @@ const (
|
||||||
bcm2835Base = 0x20000000
|
bcm2835Base = 0x20000000
|
||||||
gpioOffset = 0x200000
|
gpioOffset = 0x200000
|
||||||
clkOffset = 0x101000
|
clkOffset = 0x101000
|
||||||
|
pwmOffset = 0x20C000
|
||||||
|
|
||||||
memLength = 4096
|
memLength = 4096
|
||||||
)
|
)
|
||||||
|
@ -83,12 +84,14 @@ const (
|
||||||
var (
|
var (
|
||||||
gpioBase int64
|
gpioBase int64
|
||||||
clkBase int64
|
clkBase int64
|
||||||
|
pwmBase int64
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
base := getBase()
|
base := getBase()
|
||||||
gpioBase = base + gpioOffset
|
gpioBase = base + gpioOffset
|
||||||
clkBase = base + clkOffset
|
clkBase = base + clkOffset
|
||||||
|
pwmBase = base + pwmOffset
|
||||||
}
|
}
|
||||||
|
|
||||||
// Pin mode, a pin can be set in Input or Output, Clock or Pwm mode
|
// Pin mode, a pin can be set in Input or Output, Clock or Pwm mode
|
||||||
|
@ -117,8 +120,10 @@ var (
|
||||||
memlock sync.Mutex
|
memlock sync.Mutex
|
||||||
gpioMem []uint32
|
gpioMem []uint32
|
||||||
clkMem []uint32
|
clkMem []uint32
|
||||||
|
pwmMem []uint32
|
||||||
gpioMem8 []uint8
|
gpioMem8 []uint8
|
||||||
clkMem8 []uint8
|
clkMem8 []uint8
|
||||||
|
pwmMem8 []uint8
|
||||||
)
|
)
|
||||||
|
|
||||||
// Set pin as Input
|
// Set pin as Input
|
||||||
|
@ -388,7 +393,7 @@ func Open() (err error) {
|
||||||
|
|
||||||
// Open fd for rw mem access; try dev/mem first (need root)
|
// Open fd for rw mem access; try dev/mem first (need root)
|
||||||
file, err = os.OpenFile("/dev/mem", os.O_RDWR|os.O_SYNC, 0)
|
file, err = os.OpenFile("/dev/mem", os.O_RDWR|os.O_SYNC, 0)
|
||||||
if os.IsPermission(err) { // try gpiomem otherwise (some extra functions like clock setting wont work)
|
if os.IsPermission(err) { // try gpiomem otherwise (some extra functions like clock and pwm setting wont work)
|
||||||
file, err = os.OpenFile("/dev/gpiomem", os.O_RDWR|os.O_SYNC, 0)
|
file, err = os.OpenFile("/dev/gpiomem", os.O_RDWR|os.O_SYNC, 0)
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -412,6 +417,11 @@ func Open() (err error) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pwmMem, pwmMem8, err = memMap(file.Fd(), clkBase)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user