maixbit

Constants

const (
	P00	Pin	= 0
	P01	Pin	= 1
	P02	Pin	= 2
	P03	Pin	= 3
	P04	Pin	= 4
	P05	Pin	= 5
	P06	Pin	= 6
	P07	Pin	= 7
	P08	Pin	= 8
	P09	Pin	= 9
	P10	Pin	= 10
	P11	Pin	= 11
	P12	Pin	= 12
	P13	Pin	= 13
	P14	Pin	= 14
	P15	Pin	= 15
	P16	Pin	= 16
	P17	Pin	= 17
	P18	Pin	= 18
	P19	Pin	= 19
	P20	Pin	= 20
	P21	Pin	= 21
	P22	Pin	= 22
	P23	Pin	= 23
	P24	Pin	= 24
	P25	Pin	= 25
	P26	Pin	= 26
	P27	Pin	= 27
	P28	Pin	= 28
	P29	Pin	= 29
	P30	Pin	= 30
	P31	Pin	= 31
	P32	Pin	= 32
	P33	Pin	= 33
	P34	Pin	= 34
	P35	Pin	= 35
	P36	Pin	= 36
	P37	Pin	= 37
	P38	Pin	= 38
	P39	Pin	= 39
	P40	Pin	= 40
	P41	Pin	= 41
	P42	Pin	= 42
	P43	Pin	= 43
	P44	Pin	= 44
	P45	Pin	= 45
	P46	Pin	= 46
	P47	Pin	= 47
)

K210 IO pins.

