感芯多线程处理器MC3172评估板(一)- 介绍与搭建开发环境 感芯多线程处理器MC3172评估板(二)- 点亮一个LED灯
目录
前言
上一篇文章里介绍了MC3172评估板点亮LED的内容,这一篇将通过编程实现两个IO口来感受多线程同步并行运行的效果。
一、通用输入输出接口(GPIO)
本章节的使用的还是通用输入输出接口(GPIO),详细内容可看上一章节。相关宏定义也同理。
二、相关函数
本次为了使代码简洁,将对IO口初始化和翻转封装为一个函数,方便在线程中调用。代码如下:
void LED_GPIOx_PINx_TEST(u32 gpio_sel,u32 gpio_pin,u8 level)
{
// 启动GPIOx并设置特权组及时钟频率
//(对应的外设|线程组别|外设时钟分频设置)
INTDEV_SET_CLK_RST(gpio_sel,(INTDEV_RUN|INTDEV_IS_GROUP0|INTDEV_CLK_IS_CORECLK_DIV2));
// 使能GPIOx PINx引脚
GPIO_SET_OUTPUT_EN_VALUE(gpio_sel, gpio_pin, GPIO_SET_ENABLE);
switch(level)
{
case 0:GPIO_SET_OUTPUT_PIN_TO_0(gpio_sel, gpio_pin);break;// GPIOx PINx输出0
case 1:GPIO_SET_OUTPUT_PIN_TO_1(gpio_sel, gpio_pin);break;// GPIOx PINx输出1
}
while(1)
{
for(u16 i=0;i<10;i++)
{
for (u32 var = 0; var < 65535; ++var)
{
NOP();
}
}
//输出翻转
GPIO_SET_OUTPUT_PIN_INV(gpio_sel, gpio_pin);
}
}
这个函数是使能某个引脚并输出电平翻转,可实现LED闪烁的功能。
(1)gpio_sel:任意一组GPIO,可以为GPIOA_BASE_ADDR、GPIOB_BASE_ADDR、GPIOC_BASE_ADDR、GPIOD_BASE_ADDR。
(2)gpio_pin:任一引脚。
(3)level:默认引脚的初始电平,0为低电平,1为高电平。
三、主程序代码
在main.c文件中的void thread0_main(void)里编写代码程序如下:
void thread0_main(void)
{
while(1){
LED_GPIOx_PINx_TEST(GPIOC_BASE_ADDR,GPIO_PIN0,0);
}
thread_end();
}
////////////////////////////////////////////////////////////
void thread1_main(void)
{
while(1){
LED_GPIOx_PINx_TEST(GPIOC_BASE_ADDR,GPIO_PIN1,0);
}
thread_end();
}
四、硬件电路
1.MC3172引脚图
五、下载程序
将MC3172评估板通过USB口接到电脑,然后打开Release文件夹下的开发板程序下载_v1.1.exe,这时就会识别出GX_LINK#0设备(也有可能是其它名字),点击连接设备,接着选择生成的*.hex固件,再点击烧录固件,最后等到进度条走到100%则下载成功。
六、实验现象
烧录程序,使用逻辑分析仪抓取GPIOC_PIN0及GPIOC_PIN1引脚电平变化如下:
可见,这两个波形是完全同步的,CPU同时在干两件事情,实现了与RTOS多线程同样的效果。
总结
以上就是通过IO口的输出体验多线程同时并行运行的学习过程记录分享,如果觉得文章有帮助,麻烦帮忙转发,谢谢!