主題 : smart210 7寸 S70 LCD裸機程序 復制鏈接 | 瀏覽器收藏 | 打印
級別: 新手上路
UID: 98696
精華: 1
發帖: 22
金錢: 160 兩
威望: 32 點
貢獻值: 1 點
綜合積分: 64 分
注冊時間: 2013-12-04
最后登錄: 2015-04-22
樓主  發表于: 2013-12-21 22:11

 smart210 7寸 S70 LCD裸機程序

管理提醒: 本帖被 xoom 執行加亮操作(2013-12-22)
#define GPF0CON   (*(volatile unsigned long *)0xE0200120)
#define GPF1CON   (*(volatile unsigned long *)0xE0200140)
#define GPF2CON   (*(volatile unsigned long *)0xE0200160)
#define GPF3CON   (*(volatile unsigned long *)0xE0200180)
#define GPD0CON   (*(volatile unsigned long *)0xE02000A0)
#define GPD0DAT   (*(volatile unsigned long *)0xE02000A4)
#define CLK_SRC1  (*(volatile unsigned long *)0xe0100204)
#define CLK_DIV1  (*(volatile unsigned long *)0xe0100304)
#define DISPLAY_CONTROL (*(volatile unsigned long *)0xe0107008)
#define VIDCON0   (*(volatile unsigned long *)0xF8000000)
#define VIDCON1   (*(volatile unsigned long *)0xF8000004)
#define VIDTCON2  (*(volatile unsigned long *)0xF8000018)
#define WINCON0   (*(volatile unsigned long *)0xF8000020)
#define WINCON2   (*(volatile unsigned long *)0xF8000028)
#define SHADOWCON   (*(volatile unsigned long *)0xF8000034)
#define VIDOSD0A   (*(volatile unsigned long *)0xF8000040)
#define VIDOSD0B   (*(volatile unsigned long *)0xF8000044)
#define VIDOSD0C   (*(volatile unsigned long *)0xF8000048)
#define VIDW00ADD0B0  (*(volatile unsigned long *)0xF80000A0)
#define VIDW00ADD1B0  (*(volatile unsigned long *)0xF80000D0)
#define VIDTCON0   (*(volatile unsigned long *)0xF8000010)
#define VIDTCON1   (*(volatile unsigned long *)0xF8000014)
//這是根據屏參數修改的        七寸S70
#define HSPW    (0)
#define HBPD   (46 - 1)
#define HFPD    (210 - 1)
#define VSPW   (0)
#define VBPD    (23 - 1)
#define VFPD    (22 - 1)

// FB地址
#define FB_ADDR   (0x23000000)
#define ROW    (480)
#define COL    (800)
#define HOZVAL   (COL-1)
#define LINEVAL   (ROW-1)

// 初始化LCD
void lcd_init(void)
{
 // 配置引腳用于LCD功能
 GPF0CON = 0x22222222;
 GPF1CON = 0x22222222;
 GPF2CON = 0x22222222;
 GPF3CON = 0x22222222;
 // 打開背光
 GPD0CON &= ~(0xf<<4);
 GPD0CON |= (1<<4);
 GPD0DAT |= (1<<1);
 // 10: RGB=FIMD I80=FIMD ITU=FIMD
 DISPLAY_CONTROL = 2<<0;
 // bit[26~28]:使用RGB接口
 // bit[18]:RGB 并行
 // bit[2]:選擇時鐘源為HCLK_DSYS=166MHz
 VIDCON0 &= ~( (3<<26)|(1<<18)|(1<<2) );
 // bit[1]:使能lcd控制器
 // bit[0]:當前幀結束后使能lcd控制器
 VIDCON0 |= ( (1<<0)|(1<<1) );
 // bit[6]:選擇需要分頻
 // bit[6~13]:分頻系數為15,即VCLK = 166M/(14+1) = 11M
 VIDCON0 |= 14<<6 | 1<<4;

 // H43-HSD043I9W1.pdf(p13) 時序圖:VSYNC和HSYNC都是低脈沖
 // s5pv210芯片手冊(p1207) 時序圖:VSYNC和HSYNC都是高脈沖有效,所以需要反轉
 VIDCON1 |= 1<<5 | 1<<6;
  //   VIDCON1 & =0 <<5 | 0<<6;
 // 設置時序
 VIDTCON0 = VBPD<<16 | VFPD<<8 | VSPW<<0;
 VIDTCON1 = HBPD<<16 | HFPD<<8 | HSPW<<0;
 // 設置長寬
 VIDTCON2 = (LINEVAL << 11) | (HOZVAL << 0);
 // 設置windows1
 // bit[0]:使能
 // bit[2~5]:24bpp
 WINCON0 |= 1<<0;
 WINCON0 &= ~(0xf << 2);
 WINCON0 |= (0xB<<2) | (1<<15);
#define LeftTopX     0
#define LeftTopY     0
//還有這里
#define RightBotX   799
#define RightBotY   479

 // 設置windows1的上下左右
 VIDOSD0A = (LeftTopX<<11) | (LeftTopY << 0);
 VIDOSD0B = (RightBotX<<11) | (RightBotY << 0);
 VIDOSD0C = (LINEVAL + 1) * (HOZVAL + 1);

 // 設置fb的地址
 VIDW00ADD0B0 = FB_ADDR;
 VIDW00ADD1B0 = (((HOZVAL + 1)*4 + 0) * (LINEVAL + 1)) & (0xffffff);
 // 使能channel 0傳輸數據
 SHADOWCON = 0x1;
}

