数码之家

 找回密码
 立即注册
搜索
查看: 1042|回复: 1

[DSP] MC3172开发-点亮LED

[复制链接]
发表于 2022-9-11 12:25:11 | 显示全部楼层 |阅读模式

爱科技、爱创意、爱折腾、爱极致,我们都是技术控

您需要 登录 才可以下载或查看,没有账号?立即注册

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

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-5-28 20:06 , Processed in 0.093600 second(s), 9 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

快速回复 返回顶部 返回列表