终于点亮ARM的第一个LED了。。。

2019-04-13 11:23发布

我的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
好吧,其实就是这么简洁和简单了,我继续研究去了,哈哈偷笑