厦门感芯科技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主要几个特点

  1. 内置128K字节SRAM区,用于存放代码和数据。在启动时默认通过两线调试接口被动下载程序与初始数据到SRAM。SRAM可按存放代码和数据需求配置为三种模式(程序是下载到片外flash的,当系统运行,会自动将flash的程序和数据加载到内部sram里面)。
  2. 没有内置的flash,需要外挂在一款spi的flash芯片。
  3. 多达12组可配置通信接口:每一组都可按需配置成USART、 SPI、CAN2.0B 、USB总线形式,具有强大的通信能力。
  4. 通用输入输出接口(GPIO):系统提供了 4 组 GPIO 端口,每组 16 个共 64 个 GPIO 引脚。通过掩码模式,可实现对特定的IO读写
    而不影响其余IO功能,配合100%单周期指令集,可实现对IO的精确时序控制。每个引脚都可以由软件配置成输出(推挽或开漏)、 输入(带或不带上拉或下拉)或复用的外设功能端口。所有的 GPIO 引脚都有大电流通过能力。
  5. 系统时钟源内部RC200Mhz默认开启,在没有配置时钟或者复位后,内部 200MHz 的 RC 振荡器作为默认的 CPU 时 钟,随后可以另外选择外部 4~40MHz 晶振(评估板挂的是48m无源晶振)驱动,8Mhz RC振荡器或者外部直接输入时钟作为内核时钟。
  6. 作为一款多线程实时处理器,可通过软件进行配置,如下图:

产品内置快速可编程线程控制器,支持全部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.cvoid 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,回看我们的程序设置。

  1. 首先我们在配置mcu的时候,选择了外部晶振,而评估版外部晶振默认是48M,这48兆将作为系统时钟.

  2. 然后我们配置线程的时候,选择了4分频,那么现在thread0只有12M了。

  3. 现在我们检测到引脚反转周期是400HZ,那么也就是说明我们程序里面while执行两个循环(引脚高一次,低一次)耗时2.5ms。

  4. while里面的主要逻辑就是计数5000次,反转一次引脚电平,对于这款号称高速io的设备,我认为一次电平反转时间跟5000次循环相比微不足道,所以我们近似认为耗时就是5000次循环。

  5. 两次while耗时2.5ms,那么一次for循环就是2.5ms/(2*5000) = 250ns 。对应频率为4M.

  6. 因为for循环包括数值累加,比较,还有一个时钟的nop空耗,因此12M周期只能让for保持4M循环效果是合理的。

吐槽一下

可能是对于一个刚开始推广的芯片,做的还是有很多不完美的地方:

  • 评估版采用的是Micro USB接口,我感觉采用mini usb或者type-c都强于这个接口,不带线。
  • 评估版没有原理图,只有pcb和引脚图,若是想看一下原理图,只能去看pcb,烦死。
  • 评估版上面连个led都不给,即使写个led的程序,还要外接个示波器去看波形,真抠。
  • 对于初期的芯片,资料不全是很正常的事,但是对于已经写好的demo,竟然连个注释都没有,这对将来推广恐怕非常不利,只能猜。