const (
	FUNC_JTAG_TCLK			FPIOAFunction	= 0	// JTAG Test Clock
	FUNC_JTAG_TDI			FPIOAFunction	= 1	// JTAG Test Data In
	FUNC_JTAG_TMS			FPIOAFunction	= 2	// JTAG Test Mode Select
	FUNC_JTAG_TDO			FPIOAFunction	= 3	// JTAG Test Data Out
	FUNC_SPI0_D0			FPIOAFunction	= 4	// SPI0 Data 0
	FUNC_SPI0_D1			FPIOAFunction	= 5	// SPI0 Data 1
	FUNC_SPI0_D2			FPIOAFunction	= 6	// SPI0 Data 2
	FUNC_SPI0_D3			FPIOAFunction	= 7	// SPI0 Data 3
	FUNC_SPI0_D4			FPIOAFunction	= 8	// SPI0 Data 4
	FUNC_SPI0_D5			FPIOAFunction	= 9	// SPI0 Data 5
	FUNC_SPI0_D6			FPIOAFunction	= 10	// SPI0 Data 6
	FUNC_SPI0_D7			FPIOAFunction	= 11	// SPI0 Data 7
	FUNC_SPI0_SS0			FPIOAFunction	= 12	// SPI0 Chip Select 0
	FUNC_SPI0_SS1			FPIOAFunction	= 13	// SPI0 Chip Select 1
	FUNC_SPI0_SS2			FPIOAFunction	= 14	// SPI0 Chip Select 2
	FUNC_SPI0_SS3			FPIOAFunction	= 15	// SPI0 Chip Select 3
	FUNC_SPI0_ARB			FPIOAFunction	= 16	// SPI0 Arbitration
	FUNC_SPI0_SCLK			FPIOAFunction	= 17	// SPI0 Serial Clock
	FUNC_UARTHS_RX			FPIOAFunction	= 18	// UART High speed Receiver
	FUNC_UARTHS_TX			FPIOAFunction	= 19	// UART High speed Transmitter
	FUNC_RESV6			FPIOAFunction	= 20	// Reserved function
	FUNC_RESV7			FPIOAFunction	= 21	// Reserved function
	FUNC_CLK_SPI1			FPIOAFunction	= 22	// Clock SPI1
	FUNC_CLK_I2C1			FPIOAFunction	= 23	// Clock I2C1
	FUNC_GPIOHS0			FPIOAFunction	= 24	// GPIO High speed 0
	FUNC_GPIOHS1			FPIOAFunction	= 25	// GPIO High speed 1
	FUNC_GPIOHS2			FPIOAFunction	= 26	// GPIO High speed 2
	FUNC_GPIOHS3			FPIOAFunction	= 27	// GPIO High speed 3
	FUNC_GPIOHS4			FPIOAFunction	= 28	// GPIO High speed 4
	FUNC_GPIOHS5			FPIOAFunction	= 29	// GPIO High speed 5
	FUNC_GPIOHS6			FPIOAFunction	= 30	// GPIO High speed 6
	FUNC_GPIOHS7			FPIOAFunction	= 31	// GPIO High speed 7
	FUNC_GPIOHS8			FPIOAFunction	= 32	// GPIO High speed 8
	FUNC_GPIOHS9			FPIOAFunction	= 33	// GPIO High speed 9
	FUNC_GPIOHS10			FPIOAFunction	= 34	// GPIO High speed 10
	FUNC_GPIOHS11			FPIOAFunction	= 35	// GPIO High speed 11
	FUNC_GPIOHS12			FPIOAFunction	= 36	// GPIO High speed 12
	FUNC_GPIOHS13			FPIOAFunction	= 37	// GPIO High speed 13
	FUNC_GPIOHS14			FPIOAFunction	= 38	// GPIO High speed 14
	FUNC_GPIOHS15			FPIOAFunction	= 39	// GPIO High speed 15
	FUNC_GPIOHS16			FPIOAFunction	= 40	// GPIO High speed 16
	FUNC_GPIOHS17			FPIOAFunction	= 41	// GPIO High speed 17
	FUNC_GPIOHS18			FPIOAFunction	= 42	// GPIO High speed 18
	FUNC_GPIOHS19			FPIOAFunction	= 43	// GPIO High speed 19
	FUNC_GPIOHS20			FPIOAFunction	= 44	// GPIO High speed 20
	FUNC_GPIOHS21			FPIOAFunction	= 45	// GPIO High speed 21
	FUNC_GPIOHS22			FPIOAFunction	= 46	// GPIO High speed 22
	FUNC_GPIOHS23			FPIOAFunction	= 47	// GPIO High speed 23
	FUNC_GPIOHS24			FPIOAFunction	= 48	// GPIO High speed 24
	FUNC_GPIOHS25			FPIOAFunction	= 49	// GPIO High speed 25
	FUNC_GPIOHS26			FPIOAFunction	= 50	// GPIO High speed 26
	FUNC_GPIOHS27			FPIOAFunction	= 51	// GPIO High speed 27
	FUNC_GPIOHS28			FPIOAFunction	= 52	// GPIO High speed 28
	FUNC_GPIOHS29			FPIOAFunction	= 53	// GPIO High speed 29
	FUNC_GPIOHS30			FPIOAFunction	= 54	// GPIO High speed 30
	FUNC_GPIOHS31			FPIOAFunction	= 55	// GPIO High speed 31
	FUNC_GPIO0			FPIOAFunction	= 56	// GPIO pin 0
	FUNC_GPIO1			FPIOAFunction	= 57	// GPIO pin 1
	FUNC_GPIO2			FPIOAFunction	= 58	// GPIO pin 2
	FUNC_GPIO3			FPIOAFunction	= 59	// GPIO pin 3
	FUNC_GPIO4			FPIOAFunction	= 60	// GPIO pin 4
	FUNC_GPIO5			FPIOAFunction	= 61	// GPIO pin 5
	FUNC_GPIO6			FPIOAFunction	= 62	// GPIO pin 6
	FUNC_GPIO7			FPIOAFunction	= 63	// GPIO pin 7
	FUNC_UART1_RX			FPIOAFunction	= 64	// UART1 Receiver
	FUNC_UART1_TX			FPIOAFunction	= 65	// UART1 Transmitter
	FUNC_UART2_RX			FPIOAFunction	= 66	// UART2 Receiver
	FUNC_UART2_TX			FPIOAFunction	= 67	// UART2 Transmitter
	FUNC_UART3_RX			FPIOAFunction	= 68	// UART3 Receiver
	FUNC_UART3_TX			FPIOAFunction	= 69	// UART3 Transmitter
	FUNC_SPI1_D0			FPIOAFunction	= 70	// SPI1 Data 0
	FUNC_SPI1_D1			FPIOAFunction	= 71	// SPI1 Data 1
	FUNC_SPI1_D2			FPIOAFunction	= 72	// SPI1 Data 2
	FUNC_SPI1_D3			FPIOAFunction	= 73	// SPI1 Data 3
	FUNC_SPI1_D4			FPIOAFunction	= 74	// SPI1 Data 4
	FUNC_SPI1_D5			FPIOAFunction	= 75	// SPI1 Data 5
	FUNC_SPI1_D6			FPIOAFunction	= 76	// SPI1 Data 6
	FUNC_SPI1_D7			FPIOAFunction	= 77	// SPI1 Data 7
	FUNC_SPI1_SS0			FPIOAFunction	= 78	// SPI1 Chip Select 0
	FUNC_SPI1_SS1			FPIOAFunction	= 79	// SPI1 Chip Select 1
	FUNC_SPI1_SS2			FPIOAFunction	= 80	// SPI1 Chip Select 2
	FUNC_SPI1_SS3			FPIOAFunction	= 81	// SPI1 Chip Select 3
	FUNC_SPI1_ARB			FPIOAFunction	= 82	// SPI1 Arbitration
	FUNC_SPI1_SCLK			FPIOAFunction	= 83	// SPI1 Serial Clock
	FUNC_SPI_PERIPHERAL_D0		FPIOAFunction	= 84	// SPI Peripheral Data 0
	FUNC_SPI_PERIPHERAL_SS		FPIOAFunction	= 85	// SPI Peripheral Select
	FUNC_SPI_PERIPHERAL_SCLK	FPIOAFunction	= 86	// SPI Peripheral Serial Clock
	FUNC_I2S0_MCLK			FPIOAFunction	= 87	// I2S0 Main Clock
	FUNC_I2S0_SCLK			FPIOAFunction	= 88	// I2S0 Serial Clock(BCLK)
	FUNC_I2S0_WS			FPIOAFunction	= 89	// I2S0 Word Select(LRCLK)
	FUNC_I2S0_IN_D0			FPIOAFunction	= 90	// I2S0 Serial Data Input 0
	FUNC_I2S0_IN_D1			FPIOAFunction	= 91	// I2S0 Serial Data Input 1
	FUNC_I2S0_IN_D2			FPIOAFunction	= 92	// I2S0 Serial Data Input 2
	FUNC_I2S0_IN_D3			FPIOAFunction	= 93	// I2S0 Serial Data Input 3
	FUNC_I2S0_OUT_D0		FPIOAFunction	= 94	// I2S0 Serial Data Output 0
	FUNC_I2S0_OUT_D1		FPIOAFunction	= 95	// I2S0 Serial Data Output 1
	FUNC_I2S0_OUT_D2		FPIOAFunction	= 96	// I2S0 Serial Data Output 2
	FUNC_I2S0_OUT_D3		FPIOAFunction	= 97	// I2S0 Serial Data Output 3
	FUNC_I2S1_MCLK			FPIOAFunction	= 98	// I2S1 Main Clock
	FUNC_I2S1_SCLK			FPIOAFunction	= 99	// I2S1 Serial Clock(BCLK)
	FUNC_I2S1_WS			FPIOAFunction	= 100	// I2S1 Word Select(LRCLK)
	FUNC_I2S1_IN_D0			FPIOAFunction	= 101	// I2S1 Serial Data Input 0
	FUNC_I2S1_IN_D1			FPIOAFunction	= 102	// I2S1 Serial Data Input 1
	FUNC_I2S1_IN_D2			FPIOAFunction	= 103	// I2S1 Serial Data Input 2
	FUNC_I2S1_IN_D3			FPIOAFunction	= 104	// I2S1 Serial Data Input 3
	FUNC_I2S1_OUT_D0		FPIOAFunction	= 105	// I2S1 Serial Data Output 0
	FUNC_I2S1_OUT_D1		FPIOAFunction	= 106	// I2S1 Serial Data Output 1
	FUNC_I2S1_OUT_D2		FPIOAFunction	= 107	// I2S1 Serial Data Output 2
	FUNC_I2S1_OUT_D3		FPIOAFunction	= 108	// I2S1 Serial Data Output 3
	FUNC_I2S2_MCLK			FPIOAFunction	= 109	// I2S2 Main Clock
	FUNC_I2S2_SCLK			FPIOAFunction	= 110	// I2S2 Serial Clock(BCLK)
	FUNC_I2S2_WS			FPIOAFunction	= 111	// I2S2 Word Select(LRCLK)
	FUNC_I2S2_IN_D0			FPIOAFunction	= 112	// I2S2 Serial Data Input 0
	FUNC_I2S2_IN_D1			FPIOAFunction	= 113	// I2S2 Serial Data Input 1
	FUNC_I2S2_IN_D2			FPIOAFunction	= 114	// I2S2 Serial Data Input 2
	FUNC_I2S2_IN_D3			FPIOAFunction	= 115	// I2S2 Serial Data Input 3
	FUNC_I2S2_OUT_D0		FPIOAFunction	= 116	// I2S2 Serial Data Output 0
	FUNC_I2S2_OUT_D1		FPIOAFunction	= 117	// I2S2 Serial Data Output 1
	FUNC_I2S2_OUT_D2		FPIOAFunction	= 118	// I2S2 Serial Data Output 2
	FUNC_I2S2_OUT_D3		FPIOAFunction	= 119	// I2S2 Serial Data Output 3
	FUNC_RESV0			FPIOAFunction	= 120	// Reserved function
	FUNC_RESV1			FPIOAFunction	= 121	// Reserved function
	FUNC_RESV2			FPIOAFunction	= 122	// Reserved function
	FUNC_RESV3			FPIOAFunction	= 123	// Reserved function
	FUNC_RESV4			FPIOAFunction	= 124	// Reserved function
	FUNC_RESV5			FPIOAFunction	= 125	// Reserved function
	FUNC_I2C0_SCLK			FPIOAFunction	= 126	// I2C0 Serial Clock
	FUNC_I2C0_SDA			FPIOAFunction	= 127	// I2C0 Serial Data
	FUNC_I2C1_SCLK			FPIOAFunction	= 128	// I2C1 Serial Clock
	FUNC_I2C1_SDA			FPIOAFunction	= 129	// I2C1 Serial Data
	FUNC_I2C2_SCLK			FPIOAFunction	= 130	// I2C2 Serial Clock
	FUNC_I2C2_SDA			FPIOAFunction	= 131	// I2C2 Serial Data
	FUNC_CMOS_XCLK			FPIOAFunction	= 132	// DVP System Clock
	FUNC_CMOS_RST			FPIOAFunction	= 133	// DVP System Reset
	FUNC_CMOS_PWDN			FPIOAFunction	= 134	// DVP Power Down Mode
	FUNC_CMOS_VSYNC			FPIOAFunction	= 135	// DVP Vertical Sync
	FUNC_CMOS_HREF			FPIOAFunction	= 136	// DVP Horizontal Reference output
	FUNC_CMOS_PCLK			FPIOAFunction	= 137	// Pixel Clock
	FUNC_CMOS_D0			FPIOAFunction	= 138	// Data Bit 0
	FUNC_CMOS_D1			FPIOAFunction	= 139	// Data Bit 1
	FUNC_CMOS_D2			FPIOAFunction	= 140	// Data Bit 2
	FUNC_CMOS_D3			FPIOAFunction	= 141	// Data Bit 3
	FUNC_CMOS_D4			FPIOAFunction	= 142	// Data Bit 4
	FUNC_CMOS_D5			FPIOAFunction	= 143	// Data Bit 5
	FUNC_CMOS_D6			FPIOAFunction	= 144	// Data Bit 6
	FUNC_CMOS_D7			FPIOAFunction	= 145	// Data Bit 7
	FUNC_SCCB_SCLK			FPIOAFunction	= 146	// SCCB Serial Clock
	FUNC_SCCB_SDA			FPIOAFunction	= 147	// SCCB Serial Data
	FUNC_UART1_CTS			FPIOAFunction	= 148	// UART1 Clear To Send
	FUNC_UART1_DSR			FPIOAFunction	= 149	// UART1 Data Set Ready
	FUNC_UART1_DCD			FPIOAFunction	= 150	// UART1 Data Carrier Detect
	FUNC_UART1_RI			FPIOAFunction	= 151	// UART1 Ring Indicator
	FUNC_UART1_SIR_IN		FPIOAFunction	= 152	// UART1 Serial Infrared Input
	FUNC_UART1_DTR			FPIOAFunction	= 153	// UART1 Data Terminal Ready
	FUNC_UART1_RTS			FPIOAFunction	= 154	// UART1 Request To Send
	FUNC_UART1_OUT2			FPIOAFunction	= 155	// UART1 User-designated Output 2
	FUNC_UART1_OUT1			FPIOAFunction	= 156	// UART1 User-designated Output 1
	FUNC_UART1_SIR_OUT		FPIOAFunction	= 157	// UART1 Serial Infrared Output
	FUNC_UART1_BAUD			FPIOAFunction	= 158	// UART1 Transmit Clock Output
	FUNC_UART1_RE			FPIOAFunction	= 159	// UART1 Receiver Output Enable
	FUNC_UART1_DE			FPIOAFunction	= 160	// UART1 Driver Output Enable
	FUNC_UART1_RS485_EN		FPIOAFunction	= 161	// UART1 RS485 Enable
	FUNC_UART2_CTS			FPIOAFunction	= 162	// UART2 Clear To Send
	FUNC_UART2_DSR			FPIOAFunction	= 163	// UART2 Data Set Ready
	FUNC_UART2_DCD			FPIOAFunction	= 164	// UART2 Data Carrier Detect
	FUNC_UART2_RI			FPIOAFunction	= 165	// UART2 Ring Indicator
	FUNC_UART2_SIR_IN		FPIOAFunction	= 166	// UART2 Serial Infrared Input
	FUNC_UART2_DTR			FPIOAFunction	= 167	// UART2 Data Terminal Ready
	FUNC_UART2_RTS			FPIOAFunction	= 168	// UART2 Request To Send
	FUNC_UART2_OUT2			FPIOAFunction	= 169	// UART2 User-designated Output 2
	FUNC_UART2_OUT1			FPIOAFunction	= 170	// UART2 User-designated Output 1
	FUNC_UART2_SIR_OUT		FPIOAFunction	= 171	// UART2 Serial Infrared Output
	FUNC_UART2_BAUD			FPIOAFunction	= 172	// UART2 Transmit Clock Output
	FUNC_UART2_RE			FPIOAFunction	= 173	// UART2 Receiver Output Enable
	FUNC_UART2_DE			FPIOAFunction	= 174	// UART2 Driver Output Enable
	FUNC_UART2_RS485_EN		FPIOAFunction	= 175	// UART2 RS485 Enable
	FUNC_UART3_CTS			FPIOAFunction	= 176	// UART3 Clear To Send
	FUNC_UART3_DSR			FPIOAFunction	= 177	// UART3 Data Set Ready
	FUNC_UART3_DCD			FPIOAFunction	= 178	// UART3 Data Carrier Detect
	FUNC_UART3_RI			FPIOAFunction	= 179	// UART3 Ring Indicator
	FUNC_UART3_SIR_IN		FPIOAFunction	= 180	// UART3 Serial Infrared Input
	FUNC_UART3_DTR			FPIOAFunction	= 181	// UART3 Data Terminal Ready
	FUNC_UART3_RTS			FPIOAFunction	= 182	// UART3 Request To Send
	FUNC_UART3_OUT2			FPIOAFunction	= 183	// UART3 User-designated Output 2
	FUNC_UART3_OUT1			FPIOAFunction	= 184	// UART3 User-designated Output 1
	FUNC_UART3_SIR_OUT		FPIOAFunction	= 185	// UART3 Serial Infrared Output
	FUNC_UART3_BAUD			FPIOAFunction	= 186	// UART3 Transmit Clock Output
	FUNC_UART3_RE			FPIOAFunction	= 187	// UART3 Receiver Output Enable
	FUNC_UART3_DE			FPIOAFunction	= 188	// UART3 Driver Output Enable
	FUNC_UART3_RS485_EN		FPIOAFunction	= 189	// UART3 RS485 Enable
	FUNC_TIMER0_TOGGLE1		FPIOAFunction	= 190	// TIMER0 Toggle Output 1
	FUNC_TIMER0_TOGGLE2		FPIOAFunction	= 191	// TIMER0 Toggle Output 2
	FUNC_TIMER0_TOGGLE3		FPIOAFunction	= 192	// TIMER0 Toggle Output 3
	FUNC_TIMER0_TOGGLE4		FPIOAFunction	= 193	// TIMER0 Toggle Output 4
	FUNC_TIMER1_TOGGLE1		FPIOAFunction	= 194	// TIMER1 Toggle Output 1
	FUNC_TIMER1_TOGGLE2		FPIOAFunction	= 195	// TIMER1 Toggle Output 2
	FUNC_TIMER1_TOGGLE3		FPIOAFunction	= 196	// TIMER1 Toggle Output 3
	FUNC_TIMER1_TOGGLE4		FPIOAFunction	= 197	// TIMER1 Toggle Output 4
	FUNC_TIMER2_TOGGLE1		FPIOAFunction	= 198	// TIMER2 Toggle Output 1
	FUNC_TIMER2_TOGGLE2		FPIOAFunction	= 199	// TIMER2 Toggle Output 2
	FUNC_TIMER2_TOGGLE3		FPIOAFunction	= 200	// TIMER2 Toggle Output 3
	FUNC_TIMER2_TOGGLE4		FPIOAFunction	= 201	// TIMER2 Toggle Output 4
	FUNC_CLK_SPI2			FPIOAFunction	= 202	// Clock SPI2
	FUNC_CLK_I2C2			FPIOAFunction	= 203	// Clock I2C2
	FUNC_INTERNAL0			FPIOAFunction	= 204	// Internal function signal 0
	FUNC_INTERNAL1			FPIOAFunction	= 205	// Internal function signal 1
	FUNC_INTERNAL2			FPIOAFunction	= 206	// Internal function signal 2
	FUNC_INTERNAL3			FPIOAFunction	= 207	// Internal function signal 3
	FUNC_INTERNAL4			FPIOAFunction	= 208	// Internal function signal 4
	FUNC_INTERNAL5			FPIOAFunction	= 209	// Internal function signal 5
	FUNC_INTERNAL6			FPIOAFunction	= 210	// Internal function signal 6
	FUNC_INTERNAL7			FPIOAFunction	= 211	// Internal function signal 7
	FUNC_INTERNAL8			FPIOAFunction	= 212	// Internal function signal 8
	FUNC_INTERNAL9			FPIOAFunction	= 213	// Internal function signal 9
	FUNC_INTERNAL10			FPIOAFunction	= 214	// Internal function signal 10
	FUNC_INTERNAL11			FPIOAFunction	= 215	// Internal function signal 11
	FUNC_INTERNAL12			FPIOAFunction	= 216	// Internal function signal 12
	FUNC_INTERNAL13			FPIOAFunction	= 217	// Internal function signal 13
	FUNC_INTERNAL14			FPIOAFunction	= 218	// Internal function signal 14
	FUNC_INTERNAL15			FPIOAFunction	= 219	// Internal function signal 15
	FUNC_INTERNAL16			FPIOAFunction	= 220	// Internal function signal 16
	FUNC_INTERNAL17			FPIOAFunction	= 221	// Internal function signal 17
	FUNC_CONSTANT			FPIOAFunction	= 222	// Constant function
	FUNC_INTERNAL18			FPIOAFunction	= 223	// Internal function signal 18
	FUNC_DEBUG0			FPIOAFunction	= 224	// Debug function 0
	FUNC_DEBUG1			FPIOAFunction	= 225	// Debug function 1
	FUNC_DEBUG2			FPIOAFunction	= 226	// Debug function 2
	FUNC_DEBUG3			FPIOAFunction	= 227	// Debug function 3
	FUNC_DEBUG4			FPIOAFunction	= 228	// Debug function 4
	FUNC_DEBUG5			FPIOAFunction	= 229	// Debug function 5
	FUNC_DEBUG6			FPIOAFunction	= 230	// Debug function 6
	FUNC_DEBUG7			FPIOAFunction	= 231	// Debug function 7
	FUNC_DEBUG8			FPIOAFunction	= 232	// Debug function 8
	FUNC_DEBUG9			FPIOAFunction	= 233	// Debug function 9
	FUNC_DEBUG10			FPIOAFunction	= 234	// Debug function 10
	FUNC_DEBUG11			FPIOAFunction	= 235	// Debug function 11
	FUNC_DEBUG12			FPIOAFunction	= 236	// Debug function 12
	FUNC_DEBUG13			FPIOAFunction	= 237	// Debug function 13
	FUNC_DEBUG14			FPIOAFunction	= 238	// Debug function 14
	FUNC_DEBUG15			FPIOAFunction	= 239	// Debug function 15
	FUNC_DEBUG16			FPIOAFunction	= 240	// Debug function 16
	FUNC_DEBUG17			FPIOAFunction	= 241	// Debug function 17
	FUNC_DEBUG18			FPIOAFunction	= 242	// Debug function 18
	FUNC_DEBUG19			FPIOAFunction	= 243	// Debug function 19
	FUNC_DEBUG20			FPIOAFunction	= 244	// Debug function 20
	FUNC_DEBUG21			FPIOAFunction	= 245	// Debug function 21
	FUNC_DEBUG22			FPIOAFunction	= 246	// Debug function 22
	FUNC_DEBUG23			FPIOAFunction	= 247	// Debug function 23
	FUNC_DEBUG24			FPIOAFunction	= 248	// Debug function 24
	FUNC_DEBUG25			FPIOAFunction	= 249	// Debug function 25
	FUNC_DEBUG26			FPIOAFunction	= 250	// Debug function 26
	FUNC_DEBUG27			FPIOAFunction	= 251	// Debug function 27
	FUNC_DEBUG28			FPIOAFunction	= 252	// Debug function 28
	FUNC_DEBUG29			FPIOAFunction	= 253	// Debug function 29
	FUNC_DEBUG30			FPIOAFunction	= 254	// Debug function 30
	FUNC_DEBUG31			FPIOAFunction	= 255	// Debug function 31
)

