Skip to content

Commit 1731a6c

Browse files
committed
1.Modify project directory structure
2.Add support for GPIO and UART peripherals 3.Add pin and serial device driver support 4.Put pictures in local folder 5.Modify README file
1 parent 02c6c92 commit 1731a6c

Some content is hidden

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

48 files changed

+4839
-16215
lines changed
File renamed without changes.
File renamed without changes.
File renamed without changes.

bsp/smartfusion2/CMSIS/startup_arm/low_level_init.c

Lines changed: 0 additions & 44 deletions
This file was deleted.

bsp/smartfusion2/CMSIS/startup_arm/retarget.c

Lines changed: 0 additions & 150 deletions
This file was deleted.
File renamed without changes.

bsp/smartfusion2/README.md

Lines changed: 33 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -2,55 +2,66 @@
22

33
### 1. BSP简介
44

5-
移植 RT-Thread 操作系统到 一款 **FPGA 芯片——M2S010** ,该芯片属于 [Microsemi](https://www.microsemi.com/)(现Microchip)SmartFusion2系列,是一款**智能混合型FPGA**,片上除了 FPGA Fabric 逻辑部分,还包括一个 ARM® Cortex™-M3 内核的 MCU,主频最高 166MHz ,256KB eNVM,64KB eSRAM,集成GPIO、UART、I2C、SPI、CAN、USB等基本外设。
5+
移植 RT-Thread 操作系统到一款 **FPGA 芯片——M2S010** ,该芯片属于 [Microsemi](https://www.microsemi.com/)(现Microchip)SmartFusion2系列,是一款**智能混合型FPGA**,片上除了 FPGA Fabric 逻辑部分,还包括一个 **ARM® Cortex™-M3 内核的 MCU**,主频最高 166MHz ,256KB eNVM,64KB eSRAM,集成GPIO、UART、I2C、SPI、CAN、USB等基本外设。
66

77
> 关于 Microsemi,第三大 FPGA 厂商,原 Actel 半导体,2010 年,Microsemi 收购 Actel,2018 年, Microchip 收购 Microsemi。
88
99
SmartFusion2 内部框图
1010

11-
![](https://wcc-blog.oss-cn-beijing.aliyuncs.com/Libero/RT-Thread/Microsemi_Smartfusion2_BD.jpg)
11+
![Microsemi_Smartfusion2_BD](figures/Microsemi_Smartfusion2_BD.jpg)
1212

13-
### 2. 使用说明
13+
### 2. 外设支持
1414

15-
#### 2.1 FPGA 工程设计
15+
移植了 RT-Thread 内核,支持线程调度、线程间同步和通信等,目前已经完成了PIN、Serial设备驱动,FinSH组件默认使用uart0设备。
1616

17-
FPGA 部分使用 SmartDesign 图形化设计,不需要写 HDL 代码,时钟来自外部 50M 晶体输入,PLL 倍频 100M 提供给 MCU 使用,顶层配置如下图所示:
17+
| **片上外设** | **支持情况** | **备注** |
18+
| :----------------- | :----------: | :------------------------------------- |
19+
| GPIO | 支持 | GPIO_0/1输出,GPIO_2/3输入 |
20+
| UART | 支持 | MMUART0 & MMUART1|
21+
| SPI | 暂不支持 | |
22+
| I2C | 暂不支持 | |
23+
| RTC | 暂不支持 | |
24+
| PWM | 暂不支持 | |
25+
| USB | 暂不支持 | |
26+
27+
### 3. 使用说明
1828

19-
![](https://wcc-blog.oss-cn-beijing.aliyuncs.com/Libero/RT-Thread/2020-06-02_114736.jpg)
29+
#### 3.1 FPGA 工程设计
2030

21-
MSS 部分仅使用到了GPIO 和UART0,其他外设未启用,两个 GPIO 配置成输出模式
31+
FPGA 部分使用 SmartDesign 图形化设计,不需要写 HDL 代码,时钟来自外部 50M 晶体输入,PLL 倍频 100M 提供给 MCU 使用,顶层配置如下图所示
2232

23-
![](https://wcc-blog.oss-cn-beijing.aliyuncs.com/Libero/RT-Thread/2020-06-02_114816.jpg)
33+
![](figures/top_sd.jpg)
2434

25-
配置完成的 FPGA 工程文件下载:[fpga_project.rar](https://wcc-blog.oss-cn-beijing.aliyuncs.com/Libero/RT-Thread/fpga_project.rar)
35+
MSS 部分仅使用到了GPIO 和UART,GPIO_0和GPIO_1配置成输出输出模式用于驱动LED,GPIO_2和GPIO_3配置成输入模式,用于读取按键输入。
2636

27-
#### 2.2 ARM 程序设计
37+
配置完成的 FPGA 工程文件下载:[sf2_fpga_prj.rar](https://wcc-blog.oss-cn-beijing.aliyuncs.com/Libero/RT-Thread/sf2_fpga_prj.rar)
38+
39+
#### 3.2 ARM 程序设计
2840

2941
ARM 程序使用 Keil MDK 5.26 开发,需要安装 M2S 系列芯片支持包:[Microsemi.M2Sxxx.1.0.64.pack](http://www.actel-ip.com/repositories/CMSIS-Pack/Microsemi.M2Sxxx.1.0.64.pack)
3042

3143
如果官网下载失败,可以到以下地址下载:[Microsemi.M2Sxxx.1.0.64.pack](https://wcc-blog.oss-cn-beijing.aliyuncs.com/Libero/RT-Thread/Microsemi.M2Sxxx.1.0.64.pack)
3244

3345
在官方生成的示例工程目录下,添加 RT-Thread 相关组件,并实现一些对接函数,最终的文件结构:
3446

35-
![](https://wcc-blog.oss-cn-beijing.aliyuncs.com/Libero/RT-Thread/2020-06-04_213532.png)
47+
![](figures/files.jpg)
3648

37-
### 3. 下载和运行
49+
### 4. 下载和运行
3850

3951
为了能使用 ARM 调试器连接到 ARM 内核,而不是 FPGA,需要把 JTAG_SEL 引脚置为低电平。使用 ARM 调试器,如 JLink,对应连接 JTAG 口的 TMS、TCK、GND 引脚,如果连接正常,可以检测到 ARM 芯片,如下图所示:
4052

41-
![](https://wcc-blog.oss-cn-beijing.aliyuncs.com/Libero/RT-Thread/2020-06-02_115130.jpg)
53+
![](figures/jlink-ob.jpg)
4254

4355
配置对应的 Flash 编程算法:
4456

45-
![](https://wcc-blog.oss-cn-beijing.aliyuncs.com/Libero/RT-Thread/2020-06-02_115115.jpg)
57+
![](figures/flash.jpg)
4658

4759
下载完成:
4860

49-
![](https://wcc-blog.oss-cn-beijing.aliyuncs.com/Libero/RT-Thread/2020-06-02_115216.jpg)
61+
![](figures/finished.jpg)
5062

5163
如果编译 & 烧写无误,下载完成或者按下复位按键之后,会在串口上看到 RT-Thread 的启动 LOG 信息:
5264

53-
5465
```c
5566
\ | /
5667
- RT - Thread Operating System
@@ -59,34 +70,22 @@ ARM 程序使用 Keil MDK 5.26 开发,需要安装 M2S 系列芯片支持包
5970
msh >
6071
```
6172

62-
![](https://wcc-blog.oss-cn-beijing.aliyuncs.com/Libero/RT-Thread/2020-06-02_115305.jpg)
63-
64-
### 4. 外设支持
65-
66-
目前仅移植了 RT-Thread 内核,支持线程调度、线程间同步和通信等,支持 Finsh 组件,PIN、Serial 等设备驱动将会在以后添加。
67-
68-
### 5. 资料下载
69-
70-
独立的工程文件下载:
71-
72-
- FPGA 工程下载:[fpga_project.rar](https://wcc-blog.oss-cn-beijing.aliyuncs.com/Libero/RT-Thread/fpga_project.rar)
73-
- ARM 工程下载:[smartfusion_rtt-master-4.0.3.rar](https://wcc-blog.oss-cn-beijing.aliyuncs.com/Libero/RT-Thread/smartfusion_rtt-master-4.0.3.rar)
73+
![](figures/log.jpg)
7474

75-
### 6. 注意事项
75+
### 5. 注意事项
7676

7777
- FPGA 开发环境基于 Libero V11.8.2.4,向上兼容,不支持低版本 IDE。
7878
- ARM 开发环境基于 Keil MDK 5.26,如果使用SoftConsole IDE ,需要修改 `libcpu` 内的文件。
7979
- 调试内部 ARM 核,需要把 JTAG_SEL 拉低,否则调试器连接不上。
8080
- 使用 SoftConsole 开发环境可以直接使用官方的 Flash Pro 调试器进行 ARM 程序的调试。
8181
- 内核时钟需要和 FPGA 中 MSS 配置的对应,Libero 自动生成的时钟文件,可以直接替换`bsp\smartfusion2\libraries\sys_config`文件夹下的文件 。
8282

83-
### 7. 参考资料
83+
### 6. 参考资料
8484

8585
- [学习路线 - RT-Thread 文档中心](https://www.rt-thread.org/document/site/)
8686
- [Microsemi Libero系列中文教程](https://blog.csdn.net/whik1194/article/details/102901710)
8787

88-
### 8. 联系我
88+
### 7. 联系我
8989

90-
91-
- 主页:www.wangchaochao.top
92-
- 微信:wcc149
90+
- Github:[whik](https://github.com/whik)
91+
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
#include <rthw.h>
2+
#include <rtthread.h>
3+
#include <rtdevice.h>
4+
5+
#define LED0_PIN 0
6+
#define LED1_PIN 1
7+
#define SW0_PIN 2
8+
#define SW1_PIN 3
9+
10+
extern void sw0_isr(void *args);
11+
extern void sw1_isr(void *args);
12+
13+
int main(void)
14+
{
15+
int count = 1;
16+
17+
rt_pin_attach_irq(SW0_PIN, PIN_IRQ_MODE_RISING, sw0_isr, RT_NULL);
18+
rt_pin_attach_irq(SW1_PIN, PIN_IRQ_MODE_RISING, sw1_isr, RT_NULL);
19+
20+
rt_pin_irq_enable(SW0_PIN, PIN_IRQ_ENABLE);
21+
rt_pin_irq_enable(SW1_PIN, PIN_IRQ_ENABLE);
22+
23+
rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT);
24+
rt_pin_mode(LED1_PIN, PIN_MODE_OUTPUT);
25+
26+
while(count++)
27+
{
28+
rt_pin_write(LED0_PIN, PIN_HIGH);
29+
rt_pin_write(LED1_PIN, PIN_HIGH);
30+
rt_thread_mdelay(100);
31+
32+
rt_pin_write(LED0_PIN, PIN_LOW);
33+
rt_pin_write(LED1_PIN, PIN_LOW);
34+
rt_thread_mdelay(100);
35+
}
36+
37+
return RT_EOK;
38+
}

0 commit comments

Comments
 (0)