韦东山Linux嵌入式课程社区
直播中

郭金

7年用户 144经验值
私信 关注

为什么我的MMU实验中灯是熄灭的?

本人照着视频做了MMU试验,发现灯没有闪烁起来,是熄灭的。用的板子是TQ2440,leds.c内容简单修改如下,其他文件内容都没有变的,高手帮看看问题处在哪里?
#define GPBCON      (*(volatile unsigned long *)0xA0000010)     // 物理地址0x56000010
#define GPBDAT      (*(volatile unsigned long *)0xA0000014)     // 物理地址0x56000014

#define        GPB5_out        (1<<(5*2))
#define        GPB6_out        (1<<(6*2))
#define        GPB7_out        (1<<(7*2))
#define        GPB8_out        (1<<(8*2))

/*
* wait函数加上“static inline”是有原因的,
* 这样可以使得编译leds.c时,wait嵌入main中,编译结果中只有main一个函数。
* 于是在连接时,main函数的地址就是由连接文件指定的运行时装载地址。
* 而连接文件mmu.lds中,指定了leds.o的运行时装载地址为0xB4004000,
* 这样,head.S中的“ldr pc, =0xB4004000”就是跳去执行main函数。
*/
static inline void wait(volatile unsigned long dly)
{
    for(; dly > 0; dly--);
}

int main(void)
{
        unsigned long i = 0;
        
        GPBCON = GPB5_out|GPB6_out|GPB7_out|GPB8_out;                // 将LED1,2,4对应的GPF4/5/6三个引脚设为输出

        while(1){
                wait(3000000);
                GPBDAT = (~(i<<5));                 // 根据i的值,点亮LED1,2,4
                if(++i == 16)
                        i = 0;
        }

        return 0;
}

回帖(3)

王秀兰

2019-8-8 09:48:09
得把全部程序贴出来,才行。这样看不出来。
举报

蔡彦壁

2019-8-8 09:58:24
你确定下led连接的IO口和程序中的是否一致。
而且这个延时是不是有点长啊?
举报

王凯

2019-8-8 10:11:37
问题应该不是出在这个程序里,不知道你解决了没有,我这个实验也没有成功
举报

更多回帖

发帖
×
20
完善资料,
赚取积分