Skip to content

Commit 8b64727

Browse files
committed
提交了国民技术的pwm驱动程序,驱动已经在N32L406和N32G457平台测试OK,pwm配置使用KConfig方式配置
1 parent 9a6d515 commit 8b64727

File tree

9 files changed

+1526
-107
lines changed

9 files changed

+1526
-107
lines changed

bsp/n32/libraries/n32_drivers/SConscript

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ cwd = GetCurrentDir()
88
src = Split("""
99
""")
1010

11+
src += ['drv_base.c']
12+
1113
if GetDepend(['RT_USING_PIN']):
1214
src += ['drv_gpio.c']
1315

@@ -20,6 +22,7 @@ if GetDepend(['RT_USING_SERIAL']):
2022
if GetDepend(['RT_USING_HWTIMER']):
2123
src += ['drv_hwtimer.c']
2224

25+
2326
if GetDepend(['RT_USING_PWM']):
2427
src += ['drv_pwm.c']
2528

@@ -45,6 +48,9 @@ if GetDepend(['RT_USING_RTC']):
4548
if GetDepend(['RT_USING_WDT']):
4649
src += ['drv_wdt.c']
4750

51+
if GetDepend(['BSP_USING_PWM']):
52+
src += ['drv_pwm.c']
53+
4854
path = [cwd]
4955
path += [cwd + '/config']
5056

Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
#include <rtthread.h>
2+
3+
4+
#define DBG_TAG "PWM"
5+
#define DBG_LEVEL DBG_LOG
6+
#include <rtdbg.h>
7+
#include "board.h"
8+
/**
9+
* @brief 使能对应GPIO的时钟
10+
*/
11+
void n32_gpio_rcc_enable(GPIO_Module *gpio_grp)
12+
{
13+
assert_param(IS_GPIO_ALL_PERIPH(gpio_grp));
14+
if (GPIOA == gpio_grp)
15+
{
16+
RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOA, ENABLE);
17+
LOG_D("enable gpio rcc GPIOA");
18+
}
19+
else if (GPIOB == gpio_grp)
20+
{
21+
RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOB, ENABLE);
22+
LOG_D("enable gpio rcc GPIOB");
23+
}
24+
else if (GPIOC == gpio_grp)
25+
{
26+
RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOC, ENABLE);
27+
LOG_D("enable gpio rcc GPIOC");
28+
}
29+
else if (GPIOD == gpio_grp)
30+
{
31+
RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOD, ENABLE);
32+
LOG_D("enable gpio rcc GPIOD");
33+
}
34+
#if defined(SOC_N32G45X) || defined(SOC_N32WB452) || defined(SOC_N32G4FR)
35+
else if (GPIOE == gpio_grp)
36+
{
37+
RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOE, ENABLE);
38+
}
39+
else if (GPIOF == gpio_grp)
40+
{
41+
RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOF, ENABLE);
42+
}
43+
else if (GPIOG == gpio_grp)
44+
{
45+
RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOG, ENABLE);
46+
}
47+
#endif
48+
}
49+
/**定时器2的引脚涉及了SWD-JTAG的调试引脚,在复用时需要先设置jSWD-JTAG的复用
50+
* 复用功能 GPIO端口
51+
JTMS/SWDIO PA13-----------swd
52+
JTCK/SWCLK A14------------swd
53+
JTDI PA15
54+
JTDO PB3
55+
NJTRST PB4
56+
57+
* GPIO_ConfigPinRemap(GPIO_RMP_SW_JTAG_SW_ENABLE,ENABLE);
58+
*/
59+
void gpio_remap_JTAGOFF_SWDON(GPIO_Module *gpio_grp, uint16_t pin)
60+
{
61+
#if defined(SOC_N32G45X) || defined(SOC_N32WB452) || defined(SOC_N32G4FR)
62+
63+
if ((GPIOA == gpio_grp && GPIO_PIN_15) ||
64+
(GPIOB == gpio_grp && GPIO_PIN_3) ||
65+
(GPIOB == gpio_grp && GPIO_PIN_4))
66+
{
67+
RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_AFIO, ENABLE);
68+
GPIO_ConfigPinRemap(GPIO_RMP_SW_JTAG_SW_ENABLE, ENABLE);
69+
}
70+
#endif
71+
}
72+
73+
/**
74+
* @brief 定时器的时钟使能配置
75+
*/
76+
void n32_time_rcc_config(TIM_Module *htim)
77+
{
78+
RT_ASSERT(TIM1 == htim || TIM2 == htim || TIM3 == htim || TIM4 == htim || TIM5 == htim || TIM8 == htim
79+
#if defined(SOC_N32G45X) || defined(SOC_N32WB452) || defined(SOC_N32G4FR)
80+
);
81+
#else
82+
|| TIM9 == htim);
83+
#endif
84+
85+
if (TIM1 == htim)
86+
{
87+
RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_TIM1, ENABLE);
88+
}
89+
else if (TIM2 == htim)
90+
{
91+
RCC_EnableAPB1PeriphClk(RCC_APB1_PERIPH_TIM2, ENABLE);
92+
}
93+
else if (TIM3 == htim)
94+
{
95+
RCC_EnableAPB1PeriphClk(RCC_APB1_PERIPH_TIM3, ENABLE);
96+
}
97+
else if (TIM4 == htim)
98+
{
99+
RCC_EnableAPB1PeriphClk(RCC_APB1_PERIPH_TIM4, ENABLE);
100+
}
101+
else if (TIM5 == htim)
102+
{
103+
RCC_EnableAPB1PeriphClk(RCC_APB1_PERIPH_TIM5, ENABLE);
104+
}
105+
else if (TIM8 == htim)
106+
{
107+
RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_TIM8, ENABLE);
108+
}
109+
#if defined(SOC_N32L43X) || defined(SOC_N32L40X) || defined(SOC_N32G43X)
110+
else if (TIM9 == htim)
111+
{
112+
RCC_EnableAPB1PeriphClk(RCC_APB1_PERIPH_TIM9, ENABLE);
113+
}
114+
#endif
115+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
#ifndef __DRV_BASE__
2+
#define __DRV_BASE__
3+
#include "board.h"
4+
/**
5+
* @brief 使能对应GPIO的时钟
6+
*/
7+
void n32_gpio_rcc_enable(GPIO_Module *gpio_grp);
8+
9+
/**
10+
* @brief 定时器的时钟使能配置
11+
*/
12+
void n32_time_rcc_config(TIM_Module *htim);
13+
14+
/**定时器2的引脚涉及了SWD-JTAG的调试引脚,在复用时需要先设置jSWD-JTAG的复用
15+
* 复用功能 GPIO端口
16+
JTMS/SWDIO PA13-----------swd
17+
JTCK/SWCLK A14------------swd
18+
JTDI PA15
19+
JTDO PB3
20+
NJTRST PB4
21+
22+
* GPIO_ConfigPinRemap(GPIO_RMP_SW_JTAG_SW_ENABLE,ENABLE);
23+
*/
24+
void gpio_remap_JTAGOFF_SWDON(GPIO_Module *gpio_grp, uint16_t pin);
25+
#endif

0 commit comments

Comments
 (0)