Skip to content

Commit ae52e29

Browse files
committed
[bsp][mm32]:feat reorganize BSPs and drivers
1 parent f6cb95b commit ae52e29

650 files changed

Lines changed: 19163 additions & 367742 deletions

File tree

Some content is hidden

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

.github/ALL_BSP_COMPILE.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -86,9 +86,9 @@
8686
"yichip/yc3122-pos",
8787
"yichip/yc3121-pos",
8888
"mm32/mm32f3270-100ask-pitaya",
89-
"mm32f327x",
90-
"mm32f526x",
91-
"mm32l07x",
89+
"mm32/mm32f327x",
90+
"mm32/mm32f526x",
91+
"mm32/mm32l07x",
9292
"sam7x",
9393
"hk32/hk32f030c8-mini",
9494
"rm48x50",

MAINTAINERS

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ path: bsp/nxp/mcx/mcxn
100100
owners: 下里巴人(hywing)<hywing.sir@qq.com>
101101

102102
tag: bsp_mm32f526x
103-
path: bsp/mm32f526x
103+
path: bsp/mm32/mm32f526x
104104
owners: Huanyi Mai(Maihuanyi)<m19825309307@163.com>
105105

106106
tag: bsp_nrf5x

bsp/Copyright_Notice.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -550,8 +550,8 @@ Copyright: Copyright (c) 2009 - 2013 ARM LIMITED
550550

551551
Path:
552552

553-
- bsp/mm32l07x/Libraries/CMSIS
554-
- bsp/mm32l3xx/Libraries/CMSIS/IAR_CORE
553+
- bsp/mm32/mm32l07x/Libraries/CMSIS
554+
- bsp/mm32/mm32l3xx/Libraries/CMSIS/IAR_CORE
555555

556556
------
557557

@@ -561,8 +561,8 @@ Copyright: (c) COPYRIGHT 2017 MindMotion
561561

562562
Path:
563563

564-
- bsp/mm32l07x/Libraries/MM32L0xx
565-
- bsp/mm32l3xx/Libraries/MM32L3xx
564+
- bsp/mm32/mm32l07x/Libraries/MM32L0xx
565+
- bsp/mm32/mm32l3xx/Libraries/MM32L3xx
566566

567567
### nrf
568568

bsp/mm32/README.md

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,16 @@ MM32 系列 BSP 目前支持情况如下表所示:
44

55
| **BSP 文件夹名称** | **开发板名称** |
66
|:------------------------- |:-------------------------- |
7+
| **F103 系列** | |
8+
| [mm32f103x](mm32f103x) | MM32 MiniBoard 开发板 |
79
| **F3270 系列** | |
810
| [mm32f3270-100ask-pitaya](mm32f3270-100ask-pitaya) | 百问网MM32F3273G8P火龙果开发板 |
11+
| [mm32f327x](mm32f327x) | MM32F3270 EVBoard 开发板 |
12+
| **F526 系列** | |
13+
| [mm32f526x](mm32f526x) | MM32F5265-OB 开发板 |
14+
| **L0 系列** | |
15+
| [mm32l07x](mm32l07x) | MM32 MiniBoard Rev.D2 开发板 |
16+
| **L3 系列** | |
17+
| [mm32l3xx](mm32l3xx) | MM32 MiniBoard Rev.D2 开发板 |
918

10-
可以通过阅读相应 BSP 下的 README 来快速上手。
19+
可以通过阅读相应 BSP 下的 README 来快速上手。
Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,22 @@
11
Import('RTT_ROOT')
22
Import('rtconfig')
33
from building import *
4+
import os
45

56
cwd = GetCurrentDir()
7+
group = []
68

79
# add the general drivers.
810
src = Split("""
911
""")
1012

11-
if GetDepend(['RT_USING_PIN']):
12-
src += ['drv_gpio.c']
13-
14-
if GetDepend(['RT_USING_SERIAL']):
15-
src += ['drv_uart.c']
16-
17-
src += ['drv_common.c']
13+
if GetDepend('SOC_SERIES_MM32F3277') or os.path.basename(Dir('#').abspath).lower().startswith('mm32f3270'):
14+
src += ['drv_common.c']
1815