Every pin on the Kendryte K210 is assigned to an FPIOA function. Each pin can be configured with every function below.

const (
	D0	= P00	// JTAG_TCLK
	D1	= P01	// JTAG_TDI
	D2	= P02	// JTAG_TMS
	D3	= P03	// JTAG_TDO
	D4	= P04	// UARTHS_RX
	D5	= P05	// UARTHS_TX
	D6	= P06	// RESV0
	D7	= P07	// RESV0
	D8	= P08	// GPIO1
	D9	= P09	// GPIO2
	D10	= P10	// GPIO3
	D11	= P11	// GPIO4
	D12	= P12	// GPIO5
	D13	= P13	// GPIO6
	D14	= P14	// GPIO7
	D15	= P15	// GPIO8
	D16	= P16	// GPIOHS0
	D17	= P17	// GPIOHS1
	D18	= P18	// GPIOHS2
	D19	= P19	// GPIOHS3
	D20	= P20	// GPIOHS4
	D21	= P21	// GPIOHS5
	D22	= P22	// GPIOHS6
	D23	= P23	// GPIOHS7
	D24	= P24	// GPIOHS8
	D25	= P25	// GPIOHS9
	D26	= P26	// GPIOHS10 / SPI0_SDI
	D27	= P27	// GPIOHS11 / SPI0_SCLK
	D28	= P28	// GPIOHS12 / SPI0_SDO
	D29	= P29	// GPIOHS13
	D30	= P30	// GPIOHS14
	D31	= P31	// GPIOHS15
	D32	= P32	// GPIOHS16
	D33	= P33	// GPIOHS17
	D34	= P34	// GPIOHS18
	D35	= P35	// GPIOHS19
)

