linux-tq2440
生活随笔
收集整理的這篇文章主要介紹了
linux-tq2440
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
cpp]?view plaincopy ?? //?文件名 key_led.c?? //?功能:?? //?當不按任何鍵時,LED2,3,4三個燈流水點亮.?? //?當按下任何一個按鍵時,對應的LED燈點亮,其他的熄滅.?? //?? //?GPB5,?GPB6,?GPB7,?GPB8?---?LED1,?LED2,?LED3,?LED4?? #define?GPBCON??????(*(volatile?unsigned?long?*)0x56000010)?? #define?GPBDAT??????(*(volatile?unsigned?long?*)0x56000014)?? ?? #define?GPB5_msk????(3<<(5*2))?? #define?GPB6_msk????(3<<(6*2))?? #define?GPB7_msk????(3<<(7*2))?? #define?GPB8_msk????(3<<(8*2))?? ?? #define?GPB5_out????(1<<(5*2))?? #define?GPB6_out????(1<<(6*2))?? #define?GPB7_out????(1<<(7*2))?? #define?GPB8_out????(1<<(8*2))?? ?? //?GPF1,?GPF4,?GPF2,?GPF0?---?K1,?K2,?K3,?K4?? #define?GPFCON??????(*(volatile?unsigned?long?*)0x56000050)?? #define?GPFDAT??????(*(volatile?unsigned?long?*)0x56000054)?? ?? #define?GPF1_msk????(3<<(1*2))?? #define?GPF4_msk????(3<<(4*2))?? #define?GPF2_msk????(3<<(2*2))?? #define?GPF0_msk????(3<<(0*2))?? ?? #define?GPF1_in?????(0<<(1*2))?? #define?GPF4_in?????(0<<(4*2))?? #define?GPF2_in?????(0<<(2*2))?? #define?GPF0_in?????(0<<(0*2))?? ?? void??wait(volatile?unsigned?long?dly)?? {?? ????for(;?dly?>?0;?dly--);?? }?? ?? int?main(void)?? {?? ????unsigned?long?i?=?0;?? ?????? ????GPBCON?&=?~(GPB5_msk?|?GPB6_msk?|?GPB7_msk?|?GPB8_msk);?? ????GPBCON?|=?GPB5_out?|?GPB6_out?|?GPB7_out?|?GPB8_out;????????//?將LED1,2,3,4對應的GPB5/6/7/8三個引腳設為輸出?? ?????? ????GPFCON?&=?~(GPF1_msk?|?GPF4_msk?|?GPF2_msk?|?GPF0_msk);?? ????GPFCON?|=?GPF1_in?|?GPF4_in?|?GPF2_in?|?GPF0_in;????????????//?將K1,2,3,4對應的GPF1/4/2/0三個引腳設為輸入?? ?????? ????while(1)?? ????{?? ????????if((GPFDAT&(1<<1))?==?0)?//?K1?? ????????{?? ????????????GPBDAT?|=?((1<<5)|(1<<6)|(1<<7)|(1<<8));????//?全熄滅?? ????????????GPBDAT?&=?~(1<<5);?? ????????}?? ????????else?if((GPFDAT&(1<<4))?==?0)?//?K2?? ????????{?? ????????????GPBDAT?|=?((1<<5)|(1<<6)|(1<<7)|(1<<8));????//?全熄滅?? ????????????GPBDAT?&=?~(1<<6);?? ????????}?? ????????else?if((GPFDAT&(1<<2))?==?0)?//?K3?? ????????{?? ????????????GPBDAT?|=?((1<<5)|(1<<6)|(1<<7)|(1<<8));????//?全熄滅?? ????????????GPBDAT?&=?~(1<<7);?? ????????}?? ????????else?if((GPFDAT&(1<<0))?==?0)?//?K4?? ????????{?? ????????????GPBDAT?|=?((1<<5)|(1<<6)|(1<<7)|(1<<8));????//?全熄滅?? ????????????GPBDAT?&=?~(1<<8);?? ????????}?? ????????else?? ????????{?? ????????????wait(30000*30);?? ?????????????? ????????????GPBDAT?|=?((1<<5)|(1<<6)|(1<<7)|(1<<8));????//?全熄滅?? ????????????GPBDAT?&=?~(1<<(6+i));????????????????????????//?將對應位置0,?點亮?? ?????????????? ????????????i++;?? ????????????if(i?>?2)?? ????????????{?? ????????????????i?=?0;?? ????????????}?? ????????}?? ????}?? ?????? ????return?0;?? }??
@******************************************************************************?? @?File:crt0.S?? @?功能:通過它轉入C程序?? @******************************************************************************????????? ?? .text?? .global?_start?? _start:?? ????????????ldr?????r0,?=0x53000000?????@?WATCHDOG寄存器地址?? ????????????mov?????r1,?#0x0??????????????????????? ????????????str???r1,?[r0]??????????????@?寫入0,禁止WATCHDOG,否則CPU會不斷重啟?? ?????????????? ????????????ldr?????sp,?=1024*4?????????@?設置堆棧,注意:不能大于4k,?因為現在可用的內存只有4K?? ????????????????????????????????????????@?nand?flash中的代碼在復位后會移到內部ram中,此ram只有4K?? ????????????bl??????main????????????????@?調用C程序中的main函數?? halt_loop:?? ????????????b???????halt_loop??
#?文件名:?Makefile?? ?? CFLAGS??:=?-Wall?-Wstrict-prototypes?-O2?-fomit-frame-pointer?-ffreestanding?-nostdlib?? key_led.bin?:?crt0.S??key_led.c?? ????arm-linux-gcc?$(CFLAGS)?-c?-o?crt0.o?crt0.S?? ????arm-linux-gcc?$(CFLAGS)?-c?-o?key_led.o?key_led.c?? ????arm-linux-ld?-Ttext?0x0000000?crt0.o?key_led.o?-o?key_led_elf?? #???arm-linux-ld?-Tleds.lds??crt0.o?key_led.o?-o?key_led_elf?? ????arm-linux-objcopy?-O?binary?-S?key_led_elf?key_led.bin?? ????arm-linux-objdump?-D?-m?arm??key_led_elf?>?key_led.dis?? clean:?? ????rm?-f???key_led.dis?key_led.bin?key_led_elf?*.o?? ? ?
?
?
總結
以上是生活随笔為你收集整理的linux-tq2440的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux 下 select 函数的用
- 下一篇: c memcpy 与 strcpy