野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10041|回复: 1

新手求助野火霸道核心板的开关灯问题

[复制链接]
发表于 2020-1-5 18:12:03 | 显示全部楼层 |阅读模式
本帖最后由 老光头 于 2020-1-5 18:13 编辑

int main(void)
{
    *(unsigned int *)0x40021018=0x00000008; //开时钟
    *(unsigned int *)0x40010c00=0x44444441; //pb0推挽输出模式
    *(unsigned int *)0x40010c0c=0x00000000;//开灯
    int x=0;
    while(x<100)
    {
        *(unsigned int *)0x40010c0c =0xffffffff;//关灯
        x++;//如果把这句注释后灯就关不掉了
    }
    while(1);
}

//以上是野火霸道核心板上运行,当把x++那一句注释后,while循环就变成了无限循环,灯就关不掉了,不知道为什么,大家帮我看看,谢谢!
回复

使用道具 举报

 楼主| 发表于 2020-1-6 19:53:23 | 显示全部楼层
该问题已解决,对端口地址的操作得加上volatile以防止编译器优化。写了一段两个按键控制两个led灯的代码,仅供参考。
int main(void)
{
    *(volatile unsigned int *)0x40021018=0x0000001c; //开时钟
    *(volatile unsigned int *)0x40010c00=0x44444411; //PB0推挽输出模式
    *(volatile unsigned int *)0x40010c0c=0xffffffff;//关灯
    *(volatile unsigned int *)0x40010800=0x44444444;//a口输入模式
    *(volatile unsigned int *)0x40011000=0x44444444;//c口输入模式
    while(1)
    {
        if (*(volatile unsigned int *)0x40010808 & 0x0001) //按键1按下(PA0)
        *(volatile unsigned int *)0x40010c0c &=0xfffffffe;//开PB0口led
        else
        *(volatile unsigned int *)0x40010c0c |=0x00000001;//关PB0口led

        if (*(volatile unsigned int *)0x40011008 & 0x2000)//按键2按下
        *(volatile unsigned int *)0x40010c0c &=0xfffffffd;//开PB1口led
        else
        *(volatile unsigned int *)0x40010c0c |=0x00000002;//关PB1口led
    }
}
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-5-4 17:42 , Processed in 0.025765 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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