Pins on the MAix Bit.

const (
	LED		= LED1
	LED1		= LED_RED
	LED2		= LED_GREEN
	LED3		= LED_BLUE
	LED_RED		= D13
	LED_GREEN	= D12
	LED_BLUE	= D14
)
const (
	UART_TX_PIN	= D5
	UART_RX_PIN	= D4
)

Default pins for UARTHS.

const (
	SPI0_SCK_PIN	= D27
	SPI0_SDO_PIN	= D28
	SPI0_SDI_PIN	= D26
)

SPI pins.

const (
	I2C0_SDA_PIN	= D34
	I2C0_SCL_PIN	= D35
)

I2C pins.

const (
	TWI_FREQ_100KHZ	= 100000
	TWI_FREQ_400KHZ	= 400000
)

TWI_FREQ is the I2C bus speed. Normally either 100 kHz, or 400 kHz for high-speed bus.

Deprecated: use 100 * machine.KHz or 400 * machine.KHz instead.

const (
	// I2CReceive indicates target has received a message from the controller.
	I2CReceive	I2CTargetEvent	= iota

	// I2CRequest indicates the controller is expecting a message from the target.
	I2CRequest

	// I2CFinish indicates the controller has ended the transaction.
	//
	// I2C controllers can chain multiple receive/request messages without
	// relinquishing the bus by doing 'restarts'.  I2CFinish indicates the
	// bus has been relinquished by an I2C 'stop'.
	I2CFinish
)
const (
	// I2CModeController represents an I2C peripheral in controller mode.
	I2CModeController	I2CMode	= iota

	// I2CModeTarget represents an I2C peripheral in target mode.
	I2CModeTarget
)
const Device = deviceName

