@@ -31,32 +31,86 @@ static int calibration_value = 0;
31
31
/* Private_Defines */
32
32
#if defined(ADC_MODULE_ENABLED) && !defined(ADC_MODULE_ONLY)
33
33
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) )
35
35
36
36
/* Default to use maximum sampling period */
37
+ #if defined(CH32L10x) || defined(CH32VM00X)
38
+
37
39
#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
40
64
#elif defined(ADC_SampleTime_71Cycles5)
41
- #define ADC_SAMPLINGTIME ADC_SampleTime_71Cycles5;
65
+ #define ADC_SAMPLINGTIME ADC_SampleTime_71Cycles5
42
66
#elif defined(ADC_SampleTime_55Cycles5)
43
- #define ADC_SAMPLINGTIME ADC_SampleTime_55Cycles5;
67
+ #define ADC_SAMPLINGTIME ADC_SampleTime_55Cycles5
44
68
#elif defined(ADC_SampleTime_41Cycles5)
45
- #define ADC_SAMPLINGTIME ADC_SampleTime_41Cycles5;
69
+ #define ADC_SAMPLINGTIME ADC_SampleTime_41Cycles5
46
70
#elif defined(ADC_SampleTime_28Cycles5)
47
- #define ADC_SAMPLINGTIME ADC_SampleTime_28Cycles5;
71
+ #define ADC_SAMPLINGTIME ADC_SampleTime_28Cycles5
48
72
#elif defined(ADC_SampleTime_13Cycles5)
49
- #define ADC_SAMPLINGTIME ADC_SampleTime_13Cycles5;
73
+ #define ADC_SAMPLINGTIME ADC_SampleTime_13Cycles5
50
74
#elif defined(ADC_SampleTime_7Cycles5)
51
- #define ADC_SAMPLINGTIME ADC_SampleTime_7Cycles5;
75
+ #define ADC_SAMPLINGTIME ADC_SampleTime_7Cycles5
52
76
#elif defined(ADC_SampleTime_1Cycles5)
53
77
#define ADC_SAMPLINGTIME ADC_SampleTime_1Cycles5
54
78
#endif
55
79
#endif /* !ADC_SAMPLINGTIME */
56
80
81
+ #endif /* CH32L10x */
82
+
83
+
57
84
/*
58
85
* Default to use maximum sampling period
59
86
*/
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
+
60
114
#ifndef ADC_SAMPLINGTIME_INTERNAL
61
115
#if defined(ADC_SampleTime_239Cycles5)
62
116
#define ADC_SAMPLINGTIME_INTERNAL ADC_SampleTime_239Cycles5
@@ -79,6 +133,11 @@ static int calibration_value = 0;
79
133
#endif
80
134
#endif /* !ADC_SAMPLINGTIME_INTERNAL */
81
135
136
+
137
+ #endif
138
+
139
+
140
+
82
141
#ifndef ADC_CLOCK_DIV
83
142
#ifdef RCC_PCLK2_Div8
84
143
#define ADC_CLOCK_DIV RCC_PCLK2_Div8
@@ -264,13 +323,17 @@ uint32_t get_adc_channel(PinName pin)
264
323
case 8 :
265
324
channel = ADC_Channel_8;
266
325
break ;
326
+ #ifdef ADC_Channel_9
267
327
case 9 :
268
328
channel = ADC_Channel_9;
269
329
break ;
330
+ #endif
270
331
#ifdef ADC_Channel_10
271
332
case 10 :
272
333
channel = ADC_Channel_10;
273
334
break ;
335
+ #endif
336
+ #ifdef ADC_Channel_11
274
337
case 11 :
275
338
channel = ADC_Channel_11;
276
339
break ;
@@ -423,8 +486,13 @@ void dac_write_value(PinName pin, uint32_t value, uint8_t do_init)
423
486
424
487
if (do_init == 1 )
425
488
{
489
+ #if defined(CH32L10x)
490
+ RCC_PB2PeriphClockCmd (RCC_PB2Periph_GPIOA, ENABLE );
491
+ RCC_PB1PeriphClockCmd (RCC_PB1Periph_DAC, ENABLE );
492
+ #else
426
493
RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOA, ENABLE );
427
494
RCC_APB1PeriphClockCmd (RCC_APB1Periph_DAC, ENABLE );
495
+ #endif
428
496
/* ##-1- Configure the DAC peripheral */
429
497
g_current_pin = pin;
430
498
@@ -503,13 +571,21 @@ void ADC_Clock_EN(ADC_TypeDef *padc)
503
571
#ifdef RCC_APB2Periph_ADC1
504
572
RCC_APB2PeriphClockCmd (RCC_APB2Periph_ADC1 , ENABLE ); // ENABLE ADC1 Clock
505
573
#endif
574
+
575
+ #ifdef RCC_PB2Periph_ADC1
576
+ RCC_PB2PeriphClockCmd (RCC_PB2Periph_ADC1 , ENABLE ); // ENABLE ADC1 Clock for CH32L10x
577
+ #endif
506
578
}
507
579
#ifdef ADC2
508
580
else if (padc == ADC2)
509
581
{
510
582
#ifdef RCC_APB2Periph_ADC2
511
- RCC_APB2PeriphClockCmd (RCC_APB2Periph_ADC2 , ENABLE ); // ENABLE ADC2 Clock
583
+ RCC_APB2PeriphClockCmd (RCC_APB2Periph_ADC2 , ENABLE ); // ENABLE ADC2 Clock
512
584
#endif
585
+
586
+ #ifdef RCC_PB2Periph_ADC2
587
+ RCC_PB2PeriphClockCmd (RCC_PB2Periph_ADC2 , ENABLE ); // ENABLE ADC2 Clock for CH32L10x
588
+ #endif
513
589
}
514
590
#endif
515
591
/* Configure ADC GPIO pin */
@@ -582,7 +658,7 @@ uint16_t adc_read_value(PinName pin, uint32_t resolution)
582
658
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
583
659
ADC_InitStructure.ADC_NbrOfChannel = 1 ;
584
660
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
585
- #if !defined(CH32V00x) && !defined(CH32V10x)
661
+ #if !defined(CH32V00x) && !defined(CH32V10x) && !defined(CH32VM00X)
586
662
ADC_InitStructure.ADC_OutputBuffer = ENABLE;
587
663
#endif
588
664
ADC_Init (padc, &ADC_InitStructure);
0 commit comments