废话不说,直接上代码:

  lcd.c

 1 #include "lcd.h"
 2 
 3 static int PEN_COLOR = LCD_RED;     /* 定义画笔(前景)颜色 */
 4 static int BK_COLOR  = LCD_BLACK;   /* 定义背景颜色 */
 5 
 6 /**
 7  * \brief LCD初始化
 8  */
 9 void lcd_init (void)
10 {
11     GPICON = 0;
12     GPICON |= 0xaaaaaaaa;
13     GPJCON = 0;
14     GPJCON |= 0xaaaaaa;
15 
16     MIFPCON &= ~(0x1<<3);
17     SPCON &= ~0x3;
18     SPCON |= 0x1;
19 
20     VIDCON0 = (14<<6) | (0x1<<4) | (0x3);
21     VIDCON1 = (0x1<<6) | (0x1<<5);
22 
23     VIDTCON0 = (1<<16) | (1<<8) | (9);
24     VIDTCON1 = (1<<16) | (1<<8) | (40);
25 
26     VIDTCON2 = ((LCD_HEIGHT - 1) << 11) | (LCD_WIDTH - 1);
27     WINCON0 = (0xb<<2) | (0x1);
28 
29     VIDOSD0A = 0;
30     VIDOSD0B = ((LCD_WIDTH - 1) << 11) | ((LCD_HEIGHT - 1));
31 
32     VIDOSD0C = LCD_WIDTH * LCD_HEIGHT;
33 
34     VIDW00ADD0B0 = SHOW_BUF;
35 }
36 
37 /**
38  * \brief 设置画笔颜色
39  */
40 void set_pen_color (int color)
41 {
42     PEN_COLOR = color;
43 }
44 
45 /**
46  * \brief 设置背景颜色
47  */
48 void set_bk_color (int color)
49 {
50     BK_COLOR = color;
51 }
52 
53 /**
54  * \brief 绘制一个点
55  */
56 void lcd_draw_point (int x, int y)
57 {
58     *((int *)SHOW_BUF + x + y * LCD_WIDTH) = PEN_COLOR;
59 }
60 
61 void lcd_draw_bk (int x, int y)
62 {
63     *((int *)SHOW_BUF + x + y * LCD_WIDTH) = BK_COLOR;
64 }
65 
66 /**
67  * \brief 清屏(填充背景色)
68  */
69 void lcd_clean (void)
70 {
71     int i, j, k;
72     for(i=0; i<LCD_HEIGHT; i++) {
73         for(j=0; j<LCD_WIDTH; j++) {
74             lcd_draw_bk(j, i);
75         }
76     }
77 }

  lcd.h

 1 #ifndef __LCD_H
 2 #define __LCD_H
 3 
 4 /* 定义寄存器地址 */
 5 #define GPICON  (*(unsigned int *)0x7F008100)
 6 #define SPCON   (*(unsigned int *)0x7F0081A0)
 7 #define MIFPCON (*(unsigned int *)0x7410800c)
 8 #define GPJCON  (*(unsigned int *)0x7F008120)
 9 
10 #define VIDCON0       (*(unsigned int *)0x77100000) 
11 #define VIDCON1       (*(unsigned int *)0x77100004) 
12 #define VIDCON2       (*(unsigned int *)0x77100008) 
13 #define VIDTCON0      (*(unsigned int *)0x77100010) 
14 #define VIDTCON1      (*(unsigned int *)0x77100014) 
15 #define VIDTCON2      (*(unsigned int *)0x77100018) 
16 #define WINCON0       (*(unsigned int *)0x77100020) 
17 #define WINCON1       (*(unsigned int *)0x77100024) 
18 #define WINCON2       (*(unsigned int *)0x77100028) 
19 #define WINCON3       (*(unsigned int *)0x7710002C) 
20 #define WINCON4       (*(unsigned int *)0x77100030) 
21 #define VIDOSD0A      (*(unsigned int *)0x77100040) 
22 #define VIDOSD0B      (*(unsigned int *)0x77100044) 
23 #define VIDOSD0C      (*(unsigned int *)0x77100048) 
24 #define VIDOSD1A      (*(unsigned int *)0x77100050) 
25 #define VIDOSD1B      (*(unsigned int *)0x77100054) 
26 #define VIDOSD1C      (*(unsigned int *)0x77100058) 
27 #define VIDW00ADD0B0  (*(unsigned int *)0x771000A0)
28 #define GPECON        (*(unsigned int *)0x7f008080)
29 #define GPEDAT        (*(unsigned int *)0x7f008084)
30 
31 #define LCD_WIDTH   480     /* 定义LCD宽度 */
32 #define LCD_HEIGHT  272     /* 定义LCD高度 */
33 
34 /* 定义显存地址 */
35 #define SHOW_BUF 0x54000000
36 
37 /* 定义常用颜色 */
38 #define COL(R,G,B)   ((R<<16) | (G<<8) | (B))
39 #define LCD_RED          COL(0xFF, 0, 0)
40 #define LCD_GREEN     COL(0, 0xFF, 0)
41 #define LCD_BLUE      COL(0, 0, 0xFF)
42 #define LCD_WHITE     COL(0xFF, 0xFF, 0xFF)
43 #define LCD_BLACK     COL(0, 0, 0)
44 
45 /******************************* 函数声明 **************************/
46 /**
47  * \brief LCD初始化
48  */
49 extern void lcd_init (void);
50 
51 /**
52  * \brief 设置画笔颜色
53  */
54 extern void set_pen_color (int color);
55 
56 /**
57  * \brief 设置背景颜色
58  */
59 extern void set_bk_color (int color);
60 
61 /**
62  * \brief 绘制一个点
63  */
64 extern void lcd_draw_point (int x, int y);
65 
66 /**
67  * \brief 清屏(填充背景色)
68  */
69 extern void lcd_clean (void);
70 
71 #endif

  main.c

1 #include "lcd.h"
2 
3 int main(int argc, const char *argv[])
4 {
5     lcd_init();
6     set_bk_color(LCD_RED);
7     lcd_clean();
8     return 0;
9 }

  start.s

1 .section .text
2 .global _start
3 
4 _start:
5     b main
6     .end

 Makefile

 1 CC = arm-none-linux-gnueabi-
 2 objs = main.o lcd.o start.o
 3 
 4 test.bin:$(objs)
 5     $(CC)ld $(objs) -Ttext 50008000 -o test.elf
 6     $(CC)objcopy -O binary test.elf test.bin
 7 
 8 %.o:%.c
 9     $(CC)gcc -c $< -o $@
10 
11 %.o:%.s
12     $(CC)gcc -c $< -o $@
13 
14 clean:
15     rm *.o *.elf *.bin