厦门感芯科技MC3172(1):介绍和环境搭建相关推荐

  1. 感芯科技MC3172移植U8g2图形库

    MC3172移植U8g2单色图形库 简介 MC3172是厦门感芯科技发布的一款单核硬件64线程MCU,此芯片开发上手难度不高,与其他MCU裸机开发相似(可以把每一个线程当作一个MCU来使用)每个线程运 ...

  2. 【opencv4】opencv视频教程 C++(opencv教程)1、opencv介绍和环境搭建

    下一讲:[opencv4]opencv视频教程 C++(opencv教程)2.加载,修改,保存图像 [opencv_C++] 入门强推!!![B站最全] 文章目录 opencv介绍和环境搭建 open ...

  3. MyBatis-学习笔记01【01.Mybatis课程介绍及环境搭建】

    Java后端 学习路线 笔记汇总表[黑马程序员] MyBatis-学习笔记01[01.Mybatis课程介绍及环境搭建][day01] MyBatis-学习笔记02[02.Mybatis入门案例] M ...

  4. Hadoop学习之整体介绍及环境搭建

    Hadoop学习之整体介绍及环境搭建 1 大数据概述 1.1 什么是大数据 数据(data)是事实或观察的结果,是对客观事物的逻辑归纳,是用于表示客观事物的未经加 工的的原始素材. 大数据:传统处理方 ...

  5. Web应用测试(一)Selenium介绍及环境搭建

    Selenium介绍及环境搭建 一.背景介绍: (更好的阅读体验,请移步我的个人博客)软件测试比赛刚刚落下帷幕,在空档期,写写这些天的感受.不知不觉参加了好多次软件测试比赛了,开发者测试,移动应用测试 ...

  6. phalapi-入门篇1(简单介绍以及环境搭建)

    2019独角兽企业重金招聘Python工程师标准>>> #phalapi-入门篇1(简单介绍以及环境搭建)# ##前言## 先在这里感谢phalapi框架创始人@dogstar,为我 ...

  7. uni-app实战之社区交友APP(1)项目介绍和环境搭建

    文章目录 前言 一.项目介绍 二.环境搭建和创建项目 1.开发环境搭建 2.创建uni-app项目 三.多端调试环境搭建 1.安卓手机调试配置 2.iOS真机调试配置 3.微信小程序调试配置 4.支付 ...

  8. andorid 介绍和 环境搭建

    1.1 Android概述 1.1.1 什么是Android Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟 ...

  9. 关于React-native的介绍以及环境搭建

    React-Native介绍(后面内容的RN就是指react-native) 由facebook公司推出的,基于react,能开发原生app 原理: 1. 利用react框架写好js代码 2. 利用p ...

最新文章

  1. json 反序列化 父子类型_json类序列化与反序列化参考
  2. C++引用作为函数参数
  3. RT-Thread工程代码框架分析——(1)启动流程
  4. 360手机浏览器_360手机浏览器9.0新功能测评
  5. TexturePacker学习笔记——制作NGUI Atlas
  6. chechbox 的颜色android,Android 之 CheckBox 详解
  7. php中浮点数计算问题
  8. ubuntu mysql ftp_ubuntu上搭建vsftpd且通过mysql来管理FTP账号
  9. 面试大厂回来,我狠补了一把算法和数据结构
  10. 深入浅出dev、test、pre、pro四大环境
  11. 一个动态路由OSPF配置实例(eNSP)
  12. 关于Hsql无法插入的问题
  13. 解决tensorflow2.x中使用tf.contrib.slim包时出现的No module named:tensorflow.contrib 问题
  14. CIKM 2022 | HGANDTI: 药物-靶点相互作用预测的异构图注意网络
  15. 【ArcGIS微课1000例】0026:ArcGIS10如何自定义工具条?
  16. 凭证 金蝶_5分钟学会金蝶软件凭证录入!
  17. 【第2篇】基础数据类型
  18. 简单一点,利用xpath解析爬取站长素材的图片
  19. 好用的手机投屏电脑软件
  20. 【C/C++】char * ,char ** ,char a[ ] ,char *a[]

热门文章

  1. 图像处理——孔洞填充算法
  2. rosbag包目标片段截取
  3. 关于网狐棋牌的数据库
  4. 中国电子学会2021年03月份青少年软件编程Scratch图形化等级考试试卷四级真题(含答案)
  5. 怎么微信WeixinJSBridge.invoke支付成功居然不跳转?还把我页面给关了!这篇文章就告诉你What should I do!
  6. iconfont与雪碧图的优缺点
  7. 计算机二进制m g t关系,计算机中容量单位B、KB、MB、GB和TB的关系
  8. 促销活动的2个环节与7个关键点
  9. 模拟炒股服务器响应错误,模拟炒股常见问题
  10. C++ 菱形字母金字塔