maixbit: support both GPIO and GPIOHS controllers

Этот коммит содержится в:
Yannis Huber 2020-06-19 17:35:36 +02:00 коммит произвёл Ron Evans
родитель 804dc8b1f9
коммит 53c83fa445
4 изменённых файлов: 104 добавлений и 290 удалений

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

@ -55,265 +55,3 @@ const (
P46 Pin = 46
P47 Pin = 47
)
type FPIOAFunc uint16
// FPIOA functions.
const (
JTAG_TCLK FPIOAFunc = 0 // JTAG Test Clock
JTAG_TDI FPIOAFunc = 1 // JTAG Test Data In
JTAG_TMS FPIOAFunc = 2 // JTAG Test Mode Select
JTAG_TDO FPIOAFunc = 3 // JTAG Test Data Out
SPI0_D0 FPIOAFunc = 4 // SPI0 Data 0
SPI0_D1 FPIOAFunc = 5 // SPI0 Data 1
SPI0_D2 FPIOAFunc = 6 // SPI0 Data 2
SPI0_D3 FPIOAFunc = 7 // SPI0 Data 3
SPI0_D4 FPIOAFunc = 8 // SPI0 Data 4
SPI0_D5 FPIOAFunc = 9 // SPI0 Data 5
SPI0_D6 FPIOAFunc = 10 // SPI0 Data 6
SPI0_D7 FPIOAFunc = 11 // SPI0 Data 7
SPI0_SS0 FPIOAFunc = 12 // SPI0 Chip Select 0
SPI0_SS1 FPIOAFunc = 13 // SPI0 Chip Select 1
SPI0_SS2 FPIOAFunc = 14 // SPI0 Chip Select 2
SPI0_SS3 FPIOAFunc = 15 // SPI0 Chip Select 3
SPI0_ARB FPIOAFunc = 16 // SPI0 Arbitration
SPI0_SCLK FPIOAFunc = 17 // SPI0 Serial Clock
UARTHS_RX FPIOAFunc = 18 // UART High speed Receiver
UARTHS_TX FPIOAFunc = 19 // UART High speed Transmitter
RESV6 FPIOAFunc = 20 // Reserved function
RESV7 FPIOAFunc = 21 // Reserved function
CLK_SPI1 FPIOAFunc = 22 // Clock SPI1
CLK_I2C1 FPIOAFunc = 23 // Clock I2C1
GPIOHS0 FPIOAFunc = 24 // GPIO High speed 0
GPIOHS1 FPIOAFunc = 25 // GPIO High speed 1
GPIOHS2 FPIOAFunc = 26 // GPIO High speed 2
GPIOHS3 FPIOAFunc = 27 // GPIO High speed 3
GPIOHS4 FPIOAFunc = 28 // GPIO High speed 4
GPIOHS5 FPIOAFunc = 29 // GPIO High speed 5
GPIOHS6 FPIOAFunc = 30 // GPIO High speed 6
GPIOHS7 FPIOAFunc = 31 // GPIO High speed 7
GPIOHS8 FPIOAFunc = 32 // GPIO High speed 8
GPIOHS9 FPIOAFunc = 33 // GPIO High speed 9
GPIOHS10 FPIOAFunc = 34 // GPIO High speed 10
GPIOHS11 FPIOAFunc = 35 // GPIO High speed 11
GPIOHS12 FPIOAFunc = 36 // GPIO High speed 12
GPIOHS13 FPIOAFunc = 37 // GPIO High speed 13
GPIOHS14 FPIOAFunc = 38 // GPIO High speed 14
GPIOHS15 FPIOAFunc = 39 // GPIO High speed 15
GPIOHS16 FPIOAFunc = 40 // GPIO High speed 16
GPIOHS17 FPIOAFunc = 41 // GPIO High speed 17
GPIOHS18 FPIOAFunc = 42 // GPIO High speed 18
GPIOHS19 FPIOAFunc = 43 // GPIO High speed 19
GPIOHS20 FPIOAFunc = 44 // GPIO High speed 20
GPIOHS21 FPIOAFunc = 45 // GPIO High speed 21
GPIOHS22 FPIOAFunc = 46 // GPIO High speed 22
GPIOHS23 FPIOAFunc = 47 // GPIO High speed 23
GPIOHS24 FPIOAFunc = 48 // GPIO High speed 24
GPIOHS25 FPIOAFunc = 49 // GPIO High speed 25
GPIOHS26 FPIOAFunc = 50 // GPIO High speed 26
GPIOHS27 FPIOAFunc = 51 // GPIO High speed 27
GPIOHS28 FPIOAFunc = 52 // GPIO High speed 28
GPIOHS29 FPIOAFunc = 53 // GPIO High speed 29
GPIOHS30 FPIOAFunc = 54 // GPIO High speed 30
GPIOHS31 FPIOAFunc = 55 // GPIO High speed 31
GPIO0 FPIOAFunc = 56 // GPIO pin 0
GPIO1 FPIOAFunc = 57 // GPIO pin 1
GPIO2 FPIOAFunc = 58 // GPIO pin 2
GPIO3 FPIOAFunc = 59 // GPIO pin 3
GPIO4 FPIOAFunc = 60 // GPIO pin 4
GPIO5 FPIOAFunc = 61 // GPIO pin 5
GPIO6 FPIOAFunc = 62 // GPIO pin 6
GPIO7 FPIOAFunc = 63 // GPIO pin 7
UART1_RX FPIOAFunc = 64 // UART1 Receiver
UART1_TX FPIOAFunc = 65 // UART1 Transmitter
UART2_RX FPIOAFunc = 66 // UART2 Receiver
UART2_TX FPIOAFunc = 67 // UART2 Transmitter
UART3_RX FPIOAFunc = 68 // UART3 Receiver
UART3_TX FPIOAFunc = 69 // UART3 Transmitter
SPI1_D0 FPIOAFunc = 70 // SPI1 Data 0
SPI1_D1 FPIOAFunc = 71 // SPI1 Data 1
SPI1_D2 FPIOAFunc = 72 // SPI1 Data 2
SPI1_D3 FPIOAFunc = 73 // SPI1 Data 3
SPI1_D4 FPIOAFunc = 74 // SPI1 Data 4
SPI1_D5 FPIOAFunc = 75 // SPI1 Data 5
SPI1_D6 FPIOAFunc = 76 // SPI1 Data 6
SPI1_D7 FPIOAFunc = 77 // SPI1 Data 7
SPI1_SS0 FPIOAFunc = 78 // SPI1 Chip Select 0
SPI1_SS1 FPIOAFunc = 79 // SPI1 Chip Select 1
SPI1_SS2 FPIOAFunc = 80 // SPI1 Chip Select 2
SPI1_SS3 FPIOAFunc = 81 // SPI1 Chip Select 3
SPI1_ARB FPIOAFunc = 82 // SPI1 Arbitration
SPI1_SCLK FPIOAFunc = 83 // SPI1 Serial Clock
SPI_SLAVE_D0 FPIOAFunc = 84 // SPI Slave Data 0
SPI_SLAVE_SS FPIOAFunc = 85 // SPI Slave Select
SPI_SLAVE_SCLK FPIOAFunc = 86 // SPI Slave Serial Clock
I2S0_MCLK FPIOAFunc = 87 // I2S0 Master Clock
I2S0_SCLK FPIOAFunc = 88 // I2S0 Serial Clock(BCLK)
I2S0_WS FPIOAFunc = 89 // I2S0 Word Select(LRCLK)
I2S0_IN_D0 FPIOAFunc = 90 // I2S0 Serial Data Input 0
I2S0_IN_D1 FPIOAFunc = 91 // I2S0 Serial Data Input 1
I2S0_IN_D2 FPIOAFunc = 92 // I2S0 Serial Data Input 2
I2S0_IN_D3 FPIOAFunc = 93 // I2S0 Serial Data Input 3
I2S0_OUT_D0 FPIOAFunc = 94 // I2S0 Serial Data Output 0
I2S0_OUT_D1 FPIOAFunc = 95 // I2S0 Serial Data Output 1
I2S0_OUT_D2 FPIOAFunc = 96 // I2S0 Serial Data Output 2
I2S0_OUT_D3 FPIOAFunc = 97 // I2S0 Serial Data Output 3
I2S1_MCLK FPIOAFunc = 98 // I2S1 Master Clock
I2S1_SCLK FPIOAFunc = 99 // I2S1 Serial Clock(BCLK)
I2S1_WS FPIOAFunc = 100 // I2S1 Word Select(LRCLK)
I2S1_IN_D0 FPIOAFunc = 101 // I2S1 Serial Data Input 0
I2S1_IN_D1 FPIOAFunc = 102 // I2S1 Serial Data Input 1
I2S1_IN_D2 FPIOAFunc = 103 // I2S1 Serial Data Input 2
I2S1_IN_D3 FPIOAFunc = 104 // I2S1 Serial Data Input 3
I2S1_OUT_D0 FPIOAFunc = 105 // I2S1 Serial Data Output 0
I2S1_OUT_D1 FPIOAFunc = 106 // I2S1 Serial Data Output 1
I2S1_OUT_D2 FPIOAFunc = 107 // I2S1 Serial Data Output 2
I2S1_OUT_D3 FPIOAFunc = 108 // I2S1 Serial Data Output 3
I2S2_MCLK FPIOAFunc = 109 // I2S2 Master Clock
I2S2_SCLK FPIOAFunc = 110 // I2S2 Serial Clock(BCLK)
I2S2_WS FPIOAFunc = 111 // I2S2 Word Select(LRCLK)
I2S2_IN_D0 FPIOAFunc = 112 // I2S2 Serial Data Input 0
I2S2_IN_D1 FPIOAFunc = 113 // I2S2 Serial Data Input 1
I2S2_IN_D2 FPIOAFunc = 114 // I2S2 Serial Data Input 2
I2S2_IN_D3 FPIOAFunc = 115 // I2S2 Serial Data Input 3
I2S2_OUT_D0 FPIOAFunc = 116 // I2S2 Serial Data Output 0
I2S2_OUT_D1 FPIOAFunc = 117 // I2S2 Serial Data Output 1
I2S2_OUT_D2 FPIOAFunc = 118 // I2S2 Serial Data Output 2
I2S2_OUT_D3 FPIOAFunc = 119 // I2S2 Serial Data Output 3
RESV0 FPIOAFunc = 120 // Reserved function
RESV1 FPIOAFunc = 121 // Reserved function
RESV2 FPIOAFunc = 122 // Reserved function
RESV3 FPIOAFunc = 123 // Reserved function
RESV4 FPIOAFunc = 124 // Reserved function
RESV5 FPIOAFunc = 125 // Reserved function
I2C0_SCLK FPIOAFunc = 126 // I2C0 Serial Clock
I2C0_SDA FPIOAFunc = 127 // I2C0 Serial Data
I2C1_SCLK FPIOAFunc = 128 // I2C1 Serial Clock
I2C1_SDA FPIOAFunc = 129 // I2C1 Serial Data
I2C2_SCLK FPIOAFunc = 130 // I2C2 Serial Clock
I2C2_SDA FPIOAFunc = 131 // I2C2 Serial Data
CMOS_XCLK FPIOAFunc = 132 // DVP System Clock
CMOS_RST FPIOAFunc = 133 // DVP System Reset
CMOS_PWDN FPIOAFunc = 134 // DVP Power Down Mode
CMOS_VSYNC FPIOAFunc = 135 // DVP Vertical Sync
CMOS_HREF FPIOAFunc = 136 // DVP Horizontal Reference output
CMOS_PCLK FPIOAFunc = 137 // Pixel Clock
CMOS_D0 FPIOAFunc = 138 // Data Bit 0
CMOS_D1 FPIOAFunc = 139 // Data Bit 1
CMOS_D2 FPIOAFunc = 140 // Data Bit 2
CMOS_D3 FPIOAFunc = 141 // Data Bit 3
CMOS_D4 FPIOAFunc = 142 // Data Bit 4
CMOS_D5 FPIOAFunc = 143 // Data Bit 5
CMOS_D6 FPIOAFunc = 144 // Data Bit 6
CMOS_D7 FPIOAFunc = 145 // Data Bit 7
SCCB_SCLK FPIOAFunc = 146 // SCCB Serial Clock
SCCB_SDA FPIOAFunc = 147 // SCCB Serial Data
UART1_CTS FPIOAFunc = 148 // UART1 Clear To Send
UART1_DSR FPIOAFunc = 149 // UART1 Data Set Ready
UART1_DCD FPIOAFunc = 150 // UART1 Data Carrier Detect
UART1_RI FPIOAFunc = 151 // UART1 Ring Indicator
UART1_SIR_IN FPIOAFunc = 152 // UART1 Serial Infrared Input
UART1_DTR FPIOAFunc = 153 // UART1 Data Terminal Ready
UART1_RTS FPIOAFunc = 154 // UART1 Request To Send
UART1_OUT2 FPIOAFunc = 155 // UART1 User-designated Output 2
UART1_OUT1 FPIOAFunc = 156 // UART1 User-designated Output 1
UART1_SIR_OUT FPIOAFunc = 157 // UART1 Serial Infrared Output
UART1_BAUD FPIOAFunc = 158 // UART1 Transmit Clock Output
UART1_RE FPIOAFunc = 159 // UART1 Receiver Output Enable
UART1_DE FPIOAFunc = 160 // UART1 Driver Output Enable
UART1_RS485_EN FPIOAFunc = 161 // UART1 RS485 Enable
UART2_CTS FPIOAFunc = 162 // UART2 Clear To Send
UART2_DSR FPIOAFunc = 163 // UART2 Data Set Ready
UART2_DCD FPIOAFunc = 164 // UART2 Data Carrier Detect
UART2_RI FPIOAFunc = 165 // UART2 Ring Indicator
UART2_SIR_IN FPIOAFunc = 166 // UART2 Serial Infrared Input
UART2_DTR FPIOAFunc = 167 // UART2 Data Terminal Ready
UART2_RTS FPIOAFunc = 168 // UART2 Request To Send
UART2_OUT2 FPIOAFunc = 169 // UART2 User-designated Output 2
UART2_OUT1 FPIOAFunc = 170 // UART2 User-designated Output 1
UART2_SIR_OUT FPIOAFunc = 171 // UART2 Serial Infrared Output
UART2_BAUD FPIOAFunc = 172 // UART2 Transmit Clock Output
UART2_RE FPIOAFunc = 173 // UART2 Receiver Output Enable
UART2_DE FPIOAFunc = 174 // UART2 Driver Output Enable
UART2_RS485_EN FPIOAFunc = 175 // UART2 RS485 Enable
UART3_CTS FPIOAFunc = 176 // UART3 Clear To Send
UART3_DSR FPIOAFunc = 177 // UART3 Data Set Ready
UART3_DCD FPIOAFunc = 178 // UART3 Data Carrier Detect
UART3_RI FPIOAFunc = 179 // UART3 Ring Indicator
UART3_SIR_IN FPIOAFunc = 180 // UART3 Serial Infrared Input
UART3_DTR FPIOAFunc = 181 // UART3 Data Terminal Ready
UART3_RTS FPIOAFunc = 182 // UART3 Request To Send
UART3_OUT2 FPIOAFunc = 183 // UART3 User-designated Output 2
UART3_OUT1 FPIOAFunc = 184 // UART3 User-designated Output 1
UART3_SIR_OUT FPIOAFunc = 185 // UART3 Serial Infrared Output
UART3_BAUD FPIOAFunc = 186 // UART3 Transmit Clock Output
UART3_RE FPIOAFunc = 187 // UART3 Receiver Output Enable
UART3_DE FPIOAFunc = 188 // UART3 Driver Output Enable
UART3_RS485_EN FPIOAFunc = 189 // UART3 RS485 Enable
TIMER0_TOGGLE1 FPIOAFunc = 190 // TIMER0 Toggle Output 1
TIMER0_TOGGLE2 FPIOAFunc = 191 // TIMER0 Toggle Output 2
TIMER0_TOGGLE3 FPIOAFunc = 192 // TIMER0 Toggle Output 3
TIMER0_TOGGLE4 FPIOAFunc = 193 // TIMER0 Toggle Output 4
TIMER1_TOGGLE1 FPIOAFunc = 194 // TIMER1 Toggle Output 1
TIMER1_TOGGLE2 FPIOAFunc = 195 // TIMER1 Toggle Output 2
TIMER1_TOGGLE3 FPIOAFunc = 196 // TIMER1 Toggle Output 3
TIMER1_TOGGLE4 FPIOAFunc = 197 // TIMER1 Toggle Output 4
TIMER2_TOGGLE1 FPIOAFunc = 198 // TIMER2 Toggle Output 1
TIMER2_TOGGLE2 FPIOAFunc = 199 // TIMER2 Toggle Output 2
TIMER2_TOGGLE3 FPIOAFunc = 200 // TIMER2 Toggle Output 3
TIMER2_TOGGLE4 FPIOAFunc = 201 // TIMER2 Toggle Output 4
CLK_SPI2 FPIOAFunc = 202 // Clock SPI2
CLK_I2C2 FPIOAFunc = 203 // Clock I2C2
INTERNAL0 FPIOAFunc = 204 // Internal function signal 0
INTERNAL1 FPIOAFunc = 205 // Internal function signal 1
INTERNAL2 FPIOAFunc = 206 // Internal function signal 2
INTERNAL3 FPIOAFunc = 207 // Internal function signal 3
INTERNAL4 FPIOAFunc = 208 // Internal function signal 4
INTERNAL5 FPIOAFunc = 209 // Internal function signal 5
INTERNAL6 FPIOAFunc = 210 // Internal function signal 6
INTERNAL7 FPIOAFunc = 211 // Internal function signal 7
INTERNAL8 FPIOAFunc = 212 // Internal function signal 8
INTERNAL9 FPIOAFunc = 213 // Internal function signal 9
INTERNAL10 FPIOAFunc = 214 // Internal function signal 10
INTERNAL11 FPIOAFunc = 215 // Internal function signal 11
INTERNAL12 FPIOAFunc = 216 // Internal function signal 12
INTERNAL13 FPIOAFunc = 217 // Internal function signal 13
INTERNAL14 FPIOAFunc = 218 // Internal function signal 14
INTERNAL15 FPIOAFunc = 219 // Internal function signal 15
INTERNAL16 FPIOAFunc = 220 // Internal function signal 16
INTERNAL17 FPIOAFunc = 221 // Internal function signal 17
CONSTANT FPIOAFunc = 222 // Constant function
INTERNAL18 FPIOAFunc = 223 // Internal function signal 18
DEBUG0 FPIOAFunc = 224 // Debug function 0
DEBUG1 FPIOAFunc = 225 // Debug function 1
DEBUG2 FPIOAFunc = 226 // Debug function 2
DEBUG3 FPIOAFunc = 227 // Debug function 3
DEBUG4 FPIOAFunc = 228 // Debug function 4
DEBUG5 FPIOAFunc = 229 // Debug function 5
DEBUG6 FPIOAFunc = 230 // Debug function 6
DEBUG7 FPIOAFunc = 231 // Debug function 7
DEBUG8 FPIOAFunc = 232 // Debug function 8
DEBUG9 FPIOAFunc = 233 // Debug function 9
DEBUG10 FPIOAFunc = 234 // Debug function 10
DEBUG11 FPIOAFunc = 235 // Debug function 11
DEBUG12 FPIOAFunc = 236 // Debug function 12
DEBUG13 FPIOAFunc = 237 // Debug function 13
DEBUG14 FPIOAFunc = 238 // Debug function 14
DEBUG15 FPIOAFunc = 239 // Debug function 15
DEBUG16 FPIOAFunc = 240 // Debug function 16
DEBUG17 FPIOAFunc = 241 // Debug function 17
DEBUG18 FPIOAFunc = 242 // Debug function 18
DEBUG19 FPIOAFunc = 243 // Debug function 19
DEBUG20 FPIOAFunc = 244 // Debug function 20
DEBUG21 FPIOAFunc = 245 // Debug function 21
DEBUG22 FPIOAFunc = 246 // Debug function 22
DEBUG23 FPIOAFunc = 247 // Debug function 23
DEBUG24 FPIOAFunc = 248 // Debug function 24
DEBUG25 FPIOAFunc = 249 // Debug function 25
DEBUG26 FPIOAFunc = 250 // Debug function 26
DEBUG27 FPIOAFunc = 251 // Debug function 27
DEBUG28 FPIOAFunc = 252 // Debug function 28
DEBUG29 FPIOAFunc = 253 // Debug function 29
DEBUG30 FPIOAFunc = 254 // Debug function 30
DEBUG31 FPIOAFunc = 255 // Debug function 31
)

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