1916
path = [cwd]
20-
path += [cwd + '/config']
2117

22-
group = DefineGroup('Drivers', src, depend = [''], CPPPATH = path)
18+
group = group + SConscript(os.path.join(cwd, 'drivers', 'SConscript'),
19+
variant_dir='drivers', duplicate=0)
20+
group = group + DefineGroup('Drivers', src, depend = [''], CPPPATH = path)
2321

2422
Return('group')
File renamed without changes.
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
Import('RTT_ROOT')
2+
Import('rtconfig')
3+
from building import *
4+
import os
5+
6+
cwd = GetCurrentDir()
7+
group = []
8+
src = []
9+
10+
uart_deps = ['BSP_USING_UART1', 'BSP_USING_UART2', 'BSP_USING_UART3',
11+
'BSP_USING_UART4', 'BSP_USING_UART5', 'BSP_USING_UART6',
12+
'BSP_USING_UART7', 'BSP_USING_UART8']
13+
14+
if GetDepend(['RT_USING_SERIAL']) or any([GetDepend(uart) for uart in uart_deps]):
15+
src += ['drv_uart.c']
16+
17+
gpio_series = ['SOC_SERIES_MM32F103', 'SOC_SERIES_MM32F327',
18+
'SOC_SERIES_MM32F3277', 'SOC_SERIES_MM32F526',
19+
'SOC_SERIES_MM32L3']
20+
21+
if (GetDepend(['RT_USING_PIN']) or GetDepend(['BSP_USING_GPIO'])) and any([GetDepend(series) for series in gpio_series]):
22+
src += ['drv_gpio.c']
23+
24+
adc_series = ['SOC_SERIES_MM32F327', 'SOC_SERIES_MM32F526']
25+
26+
if GetDepend(['BSP_USING_ADC']) and any([GetDepend(series) for series in adc_series]):
27+
src += ['drv_adc.c']
28+
29+
flash_series = ['SOC_SERIES_MM32F327', 'SOC_SERIES_MM32F3277', 'SOC_SERIES_MM32F526']
30+
31+
if GetDepend(['BSP_USING_OCFLASH']) and any([GetDepend(series) for series in flash_series]):
32+
src += ['drv_flash.c']
33+
34+
CPPPATH = [
35+
cwd,
36+
os.path.abspath(os.path.join(cwd, '..')),
37+
os.path.join(Dir('#').abspath, 'board'),
38+
os.path.join(cwd, 'config'),
39+
]
40+
41+
group = DefineGroup('Drivers', src, depend = [''], CPPPATH = CPPPATH)
42+
43+
Return('group')

bsp/mm32/libraries/HAL_Drivers/config/mm32f3277g8p/dma_config.h renamed to bsp/mm32/libraries/HAL_Drivers/drivers/config/mm32f3277g8p/dma_config.h

File renamed without changes.

bsp/mm32/libraries/HAL_Drivers/config/mm32f3277g8p/uart_config.h renamed to bsp/mm32/libraries/HAL_Drivers/drivers/config/mm32f3277g8p/uart_config.h

