Skip to content

Commit e7e1d8a

Browse files
authored
Merge pull request sipeed#13 from LynnL4/master
add support for seeedstudio Wio Lite Risc-V.
2 parents 3246565 + 9f35295 commit e7e1d8a

File tree

3 files changed

+317
-0
lines changed

3 files changed

+317
-0
lines changed

boards.txt

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,3 +83,44 @@ eval.upload.tool=gdlink
8383
eval.upload.maximum_size=65536
8484
eval.build.ldscript={runtime.platform.path}/cores/arduino/GD32VF103_Firmware_Library/RISCV/env_Eclipse/GD32VF103xB.lds
8585

86+
###################################################
87+
############# Seeed Wio Lite Risc-V ###############
88+
89+
wio_lite-risc-v.name=Wio Lite Risc-V
90+
91+
## VID PID
92+
wio_lite-risc-v.build.vid=28e9
93+
wio_lite-risc-v.build.pid=0189
94+
95+
## Toolchain
96+
wio_lite-risc-v.menu.toolsloc.default=Default
97+
wio_lite-risc-v.menu.toolsloc.default.compiler.path={runtime.tools.riscv-nuclei-elf-gcc.path}/bin/
98+
99+
## CPU Clock
100+
wio_lite-risc-v.menu.clksrc.108=108MHz CPU Clock Frequency
101+
wio_lite-risc-v.menu.clksrc.108.build.f_cpu=108000000L
102+
103+
## Burn baud rate
104+
wio_lite-risc-v.menu.burn_baudrate.115200=115200 bps
105+
wio_lite-risc-v.menu.burn_baudrate.115200.build.burn_baudrate=115200
106+
107+
## HXTAL freq value
108+
wio_lite-risc-v.build.hxtal_value=8000000UL
109+
110+
## Point to the file for ./variants/<variant>/pins_arduino.h
111+
wio_lite-risc-v.build.variant=wio_lite_risc-v
112+
113+
## "The 'core' file directory for this board, in ./cores
114+
wio_lite-risc-v.build.core=arduino
115+
116+
## This sets a define for use in the compiled code.
117+
wio_lite-risc-v.build.board=BOARD_WIO_LITE_RISC-V
118+
wio_lite-risc-v.build.sdata.size=512
119+
120+
## This selects the tool from "programmers.txt"
121+
wio_lite-risc-v.program.tool=serial
122+
wio_lite-risc-v.upload.tool=serial
123+
124+
wio_lite-risc-v.upload.maximum_size=65536
125+
wio_lite-risc-v.build.ldscript={runtime.platform.path}/cores/arduino/GD32VF103_Firmware_Library/RISCV/env_Eclipse/GD32VF103xB.lds
126+
Lines changed: 192 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,192 @@
1+
#include "pins_arduino.h"
2+
3+
#include "gd32vf103_libopt.h"
4+
5+
6+
7+
gpio_dev_t gpioa = {
8+
.gpio_port = GPIOA,
9+
.clk_id = RCU_GPIOA,
10+
};
11+
12+
gpio_dev_t * const GPIO_A = &gpioa;
13+
14+
gpio_dev_t gpiob = {
15+
.gpio_port = GPIOB,
16+
.clk_id = RCU_GPIOB,
17+
};
18+
19+
gpio_dev_t * const GPIO_B = &gpiob;
20+
21+
gpio_dev_t gpioc = {
22+
.gpio_port = GPIOC,
23+
.clk_id = RCU_GPIOC,
24+
};
25+
26+
gpio_dev_t * const GPIO_C = &gpioc;
27+
28+
gpio_dev_t gpiod = {
29+
.gpio_port = GPIOD,
30+
.clk_id = RCU_GPIOD,
31+
};
32+
33+
gpio_dev_t * const GPIO_D = &gpiod;
34+
35+
gpio_dev_t gpioe = {
36+
.gpio_port = GPIOE,
37+
.clk_id = RCU_GPIOE,
38+
};
39+
gpio_dev_t * const GPIO_E = &gpioe;
40+
41+
adc_dev_t adc0 = {
42+
.adc_dev = ADC0,
43+
.clk_id = RCU_ADC0,
44+
};
45+
adc_dev_t * const ADC_0 = &adc0;
46+
47+
// TODO: add timer remap descriptor
48+
49+
timer_dev_t timer0 = {
50+
.timer_dev = TIMER0,
51+
.clk_id = RCU_TIMER0,
52+
};
53+
timer_dev_t * const TIMER_0 = &timer0;
54+
55+
timer_dev_t timer1 = {
56+
.timer_dev = TIMER1,
57+
.clk_id = RCU_TIMER1,
58+
};
59+
timer_dev_t * const TIMER_1 = &timer1;
60+
61+
timer_dev_t timer2 = {
62+
.timer_dev = TIMER2,
63+
.clk_id = RCU_TIMER2,
64+
};
65+
timer_dev_t * const TIMER_2 = &timer2;
66+
67+
timer_dev_t timer3 = {
68+
.timer_dev = TIMER3,
69+
.clk_id = RCU_TIMER3,
70+
};
71+
timer_dev_t * const TIMER_3 = &timer3;
72+
73+
timer_dev_t timer4 = {
74+
.timer_dev = TIMER4,
75+
.clk_id = RCU_TIMER4,
76+
};
77+
timer_dev_t * const TIMER_4 = &timer4;
78+
79+
spi_dev_t spi0 = {
80+
.spi_dev = SPI0,
81+
.clk_id = RCU_SPI0,
82+
};
83+
spi_dev_t * const SPI_0 = &spi0;
84+
85+
spi_dev_t spi1 = {
86+
.spi_dev = SPI1,
87+
.clk_id = RCU_SPI1,
88+
};
89+
spi_dev_t * const SPI_1 = &spi1;
90+
91+
spi_dev_t spi2 = {
92+
.spi_dev = SPI2,
93+
.clk_id = RCU_SPI2,
94+
};
95+
spi_dev_t * const SPI_2 = &spi2;
96+
97+
const gd32v_pin_info_t PIN_MAP[VARIANT_GPIO_NUM] = {
98+
/*
99+
gpio_dev *gpio_device; GPIO device
100+
timer_dev *timer_device; Pin's timer device, if any.
101+
const adc_dev *adc_device; ADC device, if any.
102+
uint8 gpio_bit; Pin's GPIO port bit.
103+
uint8 timer_channel; Timer channel, or 0 if none.
104+
uint8 adc_channel; Pin ADC channel, or ADCx if none.
105+
*/
106+
{&gpioa, &timer1, &adc0, 0, 0, 0, 0, EXTI0_IRQn}, /* PA0 */
107+
{&gpioa, &timer1, &adc0, 0, 1, 1, 1, EXTI1_IRQn}, /* PA1 */
108+
{&gpioa, &timer1, &adc0, 0, 2, 2, 2, EXTI2_IRQn}, /* PA2 */
109+
{&gpioa, &timer1, &adc0, 0, 3, 3, 3, EXTI3_IRQn}, /* PA3 */
110+
{&gpioa, 0, &adc0, &spi0, 4, 0, 4, EXTI4_IRQn}, /* PA4 */
111+
{&gpioa, 0, &adc0, &spi0, 5, 0, 5, EXTI5_9_IRQn}, /* PA5 */
112+
{&gpioa, &timer2, &adc0, &spi0, 6, 0, 6, EXTI5_9_IRQn}, /* PA6 */
113+
{&gpioa, &timer2, &adc0, &spi0, 7, 1, 7, EXTI5_9_IRQn}, /* PA7 */
114+
{&gpioa, &timer0, 0, 0, 8, 0, 0, EXTI5_9_IRQn}, /* PA8 */
115+
{&gpioa, &timer0, 0, 0, 9, 1, 0, EXTI5_9_IRQn}, /* PA9 */
116+
{&gpioa, &timer0, 0, 0, 10, 2, 0, EXTI10_15_IRQn}, /* PA10 */
117+
{&gpioa, &timer0, 0, 0, 11, 3, 0, EXTI10_15_IRQn}, /* PA11 */
118+
{&gpioa, 0, 0, 0, 12, 0, 0, EXTI10_15_IRQn}, /* PA12 */
119+
{&gpioa, 0, 0, 0, 13, 0, 0, EXTI10_15_IRQn}, /* PA13 */
120+
{&gpioa, 0, 0, 0, 14, 0, 0, EXTI10_15_IRQn}, /* PA14 */
121+
{&gpioa, 0, 0, &spi2, 15, 0, 0, EXTI10_15_IRQn}, /* PA15 */
122+
123+
{&gpiob, &timer2, &adc0, 0, 0, 2, 8, EXTI0_IRQn}, /* PB0 */
124+
{&gpiob, &timer2, &adc0, 0, 1, 3, 9, EXTI1_IRQn}, /* PB1 */
125+
{&gpiob, 0, 0, 0, 2, 0, 0, EXTI2_IRQn}, /* PB2 */
126+
{&gpiob, 0, 0, &spi2, 3, 0, 0, EXTI3_IRQn}, /* PB3 */
127+
{&gpiob, 0, 0, &spi2, 4, 0, 0, EXTI4_IRQn}, /* PB4 */
128+
{&gpiob, 0, 0, &spi2, 5, 0, 0, EXTI5_9_IRQn}, /* PB5 */
129+
{&gpiob, &timer3, 0, 0, 6, 0, 0, EXTI5_9_IRQn}, /* PB6 */
130+
{&gpiob, &timer3, 0, 0, 7, 1, 0, EXTI5_9_IRQn}, /* PB7 */
131+
{&gpiob, &timer3, 0, 0, 8, 2, 0, EXTI5_9_IRQn}, /* PB8 */
132+
{&gpiob, &timer3, 0, 0, 9, 3, 0, EXTI5_9_IRQn}, /* PB9 */
133+
{&gpiob, 0, 0, 0, 10, 0, 0, EXTI10_15_IRQn}, /* PB10 */
134+
{&gpiob, 0, 0, 0, 11, 0, 0, EXTI10_15_IRQn}, /* PB11 */
135+
{&gpiob, 0, 0, &spi1, 12, 0, 0, EXTI10_15_IRQn}, /* PB12 */
136+
{&gpiob, 0, 0, &spi1, 13, 0, 0, EXTI10_15_IRQn}, /* PB13 */
137+
{&gpiob, 0, 0, &spi1, 14, 0, 0, EXTI10_15_IRQn}, /* PB14 */
138+
{&gpiob, 0, 0, &spi1, 15, 0, 0, EXTI10_15_IRQn}, /* PB15 */
139+
140+
{&gpioc, 0, &adc0, 0, 0, 0, 10, EXTI0_IRQn}, /* PC0 */
141+
{&gpioc, 0, &adc0, 0, 1, 0, 11, EXTI1_IRQn}, /* PC1 */
142+
{&gpioc, 0, &adc0, 0, 2, 0, 12, EXTI2_IRQn}, /* PC2 */
143+
{&gpioc, 0, &adc0, 0, 3, 0, 13, EXTI3_IRQn}, /* PC3 */
144+
{&gpioc, 0, &adc0, 0, 4, 0, 14, EXTI4_IRQn}, /* PC4 */
145+
{&gpioc, 0, &adc0, 0, 5, 0, 15, EXTI5_9_IRQn}, /* PC5 */
146+
{&gpioc, 0, 0, 0, 6, 0, 0, EXTI5_9_IRQn}, /* PC6 */
147+
{&gpioc, 0, 0, 0, 7, 0, 0, EXTI5_9_IRQn}, /* PC7 */
148+
{&gpioc, 0, 0, 0, 8, 0, 0, EXTI5_9_IRQn}, /* PC8 */
149+
{&gpioc, 0, 0, 0, 9, 0, 0, EXTI5_9_IRQn}, /* PC9 */
150+
{&gpioc, 0, 0, 0, 10, 0, 0, EXTI10_15_IRQn}, /* PC10 */
151+
{&gpioc, 0, 0, 0, 11, 0, 0, EXTI10_15_IRQn}, /* PC11 */
152+
{&gpioc, 0, 0, 0, 12, 0, 0, EXTI10_15_IRQn}, /* PC12 */
153+
{&gpioc, 0, 0, 0, 13, 0, 0, EXTI10_15_IRQn}, /* PC13 */
154+
{&gpioc, 0, 0, 0, 14, 0, 0, EXTI10_15_IRQn}, /* PC14 */
155+
{&gpioc, 0, 0, 0, 15, 0, 0, EXTI10_15_IRQn}, /* PC15 */
156+
157+
{&gpiod, 0, 0, 0, 0, 0, 0, EXTI0_IRQn}, /* PD0 */
158+
{&gpiod, 0, 0, 0, 1, 0, 0, EXTI1_IRQn}, /* PD1 */
159+
{&gpiod, 0, 0, 0, 2, 0, 0, EXTI2_IRQn}, /* PD2 */
160+
{&gpiod, 0, 0, 0, 3, 0, 0, EXTI3_IRQn}, /* PD3 */
161+
{&gpiod, 0, 0, 0, 4, 0, 0, EXTI4_IRQn}, /* PD4 */
162+
{&gpiod, 0, 0, 0, 5, 0, 0, EXTI5_9_IRQn}, /* PD5 */
163+
{&gpiod, 0, 0, 0, 6, 0, 0, EXTI5_9_IRQn}, /* PD6 */
164+
{&gpiod, 0, 0, 0, 7, 0, 0, EXTI5_9_IRQn}, /* PD7 */
165+
{&gpiod, 0, 0, 0, 8, 0, 0, EXTI5_9_IRQn}, /* PD8 */
166+
{&gpiod, 0, 0, 0, 9, 0, 0, EXTI5_9_IRQn}, /* PD9 */
167+
{&gpiod, 0, 0, 0, 10, 0, 0, EXTI10_15_IRQn}, /* PD10 */
168+
{&gpiod, 0, 0, 0, 11, 0, 0, EXTI10_15_IRQn}, /* PD11 */
169+
{&gpiod, 0, 0, 0, 12, 0, 0, EXTI10_15_IRQn}, /* PD12 */
170+
{&gpiod, 0, 0, 0, 13, 0, 0, EXTI10_15_IRQn}, /* PD13 */
171+
{&gpiod, 0, 0, 0, 14, 0, 0, EXTI10_15_IRQn}, /* PD14 */
172+
{&gpiod, 0, 0, 0, 15, 0, 0, EXTI10_15_IRQn}, /* PD15 */
173+
174+
{&gpioe, 0, 0, 0, 0, 0, 0, EXTI0_IRQn}, /* PE0 */
175+
{&gpioe, 0, 0, 0, 1, 0, 0, EXTI1_IRQn}, /* PE1 */
176+
{&gpioe, 0, 0, 0, 2, 0, 0, EXTI2_IRQn}, /* PE2 */
177+
{&gpioe, 0, 0, 0, 3, 0, 0, EXTI3_IRQn}, /* PE3 */
178+
{&gpioe, 0, 0, 0, 4, 0, 0, EXTI4_IRQn}, /* PE4 */
179+
{&gpioe, 0, 0, 0, 5, 0, 0, EXTI5_9_IRQn}, /* PE5 */
180+
{&gpioe, 0, 0, 0, 6, 0, 0, EXTI5_9_IRQn}, /* PE6 */
181+
{&gpioe, 0, 0, 0, 7, 0, 0, EXTI5_9_IRQn}, /* PE7 */
182+
{&gpioe, 0, 0, 0, 8, 0, 0, EXTI5_9_IRQn}, /* PE8 */
183+
{&gpioe, 0, 0, 0, 9, 0, 0, EXTI5_9_IRQn}, /* PE9 */
184+
{&gpioe, 0, 0, 0, 10, 0, 0, EXTI10_15_IRQn}, /* PE10 */
185+
{&gpioe, 0, 0, 0, 11, 0, 0, EXTI10_15_IRQn}, /* PE11 */
186+
{&gpioe, 0, 0, 0, 12, 0, 0, EXTI10_15_IRQn}, /* PE12 */
187+
{&gpioe, 0, 0, 0, 13, 0, 0, EXTI10_15_IRQn}, /* PE13 */
188+
{&gpioe, 0, 0, 0, 14, 0, 0, EXTI10_15_IRQn}, /* PE14 */
189+
{&gpioe, 0, 0, 0, 15, 0, 0, EXTI10_15_IRQn}, /* PE15 */
190+
};
191+
192+
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
#ifndef _VARIANT_SIPEED_LONGAN_NANO
2+
#define _VARIANT_SIPEED_LONGAN_NANO
3+
4+
#include "Arduino.h"
5+
#include "gd32vf103.h"
6+
#include "gd32vf103_libopt.h"
7+
8+
/* BOARD PIN DEFINE */
9+
10+
/* LEDs */
11+
#define LED_BUILTIN PA8
12+
13+
14+
#ifdef __cplusplus
15+
extern "C" {
16+
#endif
17+
18+
/* Pin aliases: these give the GPIO port/bit for each pin as an
19+
* enum. These are optional, but recommended. They make it easier to
20+
* write code using low-level GPIO functionality. */
21+
enum {
22+
PA0,PA1,PA2,PA3,PA4,PA5,PA6,PA7,PA8,PA9,PA10,PA11,PA12,PA13,PA14,PA15,
23+
PB0,PB1,PB2,PB3,PB4,PB5,PB6,PB7,PB8,PB9,PB10,PB11,PB12,PB13,PB14,PB15,
24+
PC0,PC1,PC2,PC3,PC4,PC5,PC6,PC7,PC8,PC9,PC10,PC11,PC12,PC13,PC14,PC15,
25+
PD0,PD1,PD2,PD3,PD4,PD5,PD6,PD7,PD8,PD9,PD10,PD11,PD12,PD13,PD14,PD15,
26+
PE0,PE1,PE2,PE3,PE4,PE5,PE6,PE7,PE8,PE9,PE10,PE11,PE12,PE13,PE14,PE15,
27+
};
28+
29+
typedef struct _gpio_dev_t
30+
{
31+
uint32_t gpio_port;
32+
rcu_periph_enum clk_id;
33+
34+
}gpio_dev_t;
35+
36+
typedef struct _adc_dev_t
37+
{
38+
uint32_t adc_dev;
39+
rcu_periph_enum clk_id;
40+
41+
}adc_dev_t;
42+
43+
typedef struct _timer_dev_t {
44+
uint32_t timer_dev;
45+
rcu_periph_enum clk_id;
46+
}timer_dev_t;
47+
48+
typedef struct _spi_dev_t {
49+
uint32_t spi_dev;
50+
rcu_periph_enum clk_id;
51+
}spi_dev_t;
52+
53+
typedef struct _gd32v_pin_info_t
54+
{
55+
gpio_dev_t * gpio_device;
56+
timer_dev_t * timer_device;
57+
adc_dev_t * adc_device;
58+
spi_dev_t * spi_device;
59+
uint8_t gpio_bit;
60+
uint8_t timer_channel;
61+
uint8_t adc_channel;
62+
IRQn_Type irqn;
63+
} gd32v_pin_info_t;
64+
65+
#define VARIANT_GPIO_NUM (80)
66+
67+
extern const gd32v_pin_info_t PIN_MAP[VARIANT_GPIO_NUM];
68+
69+
#define digitalPinToPort(p) ((PIN_MAP[p].gpio_device)->gpio_port)
70+
#define digitalPinToBitMask(p) (BIT(PIN_MAP[p].gpio_bit))
71+
#define digitalPinToClkid(p) (PIN_MAP[p].gpio_device->clk_id)
72+
73+
#define digitalPinSPIAvailiable(p) (PIN_MAP[p].spi_device != 0)
74+
#define digitalPinToSPIDevice(p) (PIN_MAP[p].spi_device->spi_dev)
75+
#define digitalPinToSPIClockId(p) (PIN_MAP[p].spi_device->clk_id)
76+
77+
78+
#define VARIANT_GPIO_OSPEED GPIO_OSPEED_50MHZ //
79+
80+
#ifdef __cplusplus
81+
}
82+
#endif
83+
84+
#endif

0 commit comments

Comments
 (0)