Download presentation
Presentation is loading. Please wait.
Published byMatthew Stephens Modified 5年之前
1
第四章 基于S3C44B0X嵌入式系统 应用开发 4.1 基于S3C44B0X的S3CEV40介绍 4.2 S3C44B0X处理器介绍
4.3 存储控制器功能及应用开发 4.4 I/O端口功能及应用开发 4.5 中断控制器功能及应用开发 4.6 UART接口功能及应用开发 4.7 时钟管理器功能及应用开发 4.8 RTC功能及应用开发 4.9 看门狗定时器功能及应用开发 4.10 LCD控制器功能及应用开发 4.11 启动程序设计 S3C44B0X
2
4.1 基于S3C44B0的S3CEV40开发介绍 功能框图
3
4.2 S3C44B0X处理器介绍
4
4.3 存储控制器功能及应用开发 4.3.1 存储控制器概述 4.3.2 存储器空间划分简述 4.3.3 存储控制器相关功能引脚描述
存储控制器概述 存储器空间划分简述 存储控制器相关功能引脚描述 存储控制器的特殊功能寄存器 存储器应用编程
5
4.3.1 S3C44B0X存储控制器概述 特点:多级存储器 层次: 寄存器组 片上RAM 片上Cache 主存储器 硬盘 寄存器组
√ 寄存器组 片上Cache 主存储器 √ √ ARM层次 S3C44B0X层次
6
ARM状态下寄存器组织 堆栈指针 程序状态寄存器 程序链接寄存器
7
CPSR
8
Thumb状态下寄存器组织
9
S3C44B0X存储器空间划分简述
11
4.3.3 存储控制器相关功能引脚描述 ENDIAN引脚 选择大/小端模式 OM[1:0]引脚 选择Bank0(nGCS0)总线宽度
存储控制器相关功能引脚描述 ENDIAN引脚 选择大/小端模式 0 小端 1 大端 上电复位时 OM[1:0]引脚 选择Bank0(nGCS0)总线宽度 地址线连接 依据数据宽度而定
12
4.3.4 存储控制器的特殊功能寄存器 1. 总线宽度/等待控制寄存器(BWSCON) 2. Bank控制寄存器(BANKCONn)
存储控制器的特殊功能寄存器 1. 总线宽度/等待控制寄存器(BWSCON) 2. Bank控制寄存器(BANKCONn) 3. DRAM/SDRAM刷新控制寄存器(REFRESH) 4. Bank大小寄存器(BANKSIZE) 5. Bank6、7模式设置寄存器(MRSR)
13
4.3.5 存储器应用编程 .global sRWramtest .equ RWBase, 0x0C030000 sRWramtest:
存储器应用编程 .global sRWramtest .equ RWBase, 0x0C030000 sRWramtest: LDR r2,=RWBase LDR r3,=0x66CC55AA STR r3,[r2] LDR r3,[r2] ADD r3,r3,#1 LDR r2,=RWBase LDRH r3,[r2] ADD r3,r3,#1 STRH r3,[r2],#2 STRH r3,[r2] LDR r2, =RWBase LDRB r3, [r2] LDRB r3, =0xDD STRB r3, [r2], # LDRB r3, =0xBB STRB r3, [r2], #1 LDRB r3, =0x22 LDRB r3, =0x11 STRB r3, [r2] MOV pc, lr
14
举例:扩一个1M*16b的FLASH用于装载程序等
1. 收集资料,选择芯片 2. 上网查找SST39VF160芯片资料( 3. 查看芯片资料(datasheet) 4. 画出硬件联接图(手册p4~p5) 5. 写出程序 ①查看读写时序图(p11) ②找出对应参数表(p10) ③分析时序要求,配置相应特殊功能寄存器 ④写出读写子程序
15
特殊功能寄存器配置示例 LDR R0, =SMRDATA LDMIA R0,{R1—R13}
LDR R0, =0x01C ;BWSCON Address STMIA R0, {Rl—R13} SMRDATA : .long 0x ;BWSCON .long 0x ;GCS0 .long 0x ;GCS1 .long 0x ;GCS2 .long 0x ;GCS3 .long 0x ;GCS4 .long 0x ;GCS5 .long 0x A ;GCS6,EDO DRAM(Trcd:3, ;Tcas=2,Tcp=l,CAN=10 bits) .long 0x A ;GCS7,EDO DRAM .long 0x ;Refresh(REFEN=1,TREFMD=0, Trp=3,Trc=5,Tchr=3) .long 0x ;Bank Size, 32MB/32MB .long 0x ;MRSR 6(CL=2) .long 0x ;MRSR 7(CL=2)
16
②i=*((volatile unsigned short*)0x00);
读: ①#define addr1 *((volatile unsigned short*)0x00) i=addr1; ②i=*((volatile unsigned short*)0x00); 写: *((volatile unsigned short*)0x00) = (unsigned short)i ;
17
4.4 S3C44B0X I/O端口功能及应用开发 4.4.1 I/O功能概述 4.4.2 端口功能 4.4.3 I/O端口的特殊功能寄存器
端口功能 I/O端口的特殊功能寄存器 端口应用编程
18
4.4.1 I/O功能概述 S3C44B0X有71个通用可编程多功能输入输出 引脚,可分为以下7类端口: 一个10位输出端口(PortA);
一个11位输出端口(PortB); 一个16位输入/输出端口(PortC); 两个9位输入/输出端口(PortE和PortF); 两个8位输入/输出端口(PortD和PortG)。
19
端口功能
24
4.4.3 I/O端口的特殊功能寄存器 1. 端口配置寄存器(PCONA-G); 2. 端口数据寄存器(PDATA-G);
3. 端口上拉寄存器(PUPC-G); 4. 特殊的上拉电阻控制寄存器(SPUCR); 5. 外部中断控制寄存器(EXTINT); 6. 外部中断挂起寄存器(EXTINTPND).
25
特殊功能寄存器配置示例 #define rPCONB (*(volatile unsigned *)0x1d20008)
#define rPDATB (*(volatile unsigned *)0x1d2000c) #define rPCONF (*(volatile unsigned *)0x1d20034) #define rPDATF (*(volatile unsigned *)0x1d20038) #define rPUPF (*(volatile unsigned *)0x1d2003c) #define rEXTINT (*(volatile unsigned *)0x1d20050) void Port_Init(void) { rPDATB = 0x7FF; // P9-LED1 P10-LED2 rPCONB = 0x1FF; rPDATF = 0x0; rPCONF = 0x252A; rPUPF = 0x0; //上拉电阻使能 rEXTINT=0x0; }
26
4.4.4 I/O端口应用编程 int led_state; void Led_Display(int LedStatus) ;
void led1_on( ) ; void led1_off( ) ; void Led_Test( ) { led1_on( ); Delay(1000); led1_off( ); } void led1_on( ) led_state = led_state | 0x1; Led_Display(led_state); void led1_off( ) { led_state = led_state & 0xfe; Led_Display(led_state); } void Led_Display(int LedStatus) //led_state=LedStatus; if((LedStatus&0x01)==0x01) rPDATB=rPDATB&0x5ff; else rPDATB=rPDATB|0x200;
27
4.5 中断控制器功能及应用开发 4.5.1 中断控制器 4.5.2 中断控制器的运作 4.5.3 中断源
中断控制器 中断控制器的运作 中断源 中断控制器的特殊功能寄存器 中断控制器应用编程
28
4.5.1 中断控制器 中断控制器的任务:在多重中断发生时,经过优先级判断选择其中一个中断向内核发出FIQ或IRQ中断请求。
中断控制器 中断控制器的任务:在多重中断发生时,经过优先级判断选择其中一个中断向内核发出FIQ或IRQ中断请求。 中断模式(INTMOD) :FIQ模式和IRQ模式。 程序状态寄存器的F位和I位。
29
4.5.2 中断控制器的运作 30个中断源产生中断 从优先级 主优先级 清标志 中断挂起寄存器 IRQ 中断模式 中断控制 中断屏蔽 FIQ
中断控制器的运作 30个中断源产生中断 从优先级 IRQ 主优先级 清标志 中断挂起寄存器 IRQ 清0 中断模式 F或I 中断控制 FI允许 中断屏蔽 FIQ FIQ 注:中断屏蔽可能在中断模式之前发生作用
30
4.5.3 中断源 1 3 3 4 4 1 2 2 EINT1>EINT0>TXD0>WDT>ADC
中断源 1 3 3 4 EINT1>EINT0>TXD0>WDT>ADC 4 1 TIMER0>TXD0>EINT1>ZDMA0 ZDMA0>IIC>WDT 2 2
31
4.5.4 中断控制器的特殊功能寄存器 1 中断控制寄存器(INTCON) 2 中断挂起寄存器(INTPND)
中断控制器的特殊功能寄存器 1 中断控制寄存器(INTCON) 2 中断挂起寄存器(INTPND) 3 中断模式寄存器(INTMOD) 4 中断屏蔽寄存器(INTMSK) 5 IRQ向量模式相关寄存器
32
中断特殊功能寄存器配置示例 void init_Eint(void) { rINTMOD = 0x0; rINTCON = 0x1;
中断特殊功能寄存器配置示例 void init_Eint(void) { rINTMOD = 0x0; rINTCON = 0x1; rINTMSK = ~(BIT_GLOBAL|BIT_EINT4567); pISR_EINT4567 = (int)Eint4567Isr; rPCONG = 0xffff; rPUPG = 0x0; rEXTINT = rEXTINT|0x480000; rI_ISPC = BIT_EINT4567; rEXTINTPND = 0xf; }
33
4.5.5 中断控制器应用编程 void Eint4567Isr(void) { unsigned char which_int;
中断控制器应用编程 void Eint4567Isr(void) { unsigned char which_int; which_int = rEXTINTPND; rEXTINTPND = 0xf; rI_ISPC = BIT_EINT4567; if(which_int= =4) { led1_on( ); D8Led_Direction(0); led1_off( ); } if(which_int= =8) led2_on( ); D8Led_Direction(1); led2_off( );
34
4.6 UART接口功能及应用开发 4.6.1 S3C44B0X UART概述 4.6.2 S3C44B0X UART的操作
35
4.6.1 S3C44B0X UART概述 特性: 可编程波特率 红外发/收 一个开始位 1/2个停止位 5/6/7/8数宽 奇偶校验
36
4.6.2 S3C44B0X UART的操作 数据传输 数据接收 自动流控制AFC( Auto Flow Control)
非自动流控制(nRTS和nCTS由S/W所控制) 中断/DMA请求的产生 UART错误状态FIFO 波特率的产生 回环(Loop-back)模式 红外模式
37
S3C44B0X UART的操作 数据传输: 传输基本方式:发送寄存器 1 5~8 1~2 传输移位器 数据 传输移位器 数据
Start Bit Data Bits Parity Bits Stop Bits 1 5~8 1~2 传输基本方式:发送寄存器 传输移位器 TxDn 数据 发送寄存器 TxFIFO 传输移位器 TxDn 数据 发送寄存器
38
S3C44B0X UART的操作 数据接收: 接收基本方式: 错误标志:溢出错误、奇偶错误、帧错误、 断点条件 接收转换器 数据 接收转换器
Start Bit Data Bits Parity Bits Stop Bits 接收基本方式: RxDn 接收转换器 数据 发送寄存器 RxFIFO RxDn 接收转换器 数据 发送寄存器 错误标志:溢出错误、奇偶错误、帧错误、 断点条件
39
S3C44B0X UART的操作 自动流控制: 其FIFO 剩余空间>2
40
S3C44B0X UART的操作 非自动流控制: 特点:nRTS和nCTS由软件控制 设置接收模式 设置发送模式 检查RxFIFO 剩余空间
发送数据
41
S3C44B0X UART的操作 中断请求的产生: FIFO模式 非FIFO模式 FIFO模式 非FIFO模式
溢出错误、奇偶错误、帧错误、断点条件 FIFO模式 Rx 非FIFO模式 FIFO模式 Tx 非FIFO模式
42
UBRDIVn=( 取整 )( MCLK/波特率×16 ) - 1
S3C44B0X UART的操作 波特率的产生: UBRDIVn=( 取整 )( MCLK/波特率×16 ) - 1 波特率为115200bps, MCLK为40HZ UBRDIVn =( 取整 )( /115200×16 ) - 1 =( 取整 )( 21.7 ) - 1 =22 - 1 =21
43
S3C44B0X UART的操作 红外模式:
44
4.6.3 S3C444B0X UART的特殊功能寄存器 UART的(行)控制寄存器 UART FIFO(状态)控制寄存器
UART MODEM (状态)控制寄存器 UART Tx/Rx寄存器 UART 错误状态寄存器 UART 发送保持寄存器 UART 接收保持寄存器 UART 波特率分频寄存器
45
UART的行控制寄存器(ULCONn) :
46
UART 控制寄存器(UCONn) :
47
UART FIFO控制寄存器(UFCONn):
48
UART FIFO状态寄存器(UFSTATn):
49
UART MODEM控制寄存器(UMCONn) :
50
UART MODEM状态寄存器(UMSTATn) :
51
UART Tx/Rx状态寄存器(UTRSTATn) :
52
UART 错误状态寄存器(UERSTATn) :
53
UART 发送保持寄存器(UTxHn) UART 接收保持寄存器(URxHn) UART 波特率分频寄存器(UBRDIVn)
54
4.6.4 S3C44B0X UART应用编程 static int whichUart=0 ;
void Uart_Init(int mclk, int baud) { int i ; rUFCON0=0x0; //禁止FIFO rUFCONl=0x0l ; rUMCON0=0x0; rUMCON1=0x0l ; rULCON0=0x3 ; rUCON0=0x245 ; rUBRDIV0=((int)(mclk/16/baud+0.5) -1); rULCON1=0x3 ; rUCON1=0x245 ; rUBRDIV1=((int)(mclk/16/baud+0.5) -1); for (i=0 ;i<100 ;i++) ; }
55
char Uart_Getch(void)
{ if(whichUart= =0) while(!(rUTRSTAT0&0x1)) ;//准备接收数据 return RdURXH0( ) ; } else while(!(rUTRSTAT1&0x1)) ;//准备接收数据 return rURXH1 ;
56
void Uart_SendByte(int data)
{ if(whichUart= =0) while(!(rUTRSTAT0&0x2)) ; Delay(10); WrUTXH0(data) ; } else … …
57
4.7 S3C44B0X时钟电源管理器功能及应用开发 4.7.1 时钟电源管理器概述 4.7.2 时钟电源管理器功能描述
4.7.3 时钟发生器&电源管理特殊功能寄存器 4.7.4 时钟&电源管理器应用编程
58
4.7.1 时钟电源管理器概述 时钟电源管理器 时钟 正常模式(Normal mode) 空闲模式(Idle mode)
停止模式(Stop mode) LCD的SL空闲模式(SL Idle mode) 低速模式(Slow mode)
59
4.7.2 时钟电源管理器功能描述 时钟发生器 时钟源选择 PLL(Phase-Locked-Loop锁相环) 时钟控制逻辑 电源管理模式
60
时钟电源管理器功能描述 时钟发生器: 时钟发生器框图
61
时钟电源管理器功能描述 时钟源选择:
62
时钟电源管理器功能描述 fpllo=( m×fin )/( p×2s ) PLL: PLL框图
63
时钟电源管理器功能描述 时钟控制逻辑: OSC PLL CCL 上电重启时序图
t lock = ( 1 / f in ) × LTIMECNT >208us
64
时钟电源管理器功能描述 电源管理: 停止为CPU提供时钟信号 全部正常工作,且时钟供给可控 写CLKCON,返回N、S、STOP模式
停止所有模块,最低功耗
65
停止模式的进入和退出
66
,LCD_BIT=1,IDLE_BIT=1,且PLL关闭
时钟电源管理器功能描述 仅维持LCD 电源管理:
67
SL_IDLE的进入与退出
68
,LCD_BIT=1,IDLE_BIT=1,且PLL关闭
时钟电源管理器功能描述 f out = f in / ( 2*SLOW_VAL ) f out = f in 电源管理: PLL稳定需400us 即PLL锁定 把PLL自身耗电排除在外
71
4.7.3 时钟发生器&电源管理特殊功能寄存器 PLL控制寄存器 (PLLCON)
72
fpllo=( m×fin )/( p×2s ) m=(MDIV + 8), p=(PDIV + 2), s=SDIV
20MHz< fpllo < 66MHz fpllo ×2S < 170 MHz S的值应该尽可能的大 建议(fin / p) ≥1MHz,必须满足(fin / p)< 2MHz 2S < 170 / fpllo (S的值应该尽可能的大) fin /2 < p ≤ fin 顺序:SDIV → PDIV → MDIV 例:f in=14.318MHz ,fout=60MHz SDIV=1 , PDIV=6 , MDIV=59
73
时钟控制寄存器 (CLKCON):
74
时钟低速控制寄存器 (CLKSLOW):
75
t lock = ( 1 / f in ) × LTIMECNT
锁时计数寄存器 (LOCKTIME): t lock = ( 1 / f in ) × LTIMECNT
76
4.7.4 时钟发生器&电源管理器应用编程 int P_div, M_div, S_val, S_div, mck;
Uart_Printf("<- Running change test of M/P/S value ->\n"); Uart_Printf("Input M vlaue\n"); M_div=Uart_GetIntNum(); Uart_Printf("Input P vlaue\n"); P_div=Uart_GetIntNum(); Uart_Printf("Input S vlaue\n"); S_div=Uart_GetIntNum(); S_val=pow(2,S_div); mck=((M_div+8)*FIN)/((P_div+2)*S_val); Uart_Printf("MCLK=%d,M=0x%x,P=0x%x,S=0x%x\n", …); Uart_Printf("Now change PLL value\n"); Uart_TxEmpty(0); ChangePllValue(M_div,P_div,S_div); Uart_Init(mck,115200); Uart_Printf("changing MCLK\Press any key to return!\n"); while(!Uart_GetKey()) {Delay(1000); } ChangePllValue(PLL_M,PLL_P,PLL_S); Uart_Init(0,115200); Uart_Printf("Returned original clock\n");
77
char slw_exit=0; int i; unsigned int save_MCON[9];
unsigned int MemCon[9]={0,0,0,0,0,0,0x18000,0x18000,0x }; pISR_EINT4567=(U32)SLWEINT4567Int; rINTMSK =~(BIT_GLOBAL|BIT_RTC|BIT_EINT4567); for(i=0;i<9;i++) save_MCON[i]=((unsigned int *)0x01c80004)[i]; Uart_Printf("Entering SLOW mode.\n"); Uart_Printf(" Press SB2 or SB3 to exit SLOW mode\n"); rLOCKTIME=0x640; //count=t_lock*Fin=800 (t_lock=200us, Fin=8MHz) rCLKSLOW=2|(1<<4)|(1<<5); //PLL off,SLOW mode,SL=2 ,Fout=1MHz ChangeMemCon(MemCon); //change memory control register(66M-1MHz) while(!slw_exit) Delay(100); //now! slow mode:1Mhz, PLL off rINTMSK |=BIT_RTC; for(i=0;i<9;i++) MemCon[i]=save_MCON[i]; ChangeMemCon(MemCon); //change memory control register(1M-66MHz) rCLKSLOW=2|(1<<4)|(0<<5); //PLL on for(i=0;i<2048;i++); //wait during PLL lock-time rCLKSLOW=2; //exit SLOW mode(disable slow_bit) slw_exit=0;
78
4.8 S3C444B0X RTC功能及应用开发 4.8.1 S3C44B0X RTC功能
79
4.8.1 S3C44B0X RTC功能 BCD数据,秒、分、时、日、月、年 闰年产生器 告警功能:告警中断或从断电模式唤醒
排除了2000年问题 独立的电源端口(VDDRTC) 支持毫秒滴答时间中断作为RTOS核的时间滴答 循环复位功能
80
实时时钟框图
81
实时时钟部分外围电路
82
4.8.2 S3C44B0X RTC特殊功能寄存器 RTC控制寄存器RTCCON RTC告警控制寄存器
告警秒、分、时、日、星期、月、年数据寄存器 BCD秒、分、时、日、星期、月、年数据寄存器 RTC循环复位寄存器RTCRST TICK TIME计数寄存器TICNT
83
RTC特殊功能寄存器 RTC控制寄存器
84
RTC告警控制寄存器(RTCALM)
85
告警秒数据寄存器(ALMSEC) 告警分数据寄存器(ALMMIN)
86
RTC特殊功能寄存器 告警时数据寄存器 (ALMHOUR) 告警日数据寄存器 (ALMDAY) 告警星期数据寄存器(ALMDATE)
告警月数据寄存器 (ALMMON) 告警年数据寄存器 (ALMYEAR)
87
RTC特殊功能寄存器 BCD秒数据寄存器(BCDSEC) BCD分数据寄存器(BCDMIN)
88
BCD时数据寄存器 ( BCDHOUR) BCD日数据寄存器 ( BCDDAY) BCD星期数据寄存器( BCDDATE) BCD月数据寄存器 ( BCDMON) BCD年数据寄存器 ( BCDYEAR)
89
RTC特殊功能寄存器 RTC循环复位寄存器(RTCRST) TICK TIME寄存器(TICNT)
90
4.8.3 S3C44B0X RTC应用编程 void Rtc_Init(void) { rRTCCON =0x01;
rBCDYEAR =TESTYEAR; rBCDMON =TESTMONTH; rBCDDAY =TESTDAY; rBCDDATE =TESTDATE; rBCDHOUR =TESTHOUR; rBCDMIN =TESTMIN; rBCDSEC =TESTSEC; rRTCCON =0x0; }
91
void Display_Rtc(void)
{ int year, month, day, weekday, hour, min, sec; rRTCCON=0x01; while(1) { if(rBCDYEAR = = 0x99) year=0x1999; else year=0x rBCDYEAR; month = rBCDMON; day = rBCDDAY; weekday = rBCDDATE; hour = rBCDHOUR; min = rBCDMIN; sec = rBCDSEC; if(sec != 0) break; } rRTCCON=0x0; Uart_Printf(……);
92
voidTest_RTC_Tick(void)
{ pISR_TICK =(unsigned)Rtc_Tick; rRTCCON =0x1; sec_tick =1; rINTMSK =~(BIT_GLOBAL|BIT_TICK); rRTCCON =0x0; rTICINT = 127+(1<<7); // 启动时间片中断功能 } void Rtc_Tick(void) rI_ISPC =BIT_TICK; // 清除时间片中断标志 RTC_ok =1; // RTC检测标志置位
93
6.9 S3C444B0X看门狗定时器功能及应用开发 6.9.1 S3C44B0X看门狗定时器概述
94
6.9.1 S3C44B0X看门狗定时器概述 看门狗定时器框图
95
6.9.2 S3C44B0X看门狗定时器特殊功能寄存器 看门狗定时器控制寄存器(WTCON) 看门狗定时器数据寄存器(WTDAT)
看门狗定时器计数寄存器(WTCNT)
96
看门狗定时器控制寄存器(WTCON)
97
看门狗定时器数据寄存器(WTDAT) 看门狗定时器计数寄存器(WTCNT)
t_watchdog=1/( MCLK / (预分频值+1) /分频系数 ) T_watchdog= WTDAT × t_watchdog 看门狗定时器数据寄存器(WTDAT) 看门狗定时器计数寄存器(WTCNT)
98
6.9.3 S3C44B0X看门狗定时器应用编程 void Test_WDTimer(void)
{ rINTMSK=~(BIT_GLOBAL|BIT_WDT); pISR_WDT=(unsigned)Wdt_Int; isWdtInt=0; rWTCON=((MCLK/ )<<8)|(3<<3)|(1<<2); =1/66 rWTDAT=8448/4; rWTCNT=8448/4; rWTCON=rWTCON|(1<<5); // 1/40/128,interrupt while(isWdtInt!=10); rWTCON=((MCLK/ )<<8)|(3<<3)|(1); reset enable Uart_Printf("\nI will restart after 2 sec!!!\n"); rWTCNT=8448*2; while(1); rINTMSK|=BIT_GLOBAL; } void Wdt_Int(void) { rI_ISPC=BIT_WDT; Uart_Printf("%d ",++isWdtInt); }
99
4.10 S3C44B0X LCD控制器功能及应用开发 4.10.1 S3C44B0X LCD 控制器的特性
存器 S3C44B0X LCD 编程举例
100
4.10.1 S3C44B0X LCD控制器的特性 支持彩色/灰度/单色的LCD 板; 支持3种类型LCD板:4位双扫描,4位单扫描,以及8
位单扫描的显示类型; 支持虚拟显示屏; 系统存储器被用作显示存储器; 专用的DMA; 支持多种荧屏大小:640×480、320×240、160×160 支持单色的4级、16级灰度; 对于彩色STN LCD板,支持256级彩色; 支持电源节省模式(SL_IDLE Mode)。
101
4.10.2 S3C44B0X LCD外部接口信号 VFRAME:LCD控制器和LCD驱动器之间的帧同步 信号。
信号。 VLINE: LCD控制器和LCD驱动器之间的行同步 VCLK: 此引脚为LCD控制器和LCD驱动器之间 的象素时钟信号。 VM: LCD驱动器所使用的交流信号。LCD驱 动器使用VM来改变用于打开或关闭象 素的行和列电压的极性。 VD[3:0]以及VD[7:4]:LCD象素数据输入端口。
102
LCD控制器框图
103
接口信号时序图
104
S3C44B0X LCD 控制器的操作 1. 灰度模式操作 2. 彩色模式操作 3. 扫描模式操作 4. 数据的存放与显示
105
S3C44B0X LCD 控制器的操作 像素点格式:2模式 灰度模式操作 2位像素(4级灰度,可在16级中选出) 4位像素(16级灰度)
像素点格式:4模式 彩色模式操作 3位红(从16种红中选出8种) 3位绿(从16种绿中选出8种) 2位蓝(从8种蓝中选出4种) 像素点格式:3-3-2模式
106
S3C44B0X LCD 控制器的操作 扫描模式操作 4位单/双扫描 8位单扫描
107
S3C44B0X LCD 控制器的操作 数据的存放与显示 4位双扫描数据的存放与显示
108
S3C44B0X LCD 控制器的操作 数据的存放与显示 4位/8位单扫描数据的存放与显示
109
4.10.4 S3C44B0X LCD 控制器的特殊功能寄存器 1. LCD控制寄存器1、2、3(LCDCONn)
2.帧缓冲起始地址寄存器1、2、3(LCDSADDRn) 3. RED查找表寄存器(REDLUT) 4. GREEN查找表寄存器(GREENLUT) 5. BLUE查找表寄存器(BLUELUT) 6.抖动模式寄存器
110
LCD控制寄存器1(LCDCON1)
111
LCD控制寄存器1(LCDCON1) 16.5MHz > VCLK > 数据传输的速率 HS × VS × FR × MV
112
HOZVAL=( 水平显示长度 / 有效VD数据线的数量) -1 在彩色模式下: 水平显示长度= 3 × 水平像素点数
LCD控制寄存器2(LCDCON2) HOZVAL=( 水平显示长度 / 有效VD数据线的数量) -1 在彩色模式下: 水平显示长度= 3 × 水平像素点数 LINEVAL=垂直显示宽度-1;单扫描 LINEVAL=垂直显示宽度/2-1;双扫描
113
LCD控制寄存器3(LCDCON3)
114
帧缓冲起始地址寄存器1(LCDSADDR1)
115
帧缓冲起始地址寄存器2(LCDSADDR2)
116
帧缓冲起始地址寄存器3(LCDSADDR3)
117
GREEN查找表寄存器(GREENLUT)
RED查找表寄存器(REDLUT) GREEN查找表寄存器(GREENLUT) BLUE查找表寄存器(BLUELUT)
118
不同模式的MV frame_rate(Hz)=1 / [ ( (1/VCLK) × (HOZVAL+1)+(1/MCLK) ×
(WLH+WDLY+LINEBLANK) ) × ( LINEVAL+1) ]
119
4.10.5 S3C44B0X LCD 编程举例 UINT LcdBuffer[ 24 0 ][ 3 2 0 / 4];
void Lcd_Init(void) { rDITHMODE=0x1223a;rDP1_2 =0x5a5a; rDP4_7 =0x366cd9b; rDP3_5 =0xda5a7; rDP2_3 =0xad7; rDP5_7 =0xfeda5b7; rDP3_4 =0xebd7; rDP4_5 =0xebfd7; rDP6_7 =0x7efdfbf; rLCDCON1=(0)|(2<<5)|(0<<7)|(0x3<<8)|(0x3<<10)|(4<<12); rLCDCON2=(240-1)|((320*3/8-1)<<10)|(14<<21); rLCDSADDR1= (0x3<<27) | ( ( ( UINT )LcdBUFFER >> 22 ) << 21 ) | (((UINT)Lcd_BUFFER >> 1) & 0x1fffff); rLCDSADDR2= (( (( UINT)LcdBUFFER+(320*240))>>1) &0x1fffff; rLCDSADDR3= (320/2) | ( 0<<9 ); rREDLUT=0xfdb96420;rGREENLUT=...;Rbluelut=0xfb40; rLCDCON1=(1)|rLCDCON1; }
120
void LcdDraw_backgroundcolor(Uchar color_code)
{ int i; Uint *pBuf=(Uint *) LcdBuffer; for( i = 0; i < ( 320*240/4 ); i++ ) *pBuf + + = ( color_code << 24) + ( color_code << 16)+ ( color_code << 8 ) + color_code; }
121
void Lcd_Pixel( int x, int y, Uchar rgb )
{ int i; Uint mask[4]={0x00ffffff,0xff00ffff,0xffff00ff,0xffffff00}; LcdBuffer[y][x /4]=(LcdBuffer[y][x/4]& mask[x%4] ) | ( ( Uint )rgb << ( 3-x%4 )*8); }
Similar presentations