machine/hifive1: add GPIO Get() implementation and update other implementation to match latest SVD wrappers

Signed-off-by: Ron Evans <ron@hybridgroup.com>
Этот коммит содержится в:
Ron Evans 2019-10-08 20:22:53 +02:00 коммит произвёл Ayke
родитель 92e07ec8af
коммит 2168b1b516
3 изменённых файлов: 38 добавлений и 8 удалений

Просмотреть файл

@ -2,6 +2,29 @@
package machine
const (
D0 = P16
D1 = P17
D2 = P18
D3 = P19 // Green LED/PWM
D4 = P20 // PWM
D5 = P21 // Blue LED/PWM
D6 = P22 // Red LED/PWM
D7 = P16
D8 = NoPin // PWM?
D9 = P01
D10 = P02
D11 = P03
D12 = P04
D13 = P05
D14 = NoPin // not connected
D15 = P09 // does not seem to work?
D16 = P10 // PWM
D17 = P11 // PWM
D18 = P12 // SDA/PWM
D19 = P13 // SDL/PWM
)
const (
LED = LED1
LED1 = LED_RED

Просмотреть файл

@ -30,6 +30,13 @@ func (p Pin) Set(high bool) {
}
}
// Get returns the current value of a GPIO pin.
func (p Pin) Get() bool {
val := sifive.GPIO0.VALUE.Get() & (1 << uint8(p))
println(sifive.GPIO0.VALUE.Get())
return (val > 0)
}
type UART struct {
Bus *sifive.UART_Type
Buffer *RingBuffer

Просмотреть файл

@ -47,17 +47,17 @@ func init() {
func pric_init() {
// Make sure the HFROSC is on
sifive.PRIC.HFROSCCFG.SetBits(sifive.PRIC_HFROSCCFG_ENABLE)
sifive.PRCI.HFROSCCFG.SetBits(sifive.PRCI_HFROSCCFG_ENABLE)
// Run off 16 MHz Crystal for accuracy.
sifive.PRIC.PLLCFG.SetBits(sifive.PRIC_PLLCFG_REFSEL | sifive.PRIC_PLLCFG_BYPASS)
sifive.PRIC.PLLCFG.SetBits(sifive.PRIC_PLLCFG_SEL)
sifive.PRCI.PLLCFG.SetBits(sifive.PRCI_PLLCFG_REFSEL | sifive.PRCI_PLLCFG_BYPASS)
sifive.PRCI.PLLCFG.SetBits(sifive.PRCI_PLLCFG_SEL)
// Turn off HFROSC to save power
sifive.PRIC.HFROSCCFG.ClearBits(sifive.PRIC_HFROSCCFG_ENABLE)
sifive.PRCI.HFROSCCFG.ClearBits(sifive.PRCI_HFROSCCFG_ENABLE)
// Enable the RTC.
sifive.RTC.CONFIG.Set(sifive.RTC_CONFIG_ENALWAYS)
sifive.RTC.RTCCFG.Set(sifive.RTC_RTCCFG_ENALWAYS)
}
func preinit() {
@ -85,10 +85,10 @@ func putchar(c byte) {
func ticks() timeUnit {
// Combining the low bits and the high bits yields a time span of over 270
// years without counter rollover.
highBits := sifive.RTC.HI.Get()
highBits := sifive.RTC.RTCHI.Get()
for {
lowBits := sifive.RTC.LO.Get()
newHighBits := sifive.RTC.HI.Get()
lowBits := sifive.RTC.RTCLO.Get()
newHighBits := sifive.RTC.RTCHI.Get()
if newHighBits == highBits {
// High bits stayed the same.
return timeUnit(lowBits) | (timeUnit(highBits) << 32)