我的ARM开发板买了大概又3个月了,之前一直没能用自己写的代码点亮第一个LED,就一直放着,搞其他东西去了。
国庆放长假,前三天就抽空学习了一下模电和数电,昨天有把ARM开发板拿出来准备再试试看。结果郁闷了,弄了一天,
没有一样是成功的,只有开发板附送的那个demo.bin烧进去可以亮,我自己写的就一直不行,什么启动代码的我又搞不懂,
网上大多资料都是针对那个什么ADS的,汇编代码的格式又不一样,拿过来也编译不了。还有那个dnw和dnw2我一个都不行,
我用的是UBUNTU10.04, DNW还能识别我的USB,但是每次都传输到1%就失败了,而DNW2虽然说不用secbulk.ko,但是
根本识别不了我的USB啊,唉,心都碎了。
今天早上起来,打算回到WINDOWS上用那个ADS来试试看。成功是成功了,但是那个ADS老是自动崩溃,速度奇慢,各种复杂
和恶心,这更加坚定了我抛弃WINDOWS的决心了。于是我又回到了LINUX,发现我忽略了一本经典之作《嵌入式LINUX应用开发完全手册》,
于是我拿出来揣摩了以下,发现里面有直接用汇编点亮LED的代码,省去了所谓的启动代码,于是我按着自己的开发板的资料修改了以下,
结果,我震精了,我不蛋定了,我狂呼大叫了,它亮了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
这么高兴的事我一定要写下来:
先说明一下硬件:(我用的是S3C6410)
LED4
LED3
LED2
LED1
GPIO
GPK7
GPK6
GPK5
GPK4
GPKCON0
0X7F008800
GPKDAT
0X7F008808
/* led_on.S */
.text
.global _start
_start:
LDR R0, =0X7f008800 ;把R0设置为GPKCON0的地址
LDR R1, #0X00010000 ;高16位对应GPK7~4,设置为1时表示输出状态,这里把LED1都设置为输出
STR R1, [R0] ;设置GPKCON0,使对应的LED引脚为输出状态
LDR R0, =0X7f008808 ;把R0设置为GPKDAT的地址
LDR R1, #0X000000e0 ;4~7位对应LED1~4,置0的时候LED点亮,这里把LED1点亮
STR R1, [R0] ;点亮LED
MAIN_LOOP:
B MAIN_LOOP ;死循环
/* Makefile */
led_on.bin:led_on.S
arm-linux-gcc -c led_on.S -o led_on.o
arm-linux-ld -Ttext 0x0000000 led_on.o -o led_on.elf
arm-linux-objcopy -O binary -S led_on.elf led_on.bin
clean:
rm -f led_on.bin led_on.elf *.o
好吧,其实就是这么简洁和简单了,我继续研究去了,哈哈