Device is the running program’s chip name, such as “ATSAMD51J19A” or “nrf52840”. It is not the same as the CPU name.

The constant is some hardcoded default value if the program does not target a particular chip but instead runs in WebAssembly for example.

const (
	KHz	= 1000
	MHz	= 1000_000
	GHz	= 1000_000_000
)

Generic constants.

const NoPin = Pin(0xff)

NoPin explicitly indicates “not a pin”. Use this pin if you want to leave one of the pins in a peripheral unconfigured (if supported by the hardware).

const (
	PinInput	PinMode	= iota
	PinInputPullup
	PinInputPulldown
	PinOutput
)

Pin modes.

const (
	PinInputPullUp		= PinInputPullup
	PinInputPullDown	= PinInputPulldown
)

Deprecated: use PinInputPullup and PinInputPulldown instead.

const (
	PinRising	PinChange	= 1 << iota
	PinFalling
	PinToggle	= PinRising | PinFalling
)

GPIOHS pin interrupt events.

const (
	Mode0	= 0
	Mode1	= 1
	Mode2	= 2
	Mode3	= 3
)

SPI phase and polarity configs CPOL and CPHA

const (
	// ParityNone means to not use any parity checking. This is
	// the most common setting.
	ParityNone	UARTParity	= iota

	// ParityEven means to expect that the total number of 1 bits sent
	// should be an even number.
	ParityEven

	// ParityOdd means to expect that the total number of 1 bits sent
	// should be an odd number.
	ParityOdd
)

