Skip to content

Commit 3c67f6b

Browse files
authored
add chips and fix bugs (#107)
1.add ch32v10x and ch32v00X(002/4/5/6/7) 2.fix some bugs
1 parent 3aa463a commit 3c67f6b

File tree

184 files changed

+45809
-101
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

184 files changed

+45809
-101
lines changed

boards.txt

Lines changed: 314 additions & 8 deletions
Large diffs are not rendered by default.

cores/arduino/HardwareTimer.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -64,16 +64,16 @@ HardwareTimer::HardwareTimer(TIM_TypeDef *instance)
6464
_timerObj.handle.Instance = nullptr;
6565
setup(instance);
6666

67-
#ifdef TIM1_BASE
67+
#if defined(TIM1_BASE)
6868
NVIC_EnableIRQ(TIM1_UP_IRQn);
6969
NVIC_EnableIRQ(TIM1_CC_IRQn);
7070
#endif
7171

72-
#ifdef TIM2_BASE
72+
#ifdef TIM2_BASE
7373
NVIC_EnableIRQ(TIM2_IRQn);
7474
#endif
7575

76-
#ifdef TIM3_BASE
76+
#if defined(TIM3_BASE) && defined(TIM3_IRQn) //v006 has no interruption
7777
NVIC_EnableIRQ(TIM3_IRQn);
7878
#endif
7979

@@ -1503,7 +1503,7 @@ uint32_t HardwareTimer::getTimerClkFreq()
15031503
/* Get clock configuration */
15041504
RCC_GetClocksFreq(&RCC_ClocksStatus);
15051505

1506-
#if !defined(CH32V00x) && !defined(CH32X035)
1506+
#if !defined(CH32V00x) && !defined(CH32X035) && !defined(CH32VM00X)
15071507
switch (getTimerClkSrc(_timerObj.handle.Instance))
15081508
{
15091509
case 1:

cores/arduino/ch32/PinAF_ch32yyxx.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@
1010
#include "../../../variants/CH32V00x/PinAF_CH32V00x.h"
1111
#endif
1212

13+
#if defined(CH32VM00X)
14+
#include "../../../variants/CH32VM00X/PinAF_CH32V00X.h"
15+
#endif
16+
1317
#if defined(CH32V10x)
1418
#include "../../../variants/CH32V10x/PinAF_CH32V10x.h"
1519
#endif
@@ -22,4 +26,8 @@
2226
#include "../../../variants/CH32V30x/PinAF_CH32V30x.h"
2327
#endif
2428

29+
#if defined(CH32L10x)
30+
#include "../../../variants/CH32L10x/PinAF_CH32L10x.h"
31+
#endif
32+
2533
#endif /* _PINAF_CH32YYXX_H */

cores/arduino/ch32/PortNames.c

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,48 +62,80 @@ GPIO_TypeDef *set_GPIO_Port_Clock(uint32_t port_idx)
6262
switch (port_idx) {
6363
case PortA:
6464
gpioPort = GPIOA;
65+
#if defined(CH32L10x) || defined(CH32VM00X)
66+
RCC_PB2PeriphClockCmd(RCC_PB2Periph_GPIOA, ENABLE);
67+
#else
6568
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
69+
#endif
6670
break;
6771
#if defined GPIOB_BASE
6872
case PortB:
6973
gpioPort = GPIOB;
74+
#if defined(CH32L10x) || defined(CH32VM00X)
75+
RCC_PB2PeriphClockCmd(RCC_PB2Periph_GPIOB, ENABLE);
76+
#else
7077
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
78+
#endif
7179
break;
7280
#endif
7381
#if defined GPIOC_BASE
7482
case PortC:
7583
gpioPort = GPIOC;
84+
#if defined(CH32L10x) || defined(CH32VM00X)
85+
RCC_PB2PeriphClockCmd(RCC_PB2Periph_GPIOC, ENABLE);
86+
#else
7687
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
88+
#endif
7789
break;
7890
#endif
7991
#if defined GPIOD_BASE
8092
case PortD:
8193
gpioPort = GPIOD;
94+
#if defined(CH32L10x) || defined(CH32VM00X)
95+
RCC_PB2PeriphClockCmd(RCC_PB2Periph_GPIOD, ENABLE);
96+
#else
8297
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
98+
#endif
8399
break;
84100
#endif
85101
#if defined GPIOE_BASE
86102
case PortE:
87103
gpioPort = GPIOE;
104+
#if defined(CH32L10x)
105+
RCC_PB2PeriphClockCmd(RCC_PB2Periph_GPIOE, ENABLE);
106+
#else
88107
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);
108+
#endif
89109
break;
90110
#endif
91111
#if defined RCC_APB2Periph_GPIOF
92112
case PortF:
93113
gpioPort = GPIOF;
114+
#if defined(CH32L10x)
115+
RCC_PB2PeriphClockCmd(RCC_PB2Periph_GPIOF, ENABLE);
116+
#else
94117
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF, ENABLE);
118+
#endif
95119
break;
96120
#endif
97121
#if defined RCC_APB2Periph_GPIOG
98122
case PortG:
99123
gpioPort = GPIOG;
124+
#if defined(CH32L10x)
125+
RCC_PB2PeriphClockCmd(RCC_PB2Periph_GPIOG, ENABLE);
126+
#else
100127
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG, ENABLE);
128+
#endif
101129
break;
102130
#endif
103131
#if defined RCC_APB2Periph_GPIOH
104132
case PortH:
105133
gpioPort = GPIOH;
106-
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOH, ENABLE);
134+
#if defined(CH32L10x)
135+
RCC_PB2PeriphClockCmd(RCC_PB2Periph_GPIOH, ENABLE);
136+
#else
137+
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOH, ENABLE);
138+
#endif
107139
break;
108140
#endif
109141
default:

cores/arduino/ch32/analog.cpp

Lines changed: 87 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -31,32 +31,86 @@ static int calibration_value = 0;
3131
/* Private_Defines */
3232
#if defined(ADC_MODULE_ENABLED) && !defined(ADC_MODULE_ONLY)
3333

34-
#if (defined(CH32V20x) || defined(CH32V30x) || defined(CH32V30x_C) || defined(CH32V10x) )
34+
#if (defined(CH32V20x) || defined(CH32V30x) || defined(CH32V30x_C) || defined(CH32V10x) || defined(CH32L10x) || defined(CH32VM00X) )
3535

3636
/* Default to use maximum sampling period */
37+
#if defined(CH32L10x) || defined(CH32VM00X)
38+
3739
#ifndef ADC_SAMPLINGTIME
38-
#if defined(ADC_SampleTime_239Cycles5)
39-
#define ADC_SAMPLINGTIME ADC_SampleTime_239Cycles5;
40+
#if defined(ADC_SampleTime_CyclesMode7)
41+
#define ADC_SAMPLINGTIME ADC_SampleTime_CyclesMode7
42+
#elif defined(ADC_SampleTime_CyclesMode6)
43+
#define ADC_SAMPLINGTIME ADC_SampleTime_CyclesMode6
44+
#elif defined(ADC_SampleTime_CyclesMode5)
45+
#define ADC_SAMPLINGTIME ADC_SampleTime_CyclesMode5
46+
#elif defined(ADC_SampleTime_CyclesMode4)
47+
#define ADC_SAMPLINGTIME ADC_SampleTime_CyclesMode4
48+
#elif defined(ADC_SampleTime_CyclesMode3)
49+
#define ADC_SAMPLINGTIME ADC_SampleTime_CyclesMode3
50+
#elif defined(ADC_SampleTime_CyclesMode2)
51+
#define ADC_SAMPLINGTIME ADC_SampleTime_CyclesMode2
52+
#elif defined(ADC_SampleTime_CyclesMode1)
53+
#define ADC_SAMPLINGTIME ADC_SampleTime_CyclesMode1
54+
#elif defined(ADC_SampleTime_CyclesMode0)
55+
#define ADC_SAMPLINGTIME ADC_SampleTime_CyclesMode0
56+
#endif
57+
#endif /* !ADC_SAMPLINGTIME */
58+
59+
#else
60+
61+
#ifndef ADC_SAMPLINGTIME
62+
#if defined(ADC_SampleTime_239Cycles5)
63+
#define ADC_SAMPLINGTIME ADC_SampleTime_239Cycles5
4064
#elif defined(ADC_SampleTime_71Cycles5)
41-
#define ADC_SAMPLINGTIME ADC_SampleTime_71Cycles5;
65+
#define ADC_SAMPLINGTIME ADC_SampleTime_71Cycles5
4266
#elif defined(ADC_SampleTime_55Cycles5)
43-
#define ADC_SAMPLINGTIME ADC_SampleTime_55Cycles5;
67+
#define ADC_SAMPLINGTIME ADC_SampleTime_55Cycles5
4468
#elif defined(ADC_SampleTime_41Cycles5)
45-
#define ADC_SAMPLINGTIME ADC_SampleTime_41Cycles5;
69+
#define ADC_SAMPLINGTIME ADC_SampleTime_41Cycles5
4670
#elif defined(ADC_SampleTime_28Cycles5)
47-
#define ADC_SAMPLINGTIME ADC_SampleTime_28Cycles5;
71+
#define ADC_SAMPLINGTIME ADC_SampleTime_28Cycles5
4872
#elif defined(ADC_SampleTime_13Cycles5)
49-
#define ADC_SAMPLINGTIME ADC_SampleTime_13Cycles5;
73+
#define ADC_SAMPLINGTIME ADC_SampleTime_13Cycles5
5074
#elif defined(ADC_SampleTime_7Cycles5)
51-
#define ADC_SAMPLINGTIME ADC_SampleTime_7Cycles5;
75+
#define ADC_SAMPLINGTIME ADC_SampleTime_7Cycles5
5276
#elif defined(ADC_SampleTime_1Cycles5)
5377
#define ADC_SAMPLINGTIME ADC_SampleTime_1Cycles5
5478
#endif
5579
#endif /* !ADC_SAMPLINGTIME */
5680

