LED照明S3C2440

LED動作原理はCPUピンGPIO、概略を表示するために必要とされるGPIO特定の操作に接続されています。GPIOは、LEDオフ、対応するビットを設定すると高く、ローレベルにコントラストをLED出力に対応するモードを設定し、そしてGPIO照明に対応するビットをセット

東山JZ2440、例えば、回路図に魏:

3が見出力状態にそれぞれGPF4、GPF5、GPF6を導くことができる、ハンドブックチップを参照してください。

 

 

そのGPFCONレジスタアドレス0x56000050、GPFDATそれぞれ構成GPF6 8-9,10-12,12-13ビットに対応する、アドレス0x56000054、GPF4、GP5レジスタ、6つの連続ビットに設定される、これらの必要性は010101を設定することができGPF4-6は0、1、オフを点灯し、制御ビットGPFDAT 4-6、出力モードに設定します。

次のコードは、コンパイルされました:

1  .GLOBALの_start
 2  
3。 _start:
4      //ウォッチドッグを閉じ
 。5      LDR R0 0x53000000 =、の
 6      LDR R1、= 0 
7。     STR R1、[R0の]
 8。    //スタックを初期化し
9のMOV SP、#4096。
10 BLメイン

 

Cコード:

  1 #define GPFCON  (*(volatile unsigned int *) 0x56000050)
  2 #define GPFDAT  (*(volatile unsigned int *) 0x56000054)
  3 
  4 
  5 void delay()
  6 {
  7     volatile int d = 100000;
  8     while(d--);
  9 }
 10 
 11 void led_all_off()
 12 {
 13     GPFDAT |= (7 << 4); 
 14 }
 15 
 16 void led_all_on()
 17 {
 18     
 19     GPFDAT &= ~(7 << 4);
 20 }
 21 
 22 
 23 void led_light_one(int index)
 24 {
 25     GPFDAT &= ~(1 << (4 + index));
 26 }
 27 
 28 void led_off_one(int index)
 29 {
 30     GPFDAT |= (1 << (4 + index));
 31 }
 32 
 33 void config_gpio()
 34 {
 35     //清0
 36     GPFCON    &= ~ ((3 << 8) | (3 << 10)    | (3 << 12));
 37     //设置1
 38     GPFCON    |= ((1 << 8) | (1    << 10)    | (1 << 12));
 39 }
 40 
 41 void horse_left()
 42 {
 43     int i;
 44     for(i =0; i < 3;i ++)
 45     {
 46         led_light_one(i);
 47         delay();
 48         led_off_one(i);
 49         
 50     }
 51 }
 52 
 53 void horse_right()
 54 {
 55     int i;
 56     for(i =3; i >= 0;i --)
 57     {
 58         led_light_one(i);
 59         delay();
 60         led_off_one(i);
 61     }
 62 }
 63 
 64 void horse_race()
 65 {
 66     int i;
 67     for(i =0 ; i < 3;i ++)
 68     {
 69         horse_left();
 70         horse_right();
 71     }
 72 } 
 73 
 74 
 75 void twinkle()
 76 {
 77     int i;
 78     led_all_off();
 79     for(i =0 ; i < 3;i ++)
 80     {
 81         led_all_on();
 82         delay();
 83         led_all_off();
 84         delay();
 85     }
 86 }
 87 
 88 void one_by_one_on()
 89 {
 90     int i;
 91     for(i =0; i < 3;i ++)
 92     {
 93         led_light_one(i);
 94         delay();
 95     }
 96 }
 97 
 98 void one_by_one_off()
 99 {
100     int i;
101     for(i =3; i >= 0;i --)
102     {
103         led_off_one(i);
104         delay();
105     }
106 }
107 void one_by_one()
108 {
109     int i;
110     led_all_off();
111     for(i =0 ; i < 3;i ++)
112     {
113         one_by_one_on();
114         one_by_one_off();
115     }
116 }
117 
118 int main()
119 {
120     config_gpio();
121     while(1)
122     {
123         twinkle();
124         horse_race();
125         one_by_one();
126     }
127     
128     return 0;
129 }

Makefile

all:
	arm-linux-gcc -O3 -c -o led.o led.S 
	arm-linux-gcc -O3 -c -o main.o main.c
	arm-linux-ld -Ttext 0 led.o main.o -o led.elf
	arm-linux-objcopy -O binary -S led.elf led.bin 

clean:
	rm led.o led.ef led.bin -rf

 

此代码实现了3个led同时闪烁,流水灯。

 

おすすめ

転載: www.cnblogs.com/mcran/p/10975376.html