@ -15,39 +15,111 @@ type PinMode uint8
const (
PinInput PinMode = iota
PinInputPullUp
PinInputPullDown
PinOutput
PinPWM
PinSPI
PinI2C = PinSPI
)
type fpioaPullMode uint8
const (
fpioaPullNone fpioaPullMode = iota
fpioaPullDown
fpioaPullUp
)
func (p Pin) fpioaSetIOPull(pull fpioaPullMode) {
switch pull {
case fpioaPullNone:
kendryte.FPIOA.IO[uint8(p)].ClearBits(kendryte.FPIOA_IO_PU & kendryte.FPIOA_IO_PD)
case fpioaPullUp:
kendryte.FPIOA.IO[uint8(p)].SetBits(kendryte.FPIOA_IO_PU)
kendryte.FPIOA.IO[uint8(p)].ClearBits(kendryte.FPIOA_IO_PD)
case fpioaPullDown:
kendryte.FPIOA.IO[uint8(p)].ClearBits(kendryte.FPIOA_IO_PU)
kendryte.FPIOA.IO[uint8(p)].SetBits(kendryte.FPIOA_IO_PD)
}
}
// Configure this pin with the given configuration.
func (p Pin) Configure(config PinConfig) {
var input bool
kendryte.FPIOA.IO[uint8(p)].SetBits(kendryte.FPIOA_IO_OE_EN | kendryte.FPIOA_IO_IE_EN | kendryte.FPIOA_IO_ST | kendryte.FPIOA_IO_DS_Msk)
switch config.Mode {
case PinInput:
p.fpioaSetIOPull(fpioaPullNone)
input = true
case PinInputPullUp:
p.fpioaSetIOPull(fpioaPullUp)
input = true
case PinInputPullDown:
p.fpioaSetIOPull(fpioaPullDown)
input = true
case PinOutput:
p.fpioaSetIOPull(fpioaPullNone)
input = false
}
if p >= P08 && p <= P15 {
// Converts the IO pin number in the effective GPIO number (assuming default FPIOA function).
gpioPin := uint8(p) - 8
if input {
kendryte.GPIO.DIRECTION.ClearBits(1 << gpioPin)
} else {
kendryte.GPIO.DIRECTION.SetBits(1 << gpioPin)
}
} else if p >= P16 && p <= P47 {
// Converts the IO pin number in the effective GPIOHS number (assuming default FPIOA function).
gpioPin := uint8(p) - 16
if input {
kendryte.GPIOHS.INPUT_EN.SetBits(1 << gpioPin)
kendryte.GPIOHS.OUTPUT_EN.ClearBits(1 << gpioPin)
} else {
kendryte.GPIOHS.OUTPUT_EN.SetBits(1 << gpioPin)
kendryte.GPIOHS.INPUT_EN.ClearBits(1 << gpioPin)
}
}
}
// Set the pin to high or low.
func (p Pin) Set(high bool) {
if p >= P08 && p <= P15 {
gpioPin := uint8(p) - 8
if high {
kendryte.GPIO.DATA_OUTPUT.SetBits(1 << gpioPin)
} else {
kendryte.GPIO.DATA_OUTPUT.ClearBits(1 << gpioPin)
}
} else if p >= P16 && p <= P47 {
gpioPin := uint8(p) - 16
if high {
kendryte.GPIOHS.OUTPUT_VAL.SetBits(1 << gpioPin)
} else {
kendryte.GPIOHS.OUTPUT_VAL.ClearBits(1 << gpioPin)
}
}
}
// Get returns the current value of a GPIO pin.
func (p Pin) Get() bool {
return true
}
type FPIOA struct {
Bus *kendryte.FPIOA_Type
}
var (
FPIOA0 = FPIOA{Bus: kendryte.FPIOA}
)
func (fpioa FPIOA) Init() {
// Enable APB0 clock.
kendryte.SYSCTL.CLK_EN_CENT.SetBits(kendryte.SYSCTL_CLK_EN_CENT_APB0_CLK_EN)
// Enable FPIOA peripheral.
kendryte.SYSCTL.CLK_EN_PERI.SetBits(kendryte.SYSCTL_CLK_EN_PERI_FPIOA_CLK_EN)
var val uint32
if p >= P08 && p <= P15 {
gpioPin := uint8(p) - 8
val = kendryte.GPIO.DATA_INPUT.Get() & (1 << gpioPin)
} else if p >= P16 && p <= P47 {
gpioPin := uint8(p) - 16
val = kendryte.GPIOHS.INPUT_VAL.Get() & (1 << gpioPin)
}
return (val > 0)
}
type UART struct {

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

@ -99,8 +99,11 @@ func handleInterrupt() {
// initPeripherals configures periperhals the way the runtime expects them.
func initPeripherals() {
// Enable APB0 clock.
kendryte.SYSCTL.CLK_EN_CENT.SetBits(kendryte.SYSCTL_CLK_EN_CENT_APB0_CLK_EN)
machine.FPIOA0.Init()
// Enable FPIOA peripheral.
kendryte.SYSCTL.CLK_EN_PERI.SetBits(kendryte.SYSCTL_CLK_EN_PERI_FPIOA_CLK_EN)
machine.UART0.Configure(machine.UARTConfig{})
}

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

@ -3,20 +3,21 @@
package runtime
import (
"device/kendryte"
"device/riscv"
)
var clockFrequency int64 = int64(kendryte.SYSCTL.CLK_FREQ.Get())
// ticksToNanoseconds converts RTC ticks to nanoseconds.
// ticksToNanoseconds converts CPU ticks to nanoseconds.
func ticksToNanoseconds(ticks timeUnit) int64 {
return int64(ticks) * 1e9 / clockFrequency
// The following calculation is actually the following, but with both sides
// reduced to reduce the risk of overflow:
// ticks * 1e9 / (390000000 / 50)
// 50 is the CLINT divider and 390000000 is the CPU frequency.
return int64(ticks) * 5000 / 39
}
// nanosecondsToTicks converts nanoseconds to RTC ticks.
// nanosecondsToTicks converts nanoseconds to CPU ticks.
func nanosecondsToTicks(ns int64) timeUnit {
return timeUnit(ns * 64 / 1953125)
return timeUnit(ns * 39 / 5000)
}
func abort() {