IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 厦门感芯科技MC3172(1):介绍和环境搭建 -> 正文阅读

[嵌入式]厦门感芯科技MC3172(1):介绍和环境搭建

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

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,竟然连个注释都没有,这对将来推广恐怕非常不利,只能猜。
  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-08-06 11:00:44  更:2022-08-06 11:03:22 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 16:59:22-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计