Variables

var DefaultUART = UART0
var (
	SPI0	= SPI{
		Bus: kendryte.SPI0,
	}
	SPI1	= SPI{
		Bus: kendryte.SPI1,
	}
)

SPI on the MAix Bit.

var (
	ErrTimeoutRNG		= errors.New("machine: RNG Timeout")
	ErrClockRNG		= errors.New("machine: RNG Clock Error")
	ErrSeedRNG		= errors.New("machine: RNG Seed Error")
	ErrInvalidInputPin	= errors.New("machine: invalid input pin")
	ErrInvalidOutputPin	= errors.New("machine: invalid output pin")
	ErrInvalidClockPin	= errors.New("machine: invalid clock pin")
	ErrInvalidDataPin	= errors.New("machine: invalid data pin")
	ErrNoPinChangeChannel	= errors.New("machine: no channel available for pin interrupt")
)
var (
	UART0	= &_UART0
	_UART0	= UART{Bus: kendryte.UARTHS, Buffer: NewRingBuffer()}
)
var (
	I2C0	= (*I2C)(unsafe.Pointer(kendryte.I2C0))
	I2C1	= (*I2C)(unsafe.Pointer(kendryte.I2C1))
	I2C2	= (*I2C)(unsafe.Pointer(kendryte.I2C2))
)
var (
	ErrPWMPeriodTooLong = errors.New("pwm: period too long")
)
var Serial = DefaultUART