File renamed without changes.
Lines changed: 247 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,247 @@
1+
/*
2+
* Copyright (c) 2006-2025, RT-Thread Development Team
3+
*
4+
* SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
#include <rtdevice.h>
8+
#include "board.h"
9+
#include "drv_adc.h"
10+
#include <hal_gpio.h>
11+
#include <hal_adc.h>
12+
#include <hal_rcc.h>
13+
#include <hal_misc.h>
14+
15+
#if defined(BSP_USING_ADC)
16+
17+
#define LOG_TAG "drv.adc"
18+
#include <rtdbg.h>
19+
20+
#if defined(SOC_SERIES_MM32F327)
21+
#define ADC_CONFIG_GPIORCC RCC_AHBENR_GPIOA
22+
#define ADC_CONFIG_GPIOX GPIOA
23+
#define ADC_CONFIG_IOX (GPIO_Pin_5 | GPIO_Pin_4)
24+
#endif
25+
26+
struct mm32_adc
27+
{
28+
struct rt_adc_device device;
29+
ADC_TypeDef *instance;
30+
const char *name;
31+
};
32+
33+
static struct mm32_adc adc_obj[] =
34+
{
35+
#if defined(BSP_USING_ADC1)
36+
{
37+
.instance = ADC1,
38+
.name = "adc1",
39+
},
40+
#endif
41+
#if defined(BSP_USING_ADC2)
42+
{
43+
.instance = ADC2,
44+
.name = "adc2",
45+
},
46+
#endif
47+
};
48+
49+
static void mm32_adc_channel_enable(ADC_TypeDef *adc, rt_uint32_t channel)
50+
{
51+
#if defined(SOC_SERIES_MM32F526)
52+
adc->ADCHS &= ~(1UL << channel);
53+
adc->ADCHS |= (1UL << channel);
54+
#elif defined(SOC_SERIES_MM32F327)
55+
adc->CHSR &= ~(1UL << channel);
56+
adc->CHSR |= (1UL << channel);
57+
#else
58+
#error "Unsupported MM32 ADC series"
59+
#endif
60+
}
61+
62+
static void mm32_adc_clock_enable(ADC_TypeDef *adc, rt_bool_t enabled)
63+
{
64+
#if defined(SOC_SERIES_MM32F526)
65+
if (adc == ADC1)
66+
{
67+
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, enabled ? ENABLE : DISABLE);
68+
}
69+
#ifdef ADC2
70+
else if (adc == ADC2)
71+
{
72+
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC2, enabled ? ENABLE : DISABLE);
73+
}
74+
#endif
75+
#elif defined(SOC_SERIES_MM32F327)
76+
if (adc == ADC1)
77+
{
78+
RCC_APB2PeriphClockCmd(RCC_APB2ENR_ADC1, enabled ? ENABLE : DISABLE);
79+
}
80+
#ifdef ADC2
81+
else if (adc == ADC2)
82+
{
83+
RCC_APB2PeriphClockCmd(RCC_APB2ENR_ADC2, enabled ? ENABLE : DISABLE);
84+
}
85+
#endif
86+
#endif
87+
}
88+
89+
static void mm32_adc_hw_config(ADC_TypeDef *adc, rt_uint32_t channel)
90+
{
91+
ADC_InitTypeDef init;
92+
#if defined(SOC_SERIES_MM32F327)
93+
GPIO_InitTypeDef gpio_init;
94+
#endif
95+
96+
#if defined(SOC_SERIES_MM32F526)
97+
mm32_msp_adc_init((void *)adc);
98+
ADC_CalibrationConfig(adc, 0x1FE);
99+
#else
100+
mm32_adc_clock_enable(adc, RT_TRUE);
101+
#endif
102+
103+
ADC_StructInit(&init);
104+
init.ADC_Resolution = ADC_Resolution_12b;
105+
init.ADC_DataAlign = ADC_DataAlign_Right;
106+
107+
#if defined(SOC_SERIES_MM32F526)
108+
init.ADC_Prescaler = ADC_Prescaler_16;
109+
init.ADC_Mode = ADC_Mode_Scan;
110+
ADC_Init(adc, &init);
111+
ADC_SampleTimeConfig(adc, channel, ADC_SampleTime_240_5);
112+
ADC_ChannelCmd(adc, channel, ENABLE);
113+
ADC_DifferentialConversionConfig(adc, ADC_Pseudo_Differential_Conversion_4_5);
114+
#elif defined(SOC_SERIES_MM32F327)
115+
init.ADC_PRESCARE = ADC_PCLK2_PRESCARE_16;
116+
init.ADC_Mode = ADC_Mode_Continue;
117+
init.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1;
118+
ADC_Init(adc, &init);
119+
ADC_RegularChannelConfig(adc, channel, 0, ADC_Samctl_239_5);
120+
121+
GPIO_StructInit(&gpio_init);
122+
RCC_AHBPeriphClockCmd(ADC_CONFIG_GPIORCC, ENABLE);
123+
gpio_init.GPIO_Pin = ADC_CONFIG_IOX;
124+
gpio_init.GPIO_Speed = GPIO_Speed_50MHz;
125+
gpio_init.GPIO_Mode = GPIO_Mode_AIN;
126+
GPIO_Init(ADC_CONFIG_GPIOX, &gpio_init);
127+
#endif
128+
129+
ADC_Cmd(adc, ENABLE);
130+
mm32_adc_channel_enable(adc, channel);
131+
}
132+
133+
static rt_err_t mm32_adc_enabled(struct rt_adc_device *device, rt_int8_t channel, rt_bool_t enabled)
134+
{
135+
ADC_TypeDef *adc;
136+
137+
RT_ASSERT(device != RT_NULL);
138+
adc = device->parent.user_data;
139+
140+
if (enabled)
141+
{
142+
mm32_adc_hw_config(adc, (rt_uint32_t)channel);
143+
}
144+
else
145+
{
146+
ADC_DeInit(adc);
147+
ADC_Cmd(adc, DISABLE);
148+
mm32_adc_clock_enable(adc, RT_FALSE);
149+
}
150+
151+
return RT_EOK;
152+
}
153+
154+
static rt_err_t mm32_adc_get_value(struct rt_adc_device *device, rt_int8_t channel, rt_uint32_t *value)
155+
{
156+
ADC_TypeDef *adc;
157+
158+
RT_ASSERT(device != RT_NULL);
159+
RT_ASSERT(value != RT_NULL);
160+
adc = device->parent.user_data;
161+
162+
ADC_SoftwareStartConvCmd(adc, ENABLE);
163+
164+
#if defined(SOC_SERIES_MM32F526)
165+
while (ADC_GetFlagStatus(adc, ADC_FLAG_EOC) == 0)
166+
{
167+
}
168+
ADC_ClearFlag(adc, ADC_FLAG_EOC);
169+
*value = ADC_GetChannelConvertedValue(adc, channel);
170+
#elif defined(SOC_SERIES_MM32F327)
171+
while (ADC_GetFlagStatus(adc, ADC_IT_EOC) == 0)
172+
{
173+
}
174+
ADC_ClearFlag(adc, ADC_IT_EOC);
175+
*value = ADC_GetConversionValue(adc);
176+
#endif
177+
178+
return RT_EOK;
179+
}
180+
181+
static rt_uint8_t mm32_adc_get_resolution(struct rt_adc_device *device)
182+
{
183+
ADC_TypeDef *adc;
184+
rt_uint32_t resolution;
185+
186+
RT_ASSERT(device != RT_NULL);
187+
adc = device->parent.user_data;
188+
189+
#if defined(SOC_SERIES_MM32F526)
190+
resolution = adc->ADCFG & 0x00000380;
191+
#else
192+
resolution = adc->CFGR & 0x00000380;
193+
#endif
194+
195+
switch (resolution)
196+
{
197+
case ADC_Resolution_12b:
198+
return 12;
199+
case ADC_Resolution_11b:
200+
return 11;
201+
case ADC_Resolution_10b:
202+
return 10;
203+
case ADC_Resolution_9b:
204+
return 9;
205+
case ADC_Resolution_8b:
206+
return 8;
207+
default:
208+
return 12;
209+
}
210+
}
211+
212+
static rt_int16_t mm32_adc_get_vref(struct rt_adc_device *device)
213+
{
214+
if (device == RT_NULL)
215+
{
216+
return -RT_ERROR;
217+
}
218+
219+
return 3300;
220+
}
221+
222+
static const struct rt_adc_ops mm32_adc_ops =
223+
{
224+
.enabled = mm32_adc_enabled,
225+
.convert = mm32_adc_get_value,
226+
.get_resolution = mm32_adc_get_resolution,
227+
.get_vref = mm32_adc_get_vref,
228+
};
229+
230+
int rt_hw_adc_init(void)
231+
{
232+
rt_size_t i;
233+
234+
for (i = 0; i < sizeof(adc_obj) / sizeof(adc_obj[0]); i++)
235+
{
236+
if (rt_hw_adc_register(&adc_obj[i].device, adc_obj[i].name, &mm32_adc_ops, adc_obj[i].instance) != RT_EOK)
237+
{
238+
LOG_E("%s register failed", adc_obj[i].name);
239+
return -RT_ERROR;
240+
}
241+
}
242+
243+
return RT_EOK;
244+
}
245+
INIT_BOARD_EXPORT(rt_hw_adc_init);
246+
247+
#endif /* BSP_USING_ADC */

0 commit comments

Comments
 (0)