厦门感芯科技MC3172(1):介绍和环境搭建
厦门感芯科技MC3172(1):介绍和环境搭建
文章目录
- 厦门感芯科技MC3172(1):介绍和环境搭建
- 1. MC3172介绍
- 2. MC3172的开发环境
- 2.1 首先安装ide
- 2.2 找到配置mcu资源的软件
- 2.3 找到下载程序软件
- 3. 点亮一个led灯
- 3.1 配置mcu的资源
- 3.2 编写程序
- 3.3 下载
- 3.4 验证
- 吐槽一下
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,竟然连个注释都没有,这对将来推广恐怕非常不利,只能猜。
厦门感芯科技MC3172(1):介绍和环境搭建相关推荐
- 感芯科技MC3172移植U8g2图形库
MC3172移植U8g2单色图形库 简介 MC3172是厦门感芯科技发布的一款单核硬件64线程MCU,此芯片开发上手难度不高,与其他MCU裸机开发相似(可以把每一个线程当作一个MCU来使用)每个线程运 ...
- 【opencv4】opencv视频教程 C++(opencv教程)1、opencv介绍和环境搭建
下一讲:[opencv4]opencv视频教程 C++(opencv教程)2.加载,修改,保存图像 [opencv_C++] 入门强推!!![B站最全] 文章目录 opencv介绍和环境搭建 open ...
- MyBatis-学习笔记01【01.Mybatis课程介绍及环境搭建】
Java后端 学习路线 笔记汇总表[黑马程序员] MyBatis-学习笔记01[01.Mybatis课程介绍及环境搭建][day01] MyBatis-学习笔记02[02.Mybatis入门案例] M ...
- Hadoop学习之整体介绍及环境搭建
Hadoop学习之整体介绍及环境搭建 1 大数据概述 1.1 什么是大数据 数据(data)是事实或观察的结果,是对客观事物的逻辑归纳,是用于表示客观事物的未经加 工的的原始素材. 大数据:传统处理方 ...
- Web应用测试(一)Selenium介绍及环境搭建
Selenium介绍及环境搭建 一.背景介绍: (更好的阅读体验,请移步我的个人博客)软件测试比赛刚刚落下帷幕,在空档期,写写这些天的感受.不知不觉参加了好多次软件测试比赛了,开发者测试,移动应用测试 ...
- phalapi-入门篇1(简单介绍以及环境搭建)
2019独角兽企业重金招聘Python工程师标准>>> #phalapi-入门篇1(简单介绍以及环境搭建)# ##前言## 先在这里感谢phalapi框架创始人@dogstar,为我 ...
- uni-app实战之社区交友APP(1)项目介绍和环境搭建
文章目录 前言 一.项目介绍 二.环境搭建和创建项目 1.开发环境搭建 2.创建uni-app项目 三.多端调试环境搭建 1.安卓手机调试配置 2.iOS真机调试配置 3.微信小程序调试配置 4.支付 ...
- andorid 介绍和 环境搭建
1.1 Android概述 1.1.1 什么是Android Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟 ...
- 关于React-native的介绍以及环境搭建
React-Native介绍(后面内容的RN就是指react-native) 由facebook公司推出的,基于react,能开发原生app 原理: 1. 利用react框架写好js代码 2. 利用p ...
最新文章
- json 反序列化 父子类型_json类序列化与反序列化参考
- C++引用作为函数参数
- RT-Thread工程代码框架分析——(1)启动流程
- 360手机浏览器_360手机浏览器9.0新功能测评
- TexturePacker学习笔记——制作NGUI Atlas
- chechbox 的颜色android,Android 之 CheckBox 详解
- php中浮点数计算问题
- ubuntu mysql ftp_ubuntu上搭建vsftpd且通过mysql来管理FTP账号
- 面试大厂回来,我狠补了一把算法和数据结构
- 深入浅出dev、test、pre、pro四大环境
- 一个动态路由OSPF配置实例(eNSP)
- 关于Hsql无法插入的问题
- 解决tensorflow2.x中使用tf.contrib.slim包时出现的No module named:tensorflow.contrib 问题
- CIKM 2022 | HGANDTI: 药物-靶点相互作用预测的异构图注意网络
- 【ArcGIS微课1000例】0026:ArcGIS10如何自定义工具条?
- 凭证 金蝶_5分钟学会金蝶软件凭证录入!
- 【第2篇】基础数据类型
- 简单一点,利用xpath解析爬取站长素材的图片
- 好用的手机投屏电脑软件
- 【C/C++】char * ,char ** ,char a[ ] ,char *a[]