当前位置:网站首页>厦门感芯科技MC3172(1):介绍和环境搭建
厦门感芯科技MC3172(1):介绍和环境搭建
2022-07-30 04:09:00 【Little Grey Bear】
厦门感芯科技MC3172(1):介绍和环境搭建
文章目录
1. MC3172介绍
MC3172 是厦门感芯科技的一款32 位 RISC并行多线程实时处理器。采用一种全新的CPU工作模式与软件开发模式,不同于单线程裸机编程,只能顺序执行,也不同于操作系统通过切换造成的多线程执行,并行多线程的各个线程是一直在并行运行的,彼此互不打扰,没有优先级的概念,也没有切换的随机性。
相关资料可在感芯官网下载:链接。
MC3172主要几个特点:
- 内置128K字节SRAM区,用于存放代码和数据。在启动时默认通过两线调试接口被动下载程序与初始数据到SRAM。SRAM可按存放代码和数据需求配置为三种模式(程序是下载到片外flash的,当系统运行,会自动将flash的程序和数据加载到内部sram里面)。
- 没有内置的flash,需要外挂在一款spi的flash芯片。
- 多达12组可配置通信接口:每一组都可按需配置成USART、 SPI、CAN2.0B 、USB总线形式,具有强大的通信能力。
- 通用输入输出接口(GPIO):系统提供了 4 组 GPIO 端口,每组 16 个共 64 个 GPIO 引脚。通过掩码模式,可实现对特定的IO读写
而不影响其余IO功能,配合100%单周期指令集,可实现对IO的精确时序控制。每个引脚都可以由软件配置成输出(推挽或开漏)、 输入(带或不带上拉或下拉)或复用的外设功能端口。所有的 GPIO 引脚都有大电流通过能力。 - 系统时钟源内部RC200Mhz默认开启,在没有配置时钟或者复位后,内部 200MHz 的 RC 振荡器作为默认的 CPU 时 钟,随后可以另外选择外部 4~40MHz 晶振(评估板挂的是48m无源晶振)驱动,8Mhz RC振荡器或者外部直接输入时钟作为内核时钟。
- 作为一款多线程实时处理器,可通过软件进行配置,如下图:

产品内置快速可编程线程控制器,支持全部64个线程运行频率设置,记内核时钟速度为 C Mhz,则每16个线程为一组共4个线程组,每个线程组固定分配四分之一主频资源,每个线程组内部的16个线程可按需配置,举例如下:
假设内核主频为128MHz,则每个线程组分配的主频为32Mhz,则线程组内的16个线程共享该32Mhz主频资源,可配置为如下几种典型设置(只是举例说明,不是必须配置为这些设置,可按实际需求灵活配置)。
- 设置1:线程0独占32Mhz主频,其余线程(1-15)不工作。
- 设置2:全部线程(0-15)平分32Mhz主频,每个线程分配2Mhz运行主频。
- 设置3:线程(0-3)平分32Mhz主频,每个线程分配8Mhz运行主频,其余线程(4-15)不工作。
- 设置4:线程0分配16Mhz主频,线程1分配8Mhz主频,线程2分配4Mhz主频,其余线程(3-15)每个线程分配(4/16)Mhz运行主频。
- 设置5:线程0分配16Mhz主频,线程1分配8Mhz主频,线程2分配4Mhz主频,线程3分配2Mhz主频,线程4分配1Mhz主频,线程5分配0.5Mhz主频,线程6分配0.5Mhz主频,其余线程(7-15)不工作。
这样一个具有特色的mcu,我当然想尝试一下,于是我第一时间申请了评估版,两天后,评估版到手:

2. MC3172的开发环境
在官网下载ide和MC3172资料合集包。
MC3172的开发环境使用的是国产软件MounRiver Studio,其官网地址:http://www.mounriver.com/,很多risc-v芯片都是用此开发工具,如沁恒的mcu。
MC3172资料合集位于http://www.gxchip.cn/down/show-70.html,点击资源下载,既可以下载到MC3172资料合集包。
2.1 首先安装ide
点击下载后的软件->安装,安装后启动界面如下:
点击load project/solution,选择我们的项目工程,工程在官网下载的MC3172资料合集_V1.03文件里面MC3172资料合集_V1.03\MC3172_Template,打开后如下:
官网提供的所有的demo程序都位于GPIO_GPCOM_TIMER_Example.c这个文件内,我们的移植也将参考这部分内容。
2.2 找到配置mcu资源的软件
在官网下载的MC3172资料合集_V1.03文件里面有一个芯片配置软件线程配置工具_V1.exe,位于MC3172资料合集_V1.03\MC3172_Template\MC3172目录,这个软件的相应代码已经开源,开源地址:https://gitee.com/gxchip。
2.3 找到下载程序软件
到现在为止,MC3172还不支持直接从ide下载程序,其实也变相说明了也不支持调试。下载必须借助下载工具来实现。
在官网下载的MC3172资料合集_V1.03文件里面有一个芯片程序下载软件开发板程序下载_V1.exe,位于MC3172资料合集_V1.03\MC3172_Template\Release目录,这个软件的相应代码已经开源,开源地址:https://gitee.com/gxchip。
3. 点亮一个led灯
上面我们已经准备好了MC3172的开发环境,下面我们就设计一个demo程序,让它跑起来。
学单片机,第一个程序自然是点灯,下面我们就具体操作一下,来熟悉mcu的完整配置过程。
3.1 配置mcu的资源
首先要注意,不要随意更改MC3172资料合集包里面文件的的位置。
打开线程配置工具_V1.exe软件,在里面配置如下:
点击生成代码,当你设置了SRAM的分配,工程的文件MC3172.lds就会自动更新,当你设置了线程分配thread_config.h就会自动更新。
注意:这个时钟源选择要注意了,系统时钟源内部RC 200Mhz默认开启,在没有配置时钟或者复位后,内部 200MHz 的 RC 振荡器作为默认的 CPU 时 钟,随后可以另外选择外部 4~40MHz 晶振(评估板挂的是48m无源晶振)驱动,8MhzRC振荡器或者外部直接输入时钟作为内核时钟。也就是这里的设置将来会直接作为内核时钟。
3.2 编写程序
用ide打开工程,我们可以先参照一下GPIO_GPCOM_TIMER_Example.c这个文件内的程序代码:
//当main.c
GPIO_EXAMPLE(GPIOA_BASE_ADDR);
//GPIO_GPCOM_TIMER_Example.c
void GPIO_EXAMPLE(u32 gpio_sel)
{
//使能了GPIOA的时钟(运行|线程组别|外设时钟分频设置)
//这个外设时钟分频设置我想了好长时间,猜测是设置gpio_sel这个外设时钟的,而时钟来源应该是内核的主频,跟现在所处的线程时钟没有任何关系。不要和配置资源的时候那个时钟弄混。
INTDEV_SET_CLK_RST(gpio_sel,(INTDEV_RUN|INTDEV_IS_GROUP0|INTDEV_CLK_IS_CORECLK_DIV2));
//PA0-PA7配置为输出
GPIO_SET_OUTPUT_EN_VALUE(gpio_sel,(GPIO_PIN_7_0),GPIO_SET_ENABLE);
//PA8-PA15配置为输入
GPIO_SET_INPUT_EN_VALUE(gpio_sel,(GPIO_PIN_15_8),GPIO_SET_ENABLE);
//置输出高电平
GPIO_SET_OUTPUT_PIN_TO_1(gpio_sel,(GPIO_PIN0|GPIO_PIN1|GPIO_PIN2|GPIO_PIN3));
//置输出低电平
GPIO_SET_OUTPUT_PIN_TO_0(gpio_sel,(GPIO_PIN4|GPIO_PIN5|GPIO_PIN6|GPIO_PIN7));
while(1){
//引脚电平反转
GPIO_SET_OUTPUT_PIN_INV(gpio_sel,(GPIO_PIN0|GPIO_PIN2));
u16 rx_data;
//获取GPIOA的全部电平
rx_data=GPIO_GET_INPUT_VALUE_SAFE(gpio_sel);
//设置gpio的值
GPIO_SET_OUTPUT_PIN_VALUE(gpio_sel,(GPIO_PIN4|GPIO_PIN5|GPIO_PIN6|GPIO_PIN7),(rx_data>>4));
for (u32 var = 0; var < 5000; ++var) {
NOP();
}
}
}
按照上面的内容,在main.c的void thread0_main(void)里面编写程序如下:
void thread0_main(void)
{
//使能了GPIOA的时钟
INTDEV_SET_CLK_RST(GPIOA_BASE_ADDR,(INTDEV_RUN|INTDEV_IS_GROUP0|INTDEV_CLK_IS_CORECLK_DIV2));
//将PA0设置为输出模式
GPIO_SET_OUTPUT_EN_VALUE(GPIOA_BASE_ADDR,(GPIO_PIN0),GPIO_SET_ENABLE);
//配置默认输出为高电平
GPIO_SET_OUTPUT_PIN_TO_1(GPIOA_BASE_ADDR,GPIO_PIN0);
while(1) {
//引脚取反
GPIO_SET_OUTPUT_PIN_INV(GPIOA_BASE_ADDR,GPIO_PIN0);
//延时
for (u32 var = 0; var < 5000; ++var) {
NOP();
}
}
thread_end();
}
3.3 下载
先将评估版接到电脑上面,打开开发板程序下载_V1.exe,这个时候将会识别出一个设备,点击连接设备,选择MC3172.hex固件,点击烧录固件,进度条走到100%,则下载完成
3.4 验证
对照引脚图:
将PA0接到示波器上看到波形如下:
从图我们可以看到波形的周期为2.5ms,即对应周期为400hz,回看我们的程序设置。
首先我们在配置mcu的时候,选择了外部晶振,而评估版外部晶振默认是48M,这48兆将作为系统时钟.
然后我们配置线程的时候,选择了4分频,那么现在thread0只有12M了。
现在我们检测到引脚反转周期是400HZ,那么也就是说明我们程序里面while执行两个循环(引脚高一次,低一次)耗时2.5ms。
while里面的主要逻辑就是计数5000次,反转一次引脚电平,对于这款号称高速io的设备,我认为一次电平反转时间跟5000次循环相比微不足道,所以我们近似认为耗时就是5000次循环。
两次while耗时2.5ms,那么一次for循环就是2.5ms/(2*5000) = 250ns 。对应频率为4M.
因为for循环包括数值累加,比较,还有一个时钟的nop空耗,因此12M周期只能让for保持4M循环效果是合理的。
吐槽一下
可能是对于一个刚开始推广的芯片,做的还是有很多不完美的地方:
- 评估版采用的是Micro USB接口,我感觉采用mini usb或者type-c都强于这个接口,不带线。
- 评估版没有原理图,只有pcb和引脚图,若是想看一下原理图,只能去看pcb,烦死。
- 评估版上面连个led都不给,即使写个led的程序,还要外接个示波器去看波形,真抠。
- 对于初期的芯片,资料不全是很正常的事,但是对于已经写好的demo,竟然连个注释都没有,这对将来推广恐怕非常不利,只能猜。
边栏推荐
- WEB penetration of information collection
- Pytorch framework to study record 6 - the torch. Nn. The Module and the torch nn. Functional. The use of conv2d
- [Switch] Protocol-Oriented Programming in Swift: Introduction
- 运行时间监控:如何确保网络设备运行时间
- cv2.polylines
- Pytorch framework learning record 5 - the use of DataLoader
- Tcp编程
- How does the Snapdragon 7 series chip perform?Reno8 Pro proves a new generation of God U
- LeetCode 114. Expand Binary Tree into Linked List (One Question Three Eats)
- sqlmap use tutorial Daquan command Daquan (graphics)
猜你喜欢