81+
#endif /* CH32L10x */
82+
83+
5784
/*
5885
* Default to use maximum sampling period
5986
*/
87+
88+
#if defined(CH32L10x) || defined(CH32VM00X)
89+
90+
#ifndef ADC_SAMPLINGTIME_INTERNAL
91+
#if defined(ADC_SampleTime_CyclesMode7)
92+
#define ADC_SAMPLINGTIME_INTERNAL ADC_SampleTime_CyclesMode7
93+
#elif defined(ADC_SampleTime_CyclesMode6)
94+
#define ADC_SAMPLINGTIME_INTERNAL ADC_SampleTime_CyclesMode6
95+
#elif defined(ADC_SampleTime_CyclesMode5)
96+
#define ADC_SAMPLINGTIME_INTERNAL ADC_SampleTime_CyclesMode5
97+
#elif defined(ADC_SampleTime_CyclesMode4)
98+
#define ADC_SAMPLINGTIME_INTERNAL ADC_SampleTime_CyclesMode4
99+
#elif defined(ADC_SampleTime_CyclesMode3)
100+
#define ADC_SAMPLINGTIME_INTERNAL ADC_SampleTime_CyclesMode3
101+
#elif defined(ADC_SampleTime_CyclesMode2)
102+
#define ADC_SAMPLINGTIME_INTERNAL ADC_SampleTime_CyclesMode2
103+
#elif defined(ADC_SampleTime_CyclesMode1)
104+
#define ADC_SAMPLINGTIME_INTERNAL ADC_SampleTime_CyclesMode1
105+
#elif defined(ADC_SampleTime_CyclesMode0)
106+
#define ADC_SAMPLINGTIME_INTERNAL ADC_SampleTime_CyclesMode0
107+
#else
108+
#error "ADC sampling time could not be defined for internal channels!"
109+
#endif
110+
#endif /* !ADC_SAMPLINGTIME_INTERNAL */
111+
112+
#else
113+
60114
#ifndef ADC_SAMPLINGTIME_INTERNAL
61115
#if defined(ADC_SampleTime_239Cycles5)
62116
#define ADC_SAMPLINGTIME_INTERNAL ADC_SampleTime_239Cycles5
@@ -79,6 +133,11 @@ static int calibration_value = 0;
79133
#endif
80134
#endif /* !ADC_SAMPLINGTIME_INTERNAL */
81135

136+
137+
#endif
138+
139+
140+
82141
#ifndef ADC_CLOCK_DIV
83142
#ifdef RCC_PCLK2_Div8
84143
#define ADC_CLOCK_DIV RCC_PCLK2_Div8
@@ -264,13 +323,17 @@ uint32_t get_adc_channel(PinName pin)
264323
case 8:
265324
channel = ADC_Channel_8;
266325
break;
326+
#ifdef ADC_Channel_9
267327
case 9:
268328
channel = ADC_Channel_9;
269329
break;
330+
#endif
270331
#ifdef ADC_Channel_10
271332
case 10:
272333
channel = ADC_Channel_10;
273334
break;
335+
#endif
336+
#ifdef ADC_Channel_11
274337
case 11:
275338
channel = ADC_Channel_11;
276339
break;
@@ -423,8 +486,13 @@ void dac_write_value(PinName pin, uint32_t value, uint8_t do_init)
423486

424487
if (do_init == 1)
425488
{
489+
#if defined(CH32L10x)
490+
RCC_PB2PeriphClockCmd(RCC_PB2Periph_GPIOA, ENABLE );
491+
RCC_PB1PeriphClockCmd(RCC_PB1Periph_DAC, ENABLE );
492+
#else
426493
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE );
427494
RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE );
495+
#endif
428496
/*##-1- Configure the DAC peripheral */
429497
g_current_pin = pin;
430498