Serial is implemented via the default (usually the first) UART on the chip.

var (
	ErrTxInvalidSliceSize		= errors.New("SPI write and read slices must be same size")
	errSPIInvalidMachineConfig	= errors.New("SPI port was not configured properly by the machine")
)

func CPUFrequency

func CPUFrequency() uint32

func InitSerial

func InitSerial()

func NewRingBuffer

func NewRingBuffer() *RingBuffer

NewRingBuffer returns a new ring buffer.

type ADC

type ADC struct {
	Pin Pin
}

type ADCConfig

type ADCConfig struct {
	Reference	uint32	// analog reference voltage (AREF) in millivolts
	Resolution	uint32	// number of bits for a single conversion (e.g., 8, 10, 12)
	Samples		uint32	// number of samples for a single conversion (e.g., 4, 8, 16, 32)
	SampleTime	uint32	// sample time, in microseconds (µs)
}

ADCConfig holds ADC configuration parameters. If left unspecified, the zero value of each parameter will use the peripheral’s default settings.

type FPIOAFunction

type FPIOAFunction uint8

type I2C

type I2C struct {
	Bus kendryte.I2C_Type
}

I2C on the K210.

func (*I2C) Configure

func (i2c *I2C) Configure(config I2CConfig) error

Configure is intended to setup the I2C interface.

func (*I2C) ReadRegister

func (i2c *I2C) ReadRegister(address uint8, register uint8, data []byte) error

ReadRegister transmits the register, restarts the connection as a read operation, and reads the response.

Many I2C-compatible devices are organized in terms of registers. This method is a shortcut to easily read such registers. Also, it only works for devices with 7-bit addresses, which is the vast majority.

func (*I2C) SetBaudRate

func (i2c *I2C) SetBaudRate(br uint32) error

SetBaudRate sets the communication speed for I2C.

func (*I2C) Tx

func (i2c *I2C) Tx(addr uint16, w, r []byte) error

Tx does a single I2C transaction at the specified address. It clocks out the given address, writes the bytes in w, reads back len(r) bytes and stores them in r, and generates a stop condition on the bus.

func (*I2C) WriteRegister

func (i2c *I2C) WriteRegister(address uint8, register uint8, data []byte) error

WriteRegister transmits first the register and then the data to the peripheral device.

Many I2C-compatible devices are organized in terms of registers. This method is a shortcut to easily write to such registers. Also, it only works for devices with 7-bit addresses, which is the vast majority.

type I2CConfig

type I2CConfig struct {
	Frequency	uint32
	SCL		Pin
	SDA		Pin
}

I2CConfig is used to store config info for I2C.

type I2CMode

type I2CMode int

I2CMode determines if an I2C peripheral is in Controller or Target mode.

type I2CTargetEvent

type I2CTargetEvent uint8

I2CTargetEvent reflects events on the I2C bus

type NullSerial

type NullSerial struct {
}

NullSerial is a serial version of /dev/null (or null router): it drops everything that is written to it.

func (NullSerial) Buffered

func (ns NullSerial) Buffered() int

Buffered returns how many bytes are buffered in the UART. It always returns 0 as there are no bytes to read.

func (NullSerial) Configure

func (ns NullSerial) Configure(config UARTConfig) error

Configure does nothing: the null serial has no configuration.

func (NullSerial) ReadByte

func (ns NullSerial) ReadByte() (byte, error)

ReadByte always returns an error because there aren’t any bytes to read.

func (NullSerial) Write

func (ns NullSerial) Write(p []byte) (n int, err error)

Write is a no-op: none of the data is being written and it will not return an error.

func (NullSerial) WriteByte

func (ns NullSerial) WriteByte(b byte) error

WriteByte is a no-op: the null serial doesn’t write bytes.

type PDMConfig

type PDMConfig struct {
	Stereo	bool
	DIN	Pin
	CLK	Pin
}

type PWMConfig

type PWMConfig struct {
	// PWM period in nanosecond. Leaving this zero will pick a reasonable period
	// value for use with LEDs.
	// If you want to configure a frequency instead of a period, you can use the
	// following formula to calculate a period from a frequency:
	//
	//     period = 1e9 / frequency
	//
	Period uint64
}

PWMConfig allows setting some configuration while configuring a PWM peripheral. A zero PWMConfig is ready to use for simple applications such as dimming LEDs.

type Pin

type Pin uint8

Pin is a single pin on a chip, which may be connected to other hardware devices. It can either be used directly as GPIO pin or it can be used in other peripherals like ADC, I2C, etc.

func (Pin) Configure

func (p Pin) Configure(config PinConfig)

Configure this pin with the given configuration. The pin must already be set as GPIO or GPIOHS pin.

func (Pin) FPIOAFunction

func (p Pin) FPIOAFunction() FPIOAFunction

FPIOAFunction returns the current FPIOA function of the pin.

func (Pin) Get

func (p Pin) Get() bool

Get returns the current value of a GPIO pin.

