1. 程式人生 > >2440 裸機學習 點亮LED

2440 裸機學習 點亮LED

反匯編 一個 執行 mage -o signed ret oba 配置

1。首先需要知道 led 是受哪一個gpio口控制

技術分享圖片

從上圖可以看出,兩個led燈是受GPF4 GPF5控制的,低電平有效。

2、怎麽控制GPF4 GPF5

技術分享圖片

技術分享圖片

技術分享圖片

通過2440的芯片手冊可以看出,需要設置GPF的引腳只需要設置,兩個寄存器就可以了。GPFCON GPFDAT。

  C語言部分:

void delay(volatile int d)//延時函數
{
    while (d--);
}

int led_on(int which)
{
    unsigned int *pGPFCON = (unsigned int *)0x56000050;
    unsigned int *pGPFDAT = (unsigned int
*)0x56000054; if (which == 4) { /* 配置GPF4為輸出引腳 */ *pGPFCON = 0x100; } else if (which == 5) { /* 配置GPF5為輸出引腳 */ *pGPFCON = 0x400; } /* 設置GPF4/5輸出0 */ *pGPFDAT = 0; return 0; }

匯編代碼部分:

.text
.global _start
_start:
ldr sp,=4096
mov r0,#4
bl led_on

ldr r0,
=100000 bl delay mov r0,#5 bl led_on halt: b halt

gcc 交叉編譯部分:

all:
    arm-linux-gcc -c -o led.o led.c //編譯led.c
    arm-linux-gcc -c -o start.o start.S//編譯strat.s
    arm-linux-ld -Ttext 0 start.o led.o -o led.elf//鏈接 兩個文件
    arm-linux-objcopy -O binary -S led.elf led.bin//生成bin文件
    arm-linux-objdump -D led.elf > led.dis//生成反匯編文件
clean:
    rm 
*.bin *.o *.elf *.dis

通過上面三個文件就可以生成 一個.bin文件 然後就執行了。。。。。。

2440 裸機學習 點亮LED