Summary of Rpc and gRpc Introduction

WEB penetration of information collection

Go书籍大全-从初级到高级以及Web开发

对均匀采样信号进行重采样

小程序毕设作品之微信二手交易小程序毕业设计成品(2)小程序功能

Redis server启动后会做哪些操作?

小程序毕设作品之微信积分商城小程序毕业设计成品(1)开发概要

When the EasyNVR platform is cascaded to the EasyCVR, why can't the video be played after a while?

Is the end of the universe a bank?Talk about those things about doing software testing in the bank

宇宙的尽头是银行?聊聊在银行做软件测试的那些事
随机推荐
海外多家权威媒体热议波场TRON:为互联网去中心化奠定基础
【转】Swift 中的面向协议编程:引言
Is the end of the universe a bank?Talk about those things about doing software testing in the bank
Wechat second-hand transaction small program graduation design finished product (1) Development overview
day10--install mysql on linux
[Node accesses MongoDB database]
Based on all volunteers - H and D1 XR806 rare plant monitoring device
Drools (7): WorkBench
How does the Snapdragon 7 series chip perform?Reno8 Pro proves a new generation of God U
Pytorch framework learning record 2 - the use of TensorBoard
Flutter record learning different animation (2)
FreeRTOS Personal Notes - Memory Management
[The Mystery of Cloud Native] Cloud Native Background && Definition && Detailed explanation of related technologies?
The curl command to get the network IP
The difference between forward and redirect
Forum management system
flutter 记录学习不一样的动画(二)
骁龙7系芯片表现如何?Reno8 Pro佐证新一代神U
QT(39)-vs开发qt程序提示无法打开源文件
cv2.polylines