func (Pin) High

func (p Pin) High()

High sets this GPIO pin to high, assuming it has been configured as an output pin. It is hardware dependent (and often undefined) what happens if you set a pin to high that is not configured as an output pin.

func (Pin) Low

func (p Pin) Low()

Low sets this GPIO pin to low, assuming it has been configured as an output pin. It is hardware dependent (and often undefined) what happens if you set a pin to low that is not configured as an output pin.

func (Pin) Set

func (p Pin) Set(high bool)

Set the pin to high or low.

func (Pin) SetFPIOAFunction

func (p Pin) SetFPIOAFunction(f FPIOAFunction)

SetFPIOAFunction is used to configure the pin for one of the FPIOA functions. Each pin on the Kendryte K210 can be configured with any of the available FPIOA functions.

func (Pin) SetInterrupt

func (p Pin) SetInterrupt(change PinChange, callback func(Pin)) error

SetInterrupt sets an interrupt to be executed when a particular pin changes state. The pin should already be configured as an input, including a pull up or down if no external pull is provided.

You can pass a nil func to unset the pin change interrupt. If you do so, the change parameter is ignored and can be set to any value (such as 0). If the pin is already configured with a callback, you must first unset this pins interrupt before you can set a new callback.

type PinChange

type PinChange uint8

type PinConfig

type PinConfig struct {
	Mode PinMode
}

type PinMode

type PinMode uint8

PinMode sets the direction and pull mode of the pin. For example, PinOutput sets the pin as an output and PinInputPullup sets the pin as an input with a pull-up.

type RingBuffer

type RingBuffer struct {
	rxbuffer	[bufferSize]volatile.Register8
	head		volatile.Register8
	tail		volatile.Register8
}

RingBuffer is ring buffer implementation inspired by post at https://www.embeddedrelated.com/showthread/comp.arch.embedded/77084-1.php

func (*RingBuffer) Clear

func (rb *RingBuffer) Clear()

Clear resets the head and tail pointer to zero.

func (*RingBuffer) Get

func (rb *RingBuffer) Get() (byte, bool)

Get returns a byte from the buffer. If the buffer is empty, the method will return a false as the second value.

func (*RingBuffer) Put

func (rb *RingBuffer) Put(val byte) bool

Put stores a byte in the buffer. If the buffer is already full, the method will return false.

func (*RingBuffer) Used

func (rb *RingBuffer) Used() uint8

Used returns how many bytes in buffer have been used.

type SPI

type SPI struct {
	Bus *kendryte.SPI_Type
}

func (SPI) Configure

func (spi SPI) Configure(config SPIConfig) error

Configure is intended to setup the SPI interface. Only SPI controller 0 and 1 can be used because SPI2 is a special peripheral-mode controller and SPI3 is used for flashing.

func (SPI) Transfer

func (spi SPI) Transfer(w byte) (byte, error)

Transfer writes/reads a single byte using the SPI interface.

func (SPI) Tx

func (spi SPI) Tx(w, r []byte) error

Tx handles read/write operation for SPI interface. Since SPI is a syncronous write/read interface, there must always be the same number of bytes written as bytes read. The Tx method knows about this, and offers a few different ways of calling it.

This form sends the bytes in tx buffer, putting the resulting bytes read into the rx buffer. Note that the tx and rx buffers must be the same size:

spi.Tx(tx, rx)

This form sends the tx buffer, ignoring the result. Useful for sending “commands” that return zeros until all the bytes in the command packet have been received:

spi.Tx(tx, nil)

This form sends zeros, putting the result into the rx buffer. Good for reading a “result packet”:

spi.Tx(nil, rx)

type SPIConfig

type SPIConfig struct {
	Frequency	uint32
	SCK		Pin
	SDO		Pin
	SDI		Pin
	LSBFirst	bool
	Mode		uint8
}

SPIConfig is used to store config info for SPI.

type UART

type UART struct {
	Bus	*kendryte.UARTHS_Type
	Buffer	*RingBuffer
}

func (*UART) Buffered

func (uart *UART) Buffered() int

Buffered returns the number of bytes currently stored in the RX buffer.

func (*UART) Configure

func (uart *UART) Configure(config UARTConfig)

func (*UART) Read

func (uart *UART) Read(data []byte) (n int, err error)

Read from the RX buffer.

func (*UART) ReadByte

func (uart *UART) ReadByte() (byte, error)

ReadByte reads a single byte from the RX buffer. If there is no data in the buffer, returns an error.

func (*UART) Receive

func (uart *UART) Receive(data byte)

Receive handles adding data to the UART’s data buffer. Usually called by the IRQ handler for a machine.

func (*UART) Write

func (uart *UART) Write(data []byte) (n int, err error)

Write data over the UART’s Tx. This function blocks until the data is finished being sent.

func (*UART) WriteByte

func (uart *UART) WriteByte(c byte) error

WriteByte writes a byte of data over the UART’s Tx. This function blocks until the data is finished being sent.

type UARTConfig

type UARTConfig struct {
	BaudRate	uint32
	TX		Pin
	RX		Pin
	RTS		Pin
	CTS		Pin
}

UARTConfig is a struct with which a UART (or similar object) can be configured. The baud rate is usually respected, but TX and RX may be ignored depending on the chip and the type of object.

type UARTParity

type UARTParity uint8

UARTParity is the parity setting to be used for UART communication.

Last modified April 17, 2024: Fix doc-gen and update docs (8a74a2b)