@@ -503,13 +571,21 @@ void ADC_Clock_EN(ADC_TypeDef *padc)
503571
#ifdef RCC_APB2Periph_ADC1
504572
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 , ENABLE ); //ENABLE ADC1 Clock
505573
#endif
574+
575+
#ifdef RCC_PB2Periph_ADC1
576+
RCC_PB2PeriphClockCmd(RCC_PB2Periph_ADC1 , ENABLE ); //ENABLE ADC1 Clock for CH32L10x
577+
#endif
506578
}
507579
#ifdef ADC2
508580
else if(padc == ADC2)
509581
{
510582
#ifdef RCC_APB2Periph_ADC2
511-
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC2 , ENABLE ); //ENABLE ADC2 Clock
583+
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC2 , ENABLE ); //ENABLE ADC2 Clock
512584
#endif
585+
586+
#ifdef RCC_PB2Periph_ADC2
587+
RCC_PB2PeriphClockCmd(RCC_PB2Periph_ADC2 , ENABLE ); //ENABLE ADC2 Clock for CH32L10x
588+
#endif
513589
}
514590
#endif
515591
/* Configure ADC GPIO pin */
@@ -582,7 +658,7 @@ uint16_t adc_read_value(PinName pin, uint32_t resolution)
582658
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
583659
ADC_InitStructure.ADC_NbrOfChannel = 1;
584660
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
585-
#if !defined(CH32V00x) && !defined(CH32V10x)
661+
#if !defined(CH32V00x) && !defined(CH32V10x) && !defined(CH32VM00X)
586662
ADC_InitStructure.ADC_OutputBuffer = ENABLE;
587663
#endif
588664
ADC_Init(padc, &ADC_InitStructure);

cores/arduino/ch32/backup.h

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,13 +49,21 @@ static inline void resetBackupDomain(void)
4949
static inline void enableBackupDomain(void)
5050
{
5151
#ifdef PWR_MODULE_ENABLED
52+
#if defined(CH32L10x)
53+
RCC_PB1PeriphClockCmd(RCC_PB1Periph_PWR,ENABLE);
54+
#else
5255
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);
56+
#endif
5357
/* Allow access to Backup domain */
5458
PWR_BackupAccessCmd(ENABLE);
5559
#endif
5660
#ifdef RCC_APB1Periph_BKP
5761
/* Enable BKP CLK for backup registers */
62+
#if defined(CH32L10x)
63+
RCC_PB1PeriphClockCmd(RCC_PB1Periph_BKP, ENABLE);
64+
#else
5865
RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP, ENABLE);
66+
#endif
5967
#endif
6068
}
6169

@@ -64,11 +72,19 @@ static inline void disableBackupDomain(void)
6472
#ifdef PWR_MODULE_ENABLED
6573
/* Forbid access to Backup domain */
6674
PWR_BackupAccessCmd(DISABLE);
75+
#if defined(CH32L10x)
76+
RCC_PB1PeriphClockCmd(RCC_PB1Periph_PWR, DISABLE);
77+
#else
6778
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, DISABLE);
79+
#endif
6880
#endif
6981
#ifdef RCC_APB1Periph_BKP
7082
/* Disable BKP CLK for backup registers */
83+
#if defined(CH32L10x)
84+
RCC_PB1PeriphClockCmd(RCC_PB1Periph_BKP, DISABLE);
85+
#else
7186
RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP, DISABLE);
87+
#endif
7288
#endif
7389
}
7490

cores/arduino/ch32/ch32_def.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,10 @@
3434
#include "ch32v00x.h"
3535
#elif defined(CH32X035)
3636
#include "ch32x035.h"
37+
#elif defined(CH32L10x)
38+
#include "ch32l103.h"
39+
#elif defined(CH32VM00X)
40+
#include "ch32v00X.h"
3741
#else
3842
#error "CH32YYXX chip series is not defined in boards.txt."
3943
#endif

cores/arduino/ch32/ch32_def_build.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55

66
#if defined(CH32V00x)
77
#define COM_STARTUP_FILE "startup_ch32v00x.S"
8+
#elif defined(CH32VM00X)
9+
#define COM_STARTUP_FILE "startup_ch32v00X.S"
810
#elif defined(CH32X035)
911
#define COM_STARTUP_FILE "startup_ch32x035.S"
1012

@@ -29,6 +31,9 @@
2931
#elif defined(CH32V30x)
3032
#define COM_STARTUP_FILE "startup_ch32v30x_D8.S"
3133
#define CH32V30x_D8
34+
35+
#elif defined(CH32L10x)
36+
#define COM_STARTUP_FILE "startup_ch32l103.S"
3237
#else
3338
#error "Unknow chip!"
3439
#endif

cores/arduino/ch32/clock.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ uint32_t getCurrentMillis(void)
4949

5050

5151

52-
#if defined(CH32V20x) || defined(CH32V30x) || defined(CH32V30x_C) || defined(CH32V00x) || defined(CH32X035)
52+
#if defined(CH32V20x) || defined(CH32V30x) || defined(CH32V30x_C) || defined(CH32V00x) || defined(CH32X035) || defined(CH32L10x) || defined(CH32VM00X)
5353

5454
uint32_t getCurrentMicros(void)
5555
{

0 commit comments

Comments
 (0)