// 描點
void lcd_draw_pixel(int row, int col, int color)
{
 unsigned long * pixel = (unsigned long  *)FB_ADDR;
 *(pixel + row * COL + col) = color;
}
// 清屏
void lcd_clear_screen(int color)
{
 int i, j;
 for (i = 0; i < ROW; i++)
  for (j = 0; j < COL; j++)
   lcd_draw_pixel(i, j, color);
}
// 劃橫線
void lcd_draw_hline(int row, int col1, int col2, int color)
{
 int j;
 // 描第row行,第j列
 for (j = col1; j <= col2; j++)
  lcd_draw_pixel(row, j, color);
}
// 劃豎線
void lcd_draw_vline(int col, int row1, int row2, int color)
{
 int i;
 // 描第i行,第col列
 for (i = row1; i <= row2; i++)
  lcd_draw_pixel(i, col, color);
}
// 劃十字
void lcd_draw_cross(int row, int col, int halflen, int color)
{
 lcd_draw_hline(row, col-halflen, col+halflen, color);
 lcd_draw_vline(col, row-halflen, row+halflen, color);
}
級別: 俠客
UID: 81596
精華: 0
發帖: 61
金錢: 310 兩
威望: 62 點
貢獻值: 0 點
綜合積分: 122 分
注冊時間: 2012-11-11
最后登錄: 2016-12-26
1樓  發表于: 2013-12-23 00:29
使用這種void lcd_clear_screen(int color) 效率不是一般的慢 有沒有好一點優化方案?
并且我把這個移植到了kangear大神的UBOOT上已經成功顯示字符,但發現黑色背景屏有閃,為什么SUPERBOOT下的沒閃呢?
  
[ 此帖被windsun在2013-12-23 00:58重新編輯 ]
級別: 新手上路
UID: 98696
精華: 1
發帖: 22
金錢: 160 兩
威望: 32 點
貢獻值: 1 點
綜合積分: 64 分
注冊時間: 2013-12-04
最后登錄: 2015-04-22
2樓  發表于: 2014-01-07 22:29

 回 1樓(windsun) 的帖子

學生黨,最近忙考試,沒到論壇看看。我還沒找到更好的方案。你呢?有什么高見?
級別: 俠客
UID: 81596
精華: 0
發帖: 61
金錢: 310 兩
威望: 62 點
貢獻值: 0 點
綜合積分: 122 分
注冊時間: 2012-11-11
最后登錄: 2016-12-26
3樓  發表于: 2014-01-07 23:08
我把UBOOT里的MEMCPY方法移過來了,效果會有三次卡。還是不太理想。
級別: 新手上路
UID: 57066
精華: 0
發帖: 37
金錢: 185 兩
威望: 37 點
貢獻值: 0 點
綜合積分: 74 分
注冊時間: 2011-10-18
最后登錄: 2018-07-04
4樓  發表于: 2014-06-11 09:24
估計是PWM那里沒有弄好
級別: 新手上路
UID: 11305
精華: 0
發帖: 17
金錢: 85 兩
威望: 17 點
貢獻值: 0 點
綜合積分: 34 分
注冊時間: 2009-12-03
最后登錄: 2017-09-13
5樓  發表于: 2014-07-15 14:31
您好,我想知道你修改的那幾個時序參數值是怎么計算出來的?麻煩指點一下,謝謝!
級別: 新手上路
UID: 71749
精華: 0
發帖: 21
金錢: 105 兩
威望: 21 點
貢獻值: 0 點
綜合積分: 42 分
注冊時間: 2012-06-10
最后登錄: 2016-11-25
6樓  發表于: 2014-07-17 15:10
對比了datasheet設置了,發現您的參數里沒有修改工作頻率的值

// bit[6~13]:分頻系數為15,即VCLK = 166M/(14+1) = 11M
VIDCON0 |= 14<<6 | 1<<4;

4.3寸屏的時候DCLK freq從 5~12M  典型值9M

但7寸屏DCLK freq應是從 26.4~46.8M,典型值33.3M
所以按理說分頻系數是要修改的,但我修改后測試發現,當設置VCLK為33.3MHZ的時候反而顯示不正確了,是我對這個參數理解有誤么,datasheet里的DCLK freq不是等于這里分頻出來的VCLK么?
級別: 新手上路
UID: 95089
精華: 0
發帖: 15
金錢: 75 兩
威望: 15 點
貢獻值: 0 點
綜合積分: 30 分
注冊時間: 2013-08-02
最后登錄: 2014-07-20
7樓  發表于: 2014-07-20 21:06
級別: 新手上路
UID: 105563
精華: 0
發帖: 6
金錢: 30 兩
威望: 6 點
貢獻值: 0 點
綜合積分: 12 分
注冊時間: 2014-06-27
最后登錄: 2014-09-18
8樓  發表于: 2014-08-08 14:55
LCD循環顯示兩張不一樣的圖片,更新圖片的時候會卡,請教有解決辦法嗎?
級別: 新手上路
UID: 107619
精華: 0
發帖: 3
金錢: 15 兩
威望: 3 點
貢獻值: 0 點
綜合積分: 6 分
注冊時間: 2014-08-30
最后登錄: 2014-11-10
9樓  發表于: 2014-09-06 21:45
您好,我是小白,我想問一下編寫裸機程序需要那幾個軟件哈
鸟叔电子游戏 四川金7乐app官方下载 股票涨跌情况 dnf用那个传说合赚钱吗 喜乐彩历史开奖号码查询 36棋牌手机版官方下载 时时彩开奖图表分析 股票涨跌由什么决定 11选5江西看号规律 湖北11选5选号技巧 无限极有卡怎么赚钱 20173d历史记录 如何破解赌博app 17124抓规律 手机赌钱app棋牌游戏 这期福彩开奖号码是什么 青鹏棋牌充值