原创 【MC3172】从freertos到并行处理器的成长

2022-10-26 10:48 1945 11 11 分类: MCU/ 嵌入式 文集: 评测
从今年暑假开始,接触到了freertos的操作系统,打开了多线程世界的大门,正好又碰上了感芯科技这款并行处理器,可以将两者进行对比
这是一款小巧而精致的最小系统板,板子上集成了两路稳压(3.3V,1.8V),48M高速晶振和ch553g芯片,满足芯片的下载,供电以及时钟电路(如果能够在集成一个复位按键和一个电源指示灯就更好了)
1.环境搭建
MC3172使用国产MounRiver Studio 作为开发工具,从地址:http://www.mounriver.com/download 可以下载。
官方还提供了线程配置器,程序烧录器以及配套的模板历程,可以直接导入进编译器。这些资料从地址:http://www.gxchip.cn/down/show-70.html 可以下载。
导入程序后的效果如图1-1所示:
图1-1 导入工程
通过线程配置器完成线程的配置如图1-2所示:
图1-2 完成线程的配置
修改线程内容如图1-3所示:
图1-3修改线程内容
完成编译通过下载烧录工具进行烧录如图1-4所示:
图1-4 烧录工具
2.程序编写测试
本文主要针对该芯片的GPIO,UART和线程之间的切换进行测试
我在线程0中接受串口传回的值,并解析成二进制,点亮或熄灭对应的led灯;在线程1中接收串口的值,并打印出去;在线程3和线程4中同时翻转led,来测试每个线程执行的顺序
  1. int bss_value1;
  2. u16 rx_data;
  3. void delay(u32 time)
  4. {
  5. for (u32 var = 0; var < time; ++var)
  6. {
  7. NOP();
  8. }
  9. }
  10. void gpio_read_val(u32 gpio_sel)
  11. {
  12. INTDEV_SET_CLK_RST(gpio_sel,(INTDEV_RUN|INTDEV_IS_GROUP0|INTDEV_CLK_IS_CORECLK_DIV2));
  13. // GPIO_SET_INPUT_EN_VALUE(gpio_sel,(GPIO_PIN8|GPIO_PIN9|GPIO_PIN10|GPIO_PIN11),GPIO_SET_ENABLE);
  14. GPIO_SET_OUTPUT_EN_VALUE(gpio_sel,(GPIO_PIN0|GPIO_PIN1|GPIO_PIN2|GPIO_PIN3),GPIO_SET_ENABLE);
  15. /*< 完成io初始化 */
  16. GPIO_SET_OUTPUT_PIN_VALUE(gpio_sel,(GPIO_PIN0|GPIO_PIN1|GPIO_PIN2|GPIO_PIN3),(bss_value1));
  17. for (u32 var = 0; var < 5000; ++var);
  18. }
  19. ////////////////////////////////////////////////////////////
  20. void thread_end(void)
  21. {
  22. while(1);
  23. }
  24. ////////////////////////////////////////////////////////////
  25. void thread0_main(void)
  26. {
  27. while(1){
  28. gpio_read_val(GPIOA_BASE_ADDR);
  29. }
  30. thread_end();
  31. }
  32. ////////////////////////////////////////////////////////////
  33. void thread1_main(void)
  34. {
  35. INTDEV_SET_CLK_RST(GPCOM8_BASE_ADDR,(INTDEV_RUN|INTDEV_IS_GROUP0|INTDEV_CLK_IS_CORECLK_DIV4));
  36. GPCOM_SET_IN_PORT(GPCOM8_BASE_ADDR,(GPCOM_RXD_IS_P2)); //设置p2为rxd
  37. GPCOM_SET_OUT_PORT(GPCOM8_BASE_ADDR,( \
  38. GPCOM_P0_OUTPUT_DISABLE|GPCOM_P3_OUTPUT_ENABLE|GPCOM_P2_OUTPUT_DISABLE|GPCOM_P1_OUTPUT_DISABLE| \
  39. GPCOM_P0_IS_HIGH |GPCOM_P3_IS_TXD |GPCOM_P2_IS_HIGH |GPCOM_P1_IS_HIGH \
  40. ));
  41. GPCOM_SET_COM_MODE(GPCOM8_BASE_ADDR,GPCOM_UART_MODE); //设置模式为串口模式
  42. GPCOM_SET_COM_SPEED(GPCOM8_BASE_ADDR,12000000,115200); //设置波特率
  43. GPCOM_SET_OVERRIDE_GPIO(GPCOM8_BASE_ADDR, ( \
  44. GPCOM_P2_OVERRIDE_GPIO|GPCOM_P2_INPUT_ENABLE | \
  45. GPCOM_P3_OVERRIDE_GPIO \
  46. )); //
  47. u8 rx_data_rp=0;
  48. rx_data_rp=GPCOM_GET_RX_WP(GPCOM8_BASE_ADDR);
  49. GPCOM_PUSH_TX_DATA(GPCOM8_BASE_ADDR,rx_data_rp);
  50. while(1){
  51. // user code section
  52. if(rx_data_rp!=(GPCOM_GET_RX_WP(GPCOM8_BASE_ADDR)))
  53. {
  54. bss_value1=GPCOM_GET_RX_DATA(GPCOM8_BASE_ADDR,rx_data_rp);
  55. GPCOM_PUSH_TX_DATA(GPCOM8_BASE_ADDR,bss_value1);
  56. rx_data_rp++;
  57. rx_data_rp &= 0x0f;
  58. }
  59. }
  60. thread_end();
  61. }
  62. ////////////////////////////////////////////////////////////
  63. void thread2_main(void)
  64. {
  65. INTDEV_SET_CLK_RST(GPIOA_BASE_ADDR,(INTDEV_RUN|INTDEV_IS_GROUP0|INTDEV_CLK_IS_CORECLK_DIV2));
  66. GPIO_SET_OUTPUT_EN_VALUE(GPIOA_BASE_ADDR,(GPIO_PIN4),GPIO_SET_ENABLE);
  67. while(1){
  68. //TIMER_COMPARER_EXAMPLE(TIMER2_BASE_ADDR);
  69. //user code section
  70. GPIO_SET_OUTPUT_PIN_INV(GPIOA_BASE_ADDR,(GPIO_PIN4));
  71. delay(5);
  72. }
  73. thread_end();
  74. }
  75. ////////////////////////////////////////////////////////////
  76. void thread3_main(void)
  77. {
  78. INTDEV_SET_CLK_RST(GPIOA_BASE_ADDR,(INTDEV_RUN|INTDEV_IS_GROUP0|INTDEV_CLK_IS_CORECLK_DIV2));
  79. GPIO_SET_OUTPUT_EN_VALUE(GPIOA_BASE_ADDR,(GPIO_PIN6),GPIO_SET_ENABLE);
  80. while(1){
  81. //TIMER_COMPARER_EXAMPLE(TIMER2_BASE_ADDR);
  82. //user code section
  83. GPIO_SET_OUTPUT_PIN_INV(GPIOA_BASE_ADDR,(GPIO_PIN6));
  84. delay(5);
  85. }
  86. thread_end();
  87. }
测试结果如下:
与freertos相比,该芯片可以通过全局变量来进行数据的传递,无需定义队列等操作。
与此同时线程2和线程3在同时翻转电平,经测试线程3会比线程2慢大约100ns,这可能是线程之间转换所导致的延迟。如图所示:
本文主要验证了该芯片的串口,GPIO,多线程切换的功能。因为最近正在调试ad7124芯片,下一步将尝试着用该芯片去控制ad7124进行数据采集。



作者: 文件转输管家, 来源:面包板社区

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

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

文章评论0条评论)

登录后参与讨论
我要评论
0
11
关闭 站长推荐上一条 /2 下一条