原创 【MC3172】第一次与并行线程处理器的约会

2022-10-24 14:28 1830 13 13 分类: MCU/ 嵌入式
  首先感谢面包板社区让我获得了这块MC3172评估板,我是今天早上才拿到板子的。在拿到之前我以为这块板子会像之前ST的那种评估板的尺寸那么大,拿到手后才发现这个板子是如此的精致。
  先来一张板子的正面照。
  
 板子的线程配置工具做的也算是比较友好,很精简,用起来十分的方便
  在这里我一共配置了4个线程,每个线程都为1/8的主频,线程的空间为1024byte。(ps:这里每个线程的频率最大只能为主频的1/4),在配置完后点击生成代码可以得到 thread_config.h 和 MC3172.lds 两个文件。 至此,MC3172 的主要参数已经配置完毕,用户只需要在 main.c 对应的 threadn_main 函数 中实现自己的代码即可。
  接下来谈谈开发工具IDE,MC3172采用的是国产开发环境 MounRiver Studio,在下载这个开发工具之前,我本以为会用起来很拉跨,在使用的过程中你会发现还是比较友好的,个人感觉集成了 STM32CubeIDE与Keil的优点吧, 还有就是无法在线调试板子(可能自己没有配置好的原因吧!)

  由于今天时间不是很多,看了下MC3172_Template提供的example,做了个简单的测评
1、GPIO测试
  首先板子拿到手,按照常规套路,最常见的就是点个led灯,由于我这没有外围的灯,我直接使用示波器进行波形的观察。
我这里点灯使用的是线程3,除此此之外还使能了一个线程1,用来进行串口的收、发实验。因此找到 MC3172_Template\USER_CODE目录下的主函数,将线程3的宏使能即可。
更改线程1函数中的内容,我这里比较懒了,就增加了一句 GPIO_PIN7 在不断的进行反转。GPIO_EXAMPLE(u32 gpio_sel)函数的入口参数是 GPIOX的基地址,我里使用的GPIOA。
将线程补充完整后,需要到main函数进行调用一下
这个时候编译完成后,下到板子里面 就可以看到GPIOA_GPIO_PIN_17引脚上的电平进行反转了。

串口通信配置
在GPIO_GPCOM_TIMER_Example.c文件中,给我提供了串口通信部分的代码,我们主要稍微做下修改就能实现串口数据的自收自发了。这里使用的是GPCOM7,将GPIOB14、GPIOB15分别复用为串口GPCOM7的RX与TX。
  1. void GPCOM_UART_EXAMPLE(u32 gpcom_sel)
  2. {
  3. INTDEV_SET_CLK_RST(gpcom_sel,(INTDEV_RUN|INTDEV_IS_GROUP0|INTDEV_CLK_IS_CORECLK_DIV4));
  4. GPCOM_SET_IN_PORT(gpcom_sel,(GPCOM_RXD_IS_P2));
  5. GPCOM_SET_OUT_PORT(gpcom_sel,( \
  6. GPCOM_P0_OUTPUT_DISABLE|GPCOM_P3_OUTPUT_ENABLE|GPCOM_P2_OUTPUT_DISABLE|GPCOM_P1_OUTPUT_DISABLE| \
  7. GPCOM_P0_IS_HIGH |GPCOM_P3_IS_TXD |GPCOM_P2_IS_HIGH |GPCOM_P1_IS_HIGH \
  8. ));
  9. GPCOM_SET_COM_MODE(gpcom_sel,GPCOM_UART_MODE);
  10. GPCOM_SET_COM_SPEED(gpcom_sel,12000000,115200);
  11. GPCOM_SET_OVERRIDE_GPIO(gpcom_sel, ( \
  12. GPCOM_P2_OVERRIDE_GPIO|GPCOM_P2_INPUT_ENABLE | \
  13. GPCOM_P3_OVERRIDE_GPIO \
  14. ));
  15. #ifdef TEST_ONLY_UART_TX
  16. while(1){
  17. while(GPCOM_TX_FIFO_FULL(gpcom_sel));
  18. for (u32 var = 0; var < 90; ++var) {
  19. NOP();
  20. GPCOM_PUSH_TX_DATA(gpcom_sel,rx_data);
  21. }
  22. //GPCOM_PUSH_TX_DATA(gpcom_sel,0x31);
  23. }
  24. #else
  25. u8 rx_data_rp=0;
  26. u8 rx_data=0;
  27. rx_data_rp=GPCOM_GET_RX_WP(gpcom_sel);
  28. while(1) {
  29. if(rx_data_rp!=(GPCOM_GET_RX_WP(gpcom_sel))){
  30. rx_data=GPCOM_GET_RX_DATA(gpcom_sel,rx_data_rp);
  31. GPCOM_PUSH_TX_DATA(gpcom_sel,rx_data);
  32. rx_data_rp++;
  33. rx_data_rp&=0x0f;
  34. }
  35. }
  36. #endif
  37. }
在main函数线程1中添加改线程,并将GPCOM7的基地址传入即可完成串口使用的初始化

先来一波串口自发自收的波形展示

再来一张 串口调助手的

总结:
  感觉这个国产的单片机在使用、体验方面还是不错的。在开发环境方面有着极简的线程配置工具,操作便捷的IDE开发软件,在硬件外设接口方面有着丰富的外设接口,单片机运行主频高,64个线程同时并行运行,无需进行线程之间的切换,省事了不少。
  还有一个疑问,这些线程与线程之间该怎样进行通信呢?好像在提供的代码里面没有看到信号量、消息队列这些。
  最后希望更多的评测者带来更多评测的作品!

作者: E_ARM, 来源:面包板社区

链接: https://mbb.eet-china.com/blog/uid-me-3989713.html

版权声明:本文为博主原创,未经本人允许,禁止转载!

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
13
关闭 站长推荐上一条 /3 下一条