【感芯科技MC3172开发板体验】测评感芯科技MC3172开发板 - RISC-V MCU技术社区 - 电子技术william hill官网 - 广受欢迎的专业电子william hill官网 - 威廉希尔官方网站
分享 收藏 返回

[文章]

【感芯科技MC3172开发板体验】测评感芯科技MC3172开发板

开箱感芯科技MC3172开发板并给大家做测评了,后面有技术资料哦!

快递包装做的很到位,一个较大的包装盒,里面基本全是塑料气泡袋,保护的很好,打开气泡袋里面就是一个小巧可爱的塑料盒,也就是我们今天的主角感芯科技MC3172开发板。
微信图片_20230525111452.jpg

微信图片_20230525111446.jpg

微信图片_20230525111458.jpg

微信图片_20230525111436.jpg

开发板背面主芯片
微信图片_20230525111432.jpg

随感芯科技MC3172开发板发的说明书。
微信图片_20230525111442.jpg

微信图片_20230525111440.jpg

厦门感芯科技的MC3172芯片,具有硬件[多线程]实现的功能,可以摆脱单片机那种[RTOS]的线程调度问题,不用考虑资源占用问题。在一定程序上,可以代替功能简单的FPGA,具有了完全并行的处理能力。

相关资料可在感芯官网下载。链接:

http://www.gxchip.cn/

MC3172 特性:

这款芯片有两个特别的地方:

1,并行多线程,有点大家理解;

2,12个通信接口可配置。

开发板很简单,基本上引出了所有的IO,上图。
微信图片_20230525111326.jpg

开发板自带下载器,软件开发软件使用的是

官方资料合集:1. MC3172芯片资料合集稳定版 - - - 厦门感芯科技有限公司

开源仓库:https://gitee.com/gxchip1.

工程模板:https://gitee.com/gxchip/mc3172_template2.

CMAKE工程:https://github.com/dreamcmi/MC3172-CMake

开发工具:1. MRS:http://www.mounriver.com/download

安装完软件后,开始干活,先做个测试GPIO功能吧。

测试GPIO功能

目前此款芯片还处于研发初期,外设较少,所以这里简单的进行演示。

将GPIO_GPCOM_TIMER_Example.c文件中的GPIO操作进行复制,稍作改变,实现一个对GPIO的读取和输出。

代码如下:

// gpio测试,gpio_sel为任意一个gpio组,其值在MC3172.h中定义

void GPIO_TEST(u32 gpio_sel)

{

// 使能对应的时钟

INTDEV_SET_CLK_RST(gpio_sel,(INTDEV_RUN|INTDEV_IS_GROUP0|INTDEV_CLK_IS_CORECLK_DIV2));


// 设置pin7为输出,pin11为输入
GPIO_SET_OUTPUT_EN_VALUE(gpio_sel,(GPIO_PIN7),GPIO_SET_ENABLE);
GPIO_SET_INPUT_EN_VALUE(gpio_sel,(GPIO_PIN11),GPIO_SET_ENABLE);

// 这里先输出高电平看一下现象
GPIO_SET_OUTPUT_PIN_TO_1(gpio_sel,(GPIO_PIN7));

while(1)  {
// 读取这组的GPIO电平值
u16 rx_data;
rx_data=GPIO_GET_INPUT_VALUE_SAFE(gpio_sel);

// 延时
for (u32 var = 0; var < 5000; ++var) {
NOP();
}

// 判断pin11引脚电平高低,如果高电平,则PIN7输出高电平;反之,输出低电平
if(rx_data & (1<<11))
{
GPIO_SET_OUTPUT_PIN_TO_1(gpio_sel,(GPIO_PIN7));
}
else
{
GPIO_SET_OUTPUT_PIN_TO_0(gpio_sel,(GPIO_PIN7));
}

// 延时
for (u32 var = 0; var < 5000; ++var) {
NOP();
}


}

}

// 在线程中调用这个“任务”

void thread0_main(void)

{

while(1){

GPIO_TEST(GPIOD_BASE_ADDR);

}

thread_end();

}

实验现象: PIN7跟随PIN11的电平高低进行变化。

3.2 uart测试

同理,对uart进行测试,

代码如下:

// 此函数是将对应GPCOM口的P2作为RX,P3作为TX;具体选择那个GPCOM口,可以在头文件中定位

void GPCOM_UART_EXAMPLE(u32 gpcom_sel)

{

INTDEV_SET_CLK_RST(gpcom_sel,(INTDEV_RUN|INTDEV_IS_GROUP0|INTDEV_CLK_IS_CORECLK_DIV4));


GPCOM_SET_IN_PORT(gpcom_sel,(GPCOM_RXD_IS_P2));
GPCOM_SET_OUT_PORT(gpcom_sel,( \\
GPCOM_P0_OUTPUT_DISABLE|GPCOM_P3_OUTPUT_ENABLE|GPCOM_P2_OUTPUT_DISABLE|GPCOM_P1_OUTPUT_DISABLE| \\
GPCOM_P0_IS_HIGH       |GPCOM_P3_IS_TXD       |GPCOM_P2_IS_HIGH       |GPCOM_P1_IS_HIGH \\
));

GPCOM_SET_COM_MODE(gpcom_sel,GPCOM_UART_MODE);

// 设置波特率为115200
GPCOM_SET_COM_SPEED(gpcom_sel,12000000,115200);

GPCOM_SET_OVERRIDE_GPIO(gpcom_sel, ( \\
GPCOM_P2_OVERRIDE_GPIO|GPCOM_P2_INPUT_ENABLE | \\
GPCOM_P3_OVERRIDE_GPIO \\
));

#ifdef TEST_ONLY_UART_TX

// 如果定义了这个宏,会一直输出0x31

while(1){

while(GPCOM_TX_FIFO_FULL(gpcom_sel));

for (u32 var = 0; var < 90; ++var) {

NOP();

}

GPCOM_PUSH_TX_DATA(gpcom_sel,0x31);

}

#else

// 默认是这部分逻辑,即输入什么,就输出什么,类似回环测试。

u8 rx_data_rp=0;

u8 rx_data=0;

rx_data_rp=GPCOM_GET_RX_WP(gpcom_sel);

while(1) {

if(rx_data_rp!=(GPCOM_GET_RX_WP(gpcom_sel))){

rx_data=GPCOM_GET_RX_DATA(gpcom_sel,rx_data_rp);

GPCOM_PUSH_TX_DATA(gpcom_sel,rx_data);

rx_data_rp++;

rx_data_rp&=0x0f;

}

}

#endif

}

// 注意:这里是thread1,thread0可以保持不动,相当于有2个任务在执行!

void thread1_main(void)

{

while(1){

GPCOM_UART_EXAMPLE(GPCOM4_BASE_ADDR); // 选择PB2,PB3,可看手册或者下图所示;

}

thread_end();

}

下图可以看出,将GPCOM4的基地址写入,就是PB2,PB3;当然也可以按照需求进行更改(这里的GPCOM可以选择任意功能):

3.3 体验多线程并行

一种很简单的方法,就是再来一组GPIO进行3.1的测试,如果按照以前单片机的开发模式,在线程1死等时,是无法执行其他线程的,这里就可以进行实现:

代码如下:

// 只添加这部分

void thread2_main(void)

{

while(1){

// 添加PA7,PA11作为另一个测试,然后将PA11和PD11进行短接,然后拉低拉高即可

GPIO_TEST(GPIOA_BASE_ADDR);

}

thread_end();

}

芯片如果价格下来,是可以完败大部分现在的MCU的。

它更容易进行任务级别的应用开发,因而不用考虑多线程之间的调度问题,MC3172开发板也值得大家抽时间多多了解和关注。

更多回帖

×
发帖