|
爱科技、爱创意、爱折腾、爱极致,我们都是技术控
您需要 登录 才可以下载或查看,没有账号?立即注册
x
一,配置线程
上期文章介绍了如何获取工程模板,这起在工程模板的基础上开始配置线程资源。
我采用64k+64k的存储器分配,内部高速RC,并分配了三个线程资源,均配置为1/512频率和128B栈空间。
生成代码之后将产生的两个文件覆盖掉工程中的对应文件。
二,编写程序
对三个线程主程序都写了一样的内容,唯一区别就是翻转的IO不同和延迟时间不同。三个线程分别反转了GPIO0,GPIO2,GPIO4。
////////////////////////////////////////////////////////////
void thread0_main(void)
{ //配置IO组
INTDEV_SET_CLK_RST(GPIOA_BASE_ADDR,(INTDEV_RUN|INTDEV_IS_GROUP0|INTDEV_CLK_IS_CORECLK_DIV2));
//使能PA2
GPIO_SET_OUTPUT_EN_VALUE(GPIOA_BASE_ADDR,GPIO_PIN2,GPIO_SET_ENABLE);
while(1){
//user code section
//GPIO_EXAMPLE(GPIOA_BASE_ADDR);
GPIO_SET_OUTPUT_PIN_TO_1(GPIOA_BASE_ADDR,GPIO_PIN2);
for (u32 var = 0; var < 1000; ++var) {
NOP();
}
GPIO_SET_OUTPUT_PIN_TO_0(GPIOA_BASE_ADDR,GPIO_PIN2);
for (u32 var = 0; var < 1000; ++var) {
NOP();
}
}
thread_end();
}
////////////////////////////////////////////////////////////
void thread1_main(void)
{ //配置IO组
INTDEV_SET_CLK_RST(GPIOA_BASE_ADDR,(INTDEV_RUN|INTDEV_IS_GROUP0|INTDEV_CLK_IS_CORECLK_DIV2));
//使能PA2
GPIO_SET_OUTPUT_EN_VALUE(GPIOA_BASE_ADDR,GPIO_PIN0,GPIO_SET_ENABLE);
while(1){
//user code section
//GPIO_EXAMPLE(GPIOA_BASE_ADDR);
GPIO_SET_OUTPUT_PIN_TO_1(GPIOA_BASE_ADDR,GPIO_PIN0);
for (u32 var = 0; var < 2000; ++var) {
NOP();
}
GPIO_SET_OUTPUT_PIN_TO_0(GPIOA_BASE_ADDR,GPIO_PIN0);
for (u32 var = 0; var < 2000; ++var) {
NOP();
}
}
thread_end();
}
////////////////////////////////////////////////////////////
void thread2_main(void)
{//配置IO组
INTDEV_SET_CLK_RST(GPIOA_BASE_ADDR,(INTDEV_RUN|INTDEV_IS_GROUP0|INTDEV_CLK_IS_CORECLK_DIV2));
//使能PA2
GPIO_SET_OUTPUT_EN_VALUE(GPIOA_BASE_ADDR,GPIO_PIN4,GPIO_SET_ENABLE);
while(1){
//user code section
//GPIO_EXAMPLE(GPIOA_BASE_ADDR);
GPIO_SET_OUTPUT_PIN_TO_1(GPIOA_BASE_ADDR,GPIO_PIN4);
for (u32 var = 0; var < 6000; ++var) {
NOP();
}
GPIO_SET_OUTPUT_PIN_TO_0(GPIOA_BASE_ADDR,GPIO_PIN4);
for (u32 var = 0; var < 6000; ++var) {
NOP();
}
}
thread_end();
}
对代码中的函数进行解释。
//对宏定义函数解释
//对外设控制寄存器进行配置
INTDEV_SET_CLK_RST(DEV_ADDR,value);
//例如
//GPIOA_BASE_ADDR表示对GPIOA组进行配置,INTDEV_RUN为使能该外设,INTDEV_IS_GROUP0为外设特权组0,INTDEV_CLK_IS_CORECLK_DIV2为外设时钟2分频.
INTDEV_SET_CLK_RST(GPIOA_BASE_ADDR(INTDEV_RUN|INTDEV_IS_GROUP0|INTDEV_CLK_IS_CORECLK_DIV2));
//////////////////////////////////////////////////////////////
//对GPIOx_xx进行使能
GPIO_SET_OUTPUT_EN_VALUE(GPIO_SEL,mask,value);
//例如
//GPIOA_BASE_ADDR为GPIOA组,GPIO_PIN2为该组的PIN2,GPIO_SET_ENABLE为使能,如此就将GPIOA2使能。
GPIO_SET_OUTPUT_EN_VALUE(GPIOA_BASE_ADDR,GPIO_PIN2,GPIO_SET_ENABLE);
//////////////////////////////////////////////////////////////
//对某一IO设置输出高电平
GPIO_SET_OUTPUT_PIN_TO_1(GPIO_SEL,value) ;
//对某一IO设置输出低电平
GPIO_SET_OUTPUT_PIN_TO_0(GPIO_SEL,value) ;
//例如
//将PA2输出高电平
GPIO_SET_OUTPUT_PIN_TO_1(GPIOA_BASE_ADDR,GPIO_PIN2);
//将PA2输出低电平
GPIO_SET_OUTPUT_PIN_TO_0(GPIOA_BASE_ADDR,GPIO_PIN2);
三,烧录
编译成功后打开烧录下载程序,将核心板连接到电脑上,进行烧录即可,此处不展开描述。
s,效果展示
可见我对PA0,PA2,PA4设置的延迟时间是不同的,虽然没有严格采取延迟时间,但还是可以看到三个led闪烁频率是明显不同的。
链接:Mc3172的led闪烁测试 作者:小作和小作与小作 https://www.bilibili.com/read/cv18435923 出处:bilibili
|
|