第四章 基于S3C44B0X嵌入式系统 应用开发 4.1 基于S3C44B0X的S3CEV40介绍 4.2 S3C44B0X处理器介绍

Slides:



Advertisements
Similar presentations
阻塞操作. 在 linux 里,一个等待队列由一个 wait_queue_head_t 类型的结构来描述 等待队列的初始化: static wait_queue_head_t testqueue; init_waitqueue_head(&testqueue);
Advertisements

现代电子技术实验 ——综合实验之单片机部分
TMS320F2812串行外设接口 Serial Peripheral Interface (SPI)
Chap4 電腦硬體基本單元 高中資訊科技概論 松崗圖書公司.
嵌入式图形显示.
实验五 基本接口实验 液晶显示实验 实验目的 实验设备 实验内容 实验原理 实验操作步骤 练习与思考
实验四 利用中规模芯片设计时序电路(二).
微机原理与接口技术 第二章 ARM微处理器硬件结构
客户端入门十二小时 FOOLFLY DEMO DESIGN 讲师:林伟.
高等学校嵌入式系统设计教材 ARM9处理器C语言编程标准教程 侯殿有 才华 编著 人民邮电出版社.
第四章 S3C44B0X 硬件结构及功能.
題目:LED電子數位時鐘 第 二組 組員: 陳柏霖 李育昇.
第7章 中斷系統.
嵌入式系统讲义 第4章 S3C2410X系统结构 周国运
啟示錄.
Timer & KEYPAD 11/24.
监控器CAT705、 CAT706、 CAT813与 MAX705,、MAX706、 MAX813L管脚兼容 2008年1月
AVR单片机软硬件设计教程-入门篇 ——学单片机就要学AVR!
YM100开发实验板 演讲人:熊小燕 2009年月12月16日
SWITCH&7-SEG元件控制 嵌入式作業系統實作 11/17.
嵌入式系统教案 武汉创维特信息技术有限公司 2018/11/27.
Roy Wan PCI MS/s 14-bit 高速数字化仪 Roy Wan
College of Computer Science & Technology
第四章 BootLoader开发 附-s3c2410/s3c2440中断控制器介绍
ARDUINO+BLUETOOTH Arduino实现蓝牙数据传输.
在專用的嵌入式板子運行 GNU/Linux 系統已經變得越來越流行。一個嵌入式 Linux 系統從軟體的角度看通常可以分為四個層次:
初始化串列通訊埠 在啟始串列傳輸介面時有以下3個步驟:假設傳輸的通訊協定為9600bps,傳送8個位元資料,沒有同位位元,1個停止位元。
嵌入式系统设计与实例开发 ——ARM与C/OS-Ⅱ 第六讲 基于ARM的嵌入式硬件结构设计.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月20日.
第4章 ARM嵌入式处理器.
第七章 定时/计数器.
嵌入式系统讲义 第4章 S3C2410X系统结构 周国运
語法:Variables & Functions 實作:Digital out (Button+LED) 簡報:廖崇義
Ch9 Communicating with Hardware
AM5728 视频输入端口VIP软件框架 广州创龙电子科技有限公司
逆向工程-汇编语言
CPU结构和功能.
第五章 C/C++及汇编语言的混合编程 5.1 ARM C/C++编译器 5.2 在C/C++程序中内嵌汇编指令
(第2版).
组员:吴迪&王柳杨&金虎&陈武荣&谭金柏
第5章 目录 1.简介 2.引脚配置 3.存储器寻址 4.系统控制模块 5.存储器加速模块 6.外部存储器控制器 7.引脚连接模块
College of Computer Science & Technology
移相正弦信号发生器设计 采用直接数字综合器DDS发生器的设计 原理:图1是此电路模型图
亚博科技 Arduino视频教程 第8讲 蜂鸣器发声实验.
第四章 MCS-51定时器/计数器 一、定时器结构 1.定时器结构框图
ARM及Thumb指令集 (练习).
K60入门课程 02 首都师范大学物理系 王甜.
5-6 串列埠模式0輸出埠擴充實習.
第3章 ARM微處理器的指令集.
单片机原理与应用 主讲人:张荣刚 福建师范大学福清分校.
嵌入式系统教案 武汉创维特信息技术有限公司 2019/4/18.
ARM指令集 Author : Steve Furber Advisor: Mei-Ling Chiang Speaker: 徐翔宇
嵌入式系统教案 武汉创维特信息技术有限公司 2019/4/29.
(Random Access Memory)
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
单片机原理及应用 实践部分 主讲人:刘 强 四川工商学院单片机教学团队 单片机原理及应用 实践部分 主讲人:刘 强
College of Computer Science & Technology
微處理機 Microprocessor (100上) ARM 內核嵌入式SOC原理
单片机原理及应用 (C语言版) 第8章 单片机系统扩展
第六章 S3C2410的串口UART及编程 通用异步收发传输器(Universal Asynchronous Receiver/Transmitter)
汽车单片机应用技术 学习情景1: 汽车空调系统的单片机控制 主讲:向楠.
单片机应用技术 (C语言版) 第4章 C51程序设计入门
第3章 目录 1.简介 2.ARM7TDMI 3.ARM7TDMI的模块和内部框图 4.体系结构直接支持的数据类型 5.处理器状态
FPPA 程式設計 這一章開始正式進入FPPA程式設計的世界,我會從一個簡單的程式開始解說,一邊介紹專案開發時最常應用的技巧還有程式控制的手段,一邊把系統規畫的概念導入給大家,讓大家對專案的規畫能有一個初步的概念。
FVX1100介绍 法视特(上海)图像科技有限公司 施 俊.
上节复习(11.7) 1、定时/计数器的基本原理? 2、定时/计数器的结构组成? 3、定时/计数器的控制关系?
LCD的驱动控制实验.
工业机器人入门使用教程 ESTUN机器人 主讲人:李老师
S3C44B0X Watchdog定时器功能及应用
DSP技术与应用 电子与信息技术系.
Presentation transcript:

第四章 基于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

4.1 基于S3C44B0的S3CEV40开发介绍 功能框图

4.2 S3C44B0X处理器介绍

4.3 存储控制器功能及应用开发 4.3.1 存储控制器概述 4.3.2 存储器空间划分简述 4.3.3 存储控制器相关功能引脚描述 4.3.1 存储控制器概述 4.3.2 存储器空间划分简述 4.3.3 存储控制器相关功能引脚描述 4.3.4 存储控制器的特殊功能寄存器 4.3.5 存储器应用编程

4.3.1 S3C44B0X存储控制器概述 特点:多级存储器 层次: 寄存器组 片上RAM 片上Cache 主存储器 硬盘 寄存器组 √ 寄存器组 片上Cache 主存储器 √ √ ARM层次 S3C44B0X层次

ARM状态下寄存器组织 堆栈指针 程序状态寄存器 程序链接寄存器

CPSR

Thumb状态下寄存器组织

4.3.2 S3C44B0X存储器空间划分简述

4.3.3 存储控制器相关功能引脚描述 ENDIAN引脚 选择大/小端模式 OM[1:0]引脚 选择Bank0(nGCS0)总线宽度 4.3.3 存储控制器相关功能引脚描述 ENDIAN引脚  选择大/小端模式 0 小端 1 大端 上电复位时 OM[1:0]引脚  选择Bank0(nGCS0)总线宽度 地址线连接  依据数据宽度而定

4.3.4 存储控制器的特殊功能寄存器 1. 总线宽度/等待控制寄存器(BWSCON) 2. Bank控制寄存器(BANKCONn) 4.3.4 存储控制器的特殊功能寄存器 1. 总线宽度/等待控制寄存器(BWSCON) 2. Bank控制寄存器(BANKCONn) 3. DRAM/SDRAM刷新控制寄存器(REFRESH) 4. Bank大小寄存器(BANKSIZE) 5. Bank6、7模式设置寄存器(MRSR)

4.3.5 存储器应用编程 .global sRWramtest .equ RWBase, 0x0C030000 sRWramtest: 4.3.5 存储器应用编程 .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], #1 LDRB r3, =0xBB STRB r3, [r2], #1 LDRB r3, =0x22 LDRB r3, =0x11 STRB r3, [r2] MOV pc, lr

举例:扩一个1M*16b的FLASH用于装载程序等 1. 收集资料,选择芯片 2. 上网查找SST39VF160芯片资料(www.21ic.com) 3. 查看芯片资料(datasheet) 4. 画出硬件联接图(手册p4~p5) 5. 写出程序   ①查看读写时序图(p11)  ②找出对应参数表(p10)  ③分析时序要求,配置相应特殊功能寄存器  ④写出读写子程序

特殊功能寄存器配置示例 LDR R0, =SMRDATA LDMIA R0,{R1—R13} LDR R0, =0x01C80000 ;BWSCON Address STMIA R0, {Rl—R13} SMRDATA : .long 0x22221210 ;BWSCON .long 0x00000600 ;GCS0 .long 0x00000700 ;GCS1 .long 0x00000700 ;GCS2 .long 0x00000700 ;GCS3 .long 0x00000700 ;GCS4 .long 0x00000700 ;GCS5 .long 0x0001002A ;GCS6,EDO DRAM(Trcd:3, ;Tcas=2,Tcp=l,CAN=10 bits) .long 0x0001002A ;GCS7,EDO DRAM .long 0x00960000+953 ;Refresh(REFEN=1,TREFMD=0, Trp=3,Trc=5,Tchr=3) .long 0x0 ;Bank Size, 32MB/32MB .long 0x20 ;MRSR 6(CL=2) .long 0x20 ;MRSR 7(CL=2)

②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 ;

4.4 S3C44B0X I/O端口功能及应用开发 4.4.1 I/O功能概述 4.4.2 端口功能 4.4.3 I/O端口的特殊功能寄存器 4.4.2 端口功能 4.4.3 I/O端口的特殊功能寄存器 4.4.4 端口应用编程

4.4.1 I/O功能概述 S3C44B0X有71个通用可编程多功能输入输出 引脚,可分为以下7类端口: 一个10位输出端口(PortA); 一个11位输出端口(PortB); 一个16位输入/输出端口(PortC); 两个9位输入/输出端口(PortE和PortF); 两个8位输入/输出端口(PortD和PortG)。

4.4.2 端口功能

4.4.3 I/O端口的特殊功能寄存器 1. 端口配置寄存器(PCONA-G); 2. 端口数据寄存器(PDATA-G); 3. 端口上拉寄存器(PUPC-G); 4. 特殊的上拉电阻控制寄存器(SPUCR); 5. 外部中断控制寄存器(EXTINT); 6. 外部中断挂起寄存器(EXTINTPND).

特殊功能寄存器配置示例 #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; }

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;

4.5 中断控制器功能及应用开发 4.5.1 中断控制器 4.5.2 中断控制器的运作 4.5.3 中断源 4.5.1 中断控制器 4.5.2 中断控制器的运作 4.5.3 中断源 4.5.4 中断控制器的特殊功能寄存器 4.5.5 中断控制器应用编程

4.5.1 中断控制器 中断控制器的任务:在多重中断发生时,经过优先级判断选择其中一个中断向内核发出FIQ或IRQ中断请求。 4.5.1 中断控制器 中断控制器的任务:在多重中断发生时,经过优先级判断选择其中一个中断向内核发出FIQ或IRQ中断请求。 中断模式(INTMOD) :FIQ模式和IRQ模式。 程序状态寄存器的F位和I位。

4.5.2 中断控制器的运作 30个中断源产生中断 从优先级 主优先级 清标志 中断挂起寄存器 IRQ 中断模式 中断控制 中断屏蔽 FIQ 4.5.2 中断控制器的运作 30个中断源产生中断 从优先级 IRQ 主优先级 清标志 中断挂起寄存器 IRQ 清0 中断模式 F或I 中断控制 FI允许 中断屏蔽 FIQ FIQ 注:中断屏蔽可能在中断模式之前发生作用

4.5.3 中断源 1 3 3 4 4 1 2 2 EINT1>EINT0>TXD0>WDT>ADC 4.5.3 中断源 1 3 3 4 EINT1>EINT0>TXD0>WDT>ADC 4 1 TIMER0>TXD0>EINT1>ZDMA0 ZDMA0>IIC>WDT 2 2

4.5.4 中断控制器的特殊功能寄存器 1 中断控制寄存器(INTCON) 2 中断挂起寄存器(INTPND) 4.5.4 中断控制器的特殊功能寄存器 1 中断控制寄存器(INTCON) 2 中断挂起寄存器(INTPND) 3 中断模式寄存器(INTMOD) 4 中断屏蔽寄存器(INTMSK) 5 IRQ向量模式相关寄存器

中断特殊功能寄存器配置示例 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; }

4.5.5 中断控制器应用编程 void Eint4567Isr(void) { unsigned char which_int; 4.5.5 中断控制器应用编程 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( );

4.6 UART接口功能及应用开发 4.6.1 S3C44B0X UART概述 4.6.2 S3C44B0X UART的操作

4.6.1 S3C44B0X UART概述 特性: 可编程波特率 红外发/收 一个开始位 1/2个停止位 5/6/7/8数宽 奇偶校验

4.6.2 S3C44B0X UART的操作 数据传输 数据接收 自动流控制AFC( Auto Flow Control) 非自动流控制(nRTS和nCTS由S/W所控制) 中断/DMA请求的产生 UART错误状态FIFO 波特率的产生 回环(Loop-back)模式 红外模式

S3C44B0X UART的操作 数据传输: 传输基本方式:发送寄存器 1 5~8 1~2 传输移位器 数据 传输移位器 数据 Start Bit Data Bits Parity Bits Stop Bits 1 5~8 1~2 传输基本方式:发送寄存器 传输移位器 TxDn 数据 发送寄存器 TxFIFO 传输移位器 TxDn 数据 发送寄存器

S3C44B0X UART的操作 数据接收: 接收基本方式: 错误标志:溢出错误、奇偶错误、帧错误、 断点条件 接收转换器 数据 接收转换器 Start Bit Data Bits Parity Bits Stop Bits 接收基本方式: RxDn 接收转换器 数据 发送寄存器 RxFIFO RxDn 接收转换器 数据 发送寄存器 错误标志:溢出错误、奇偶错误、帧错误、          断点条件

S3C44B0X UART的操作 自动流控制: 其FIFO 剩余空间>2

S3C44B0X UART的操作 非自动流控制: 特点:nRTS和nCTS由软件控制 设置接收模式 设置发送模式 检查RxFIFO 剩余空间 发送数据

S3C44B0X UART的操作 中断请求的产生: FIFO模式 非FIFO模式 FIFO模式 非FIFO模式  溢出错误、奇偶错误、帧错误、断点条件 FIFO模式  Rx 非FIFO模式 FIFO模式  Tx 非FIFO模式

UBRDIVn=( 取整 )( MCLK/波特率×16 ) - 1 S3C44B0X UART的操作 波特率的产生: UBRDIVn=( 取整 )( MCLK/波特率×16 ) - 1 波特率为115200bps, MCLK为40HZ UBRDIVn =( 取整 )( 40000000 /115200×16 ) - 1        =( 取整 )( 21.7 ) - 1      =22 - 1      =21

S3C44B0X UART的操作 红外模式:

4.6.3 S3C444B0X UART的特殊功能寄存器 UART的(行)控制寄存器 UART FIFO(状态)控制寄存器 UART MODEM (状态)控制寄存器 UART Tx/Rx寄存器 UART 错误状态寄存器 UART 发送保持寄存器 UART 接收保持寄存器 UART 波特率分频寄存器

UART的行控制寄存器(ULCONn) :

UART 控制寄存器(UCONn) :

UART FIFO控制寄存器(UFCONn):

UART FIFO状态寄存器(UFSTATn):

UART MODEM控制寄存器(UMCONn) :

UART MODEM状态寄存器(UMSTATn) :

UART Tx/Rx状态寄存器(UTRSTATn) :

UART 错误状态寄存器(UERSTATn) :

UART 发送保持寄存器(UTxHn) UART 接收保持寄存器(URxHn) UART 波特率分频寄存器(UBRDIVn)

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++) ; }

char Uart_Getch(void) { if(whichUart= =0) while(!(rUTRSTAT0&0x1)) ;//准备接收数据 return RdURXH0( ) ; } else while(!(rUTRSTAT1&0x1)) ;//准备接收数据 return rURXH1 ;

void Uart_SendByte(int data) { if(whichUart= =0) while(!(rUTRSTAT0&0x2)) ; Delay(10); WrUTXH0(data) ; } else … …

4.7 S3C44B0X时钟电源管理器功能及应用开发 4.7.1 时钟电源管理器概述 4.7.2 时钟电源管理器功能描述 4.7.3 时钟发生器&电源管理特殊功能寄存器 4.7.4 时钟&电源管理器应用编程

4.7.1 时钟电源管理器概述 时钟电源管理器 时钟 正常模式(Normal mode) 空闲模式(Idle mode) 停止模式(Stop mode) LCD的SL空闲模式(SL Idle mode) 低速模式(Slow mode)

4.7.2 时钟电源管理器功能描述 时钟发生器 时钟源选择 PLL(Phase-Locked-Loop锁相环) 时钟控制逻辑 电源管理模式

时钟电源管理器功能描述 时钟发生器: 时钟发生器框图

时钟电源管理器功能描述 时钟源选择:

时钟电源管理器功能描述 fpllo=( m×fin )/( p×2s ) PLL: PLL框图

时钟电源管理器功能描述 时钟控制逻辑: OSC PLL CCL 上电重启时序图 t lock = ( 1 / f in ) × LTIMECNT >208us

时钟电源管理器功能描述 电源管理: 停止为CPU提供时钟信号 全部正常工作,且时钟供给可控 写CLKCON,返回N、S、STOP模式 停止所有模块,最低功耗

停止模式的进入和退出

,LCD_BIT=1,IDLE_BIT=1,且PLL关闭 时钟电源管理器功能描述 仅维持LCD 电源管理:

SL_IDLE的进入与退出

,LCD_BIT=1,IDLE_BIT=1,且PLL关闭 时钟电源管理器功能描述 f out = f in / ( 2*SLOW_VAL ) f out = f in 电源管理: PLL稳定需400us 即PLL锁定 把PLL自身耗电排除在外

4.7.3 时钟发生器&电源管理特殊功能寄存器 PLL控制寄存器 (PLLCON)

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

时钟控制寄存器 (CLKCON):

时钟低速控制寄存器 (CLKSLOW):

t lock = ( 1 / f in ) × LTIMECNT 锁时计数寄存器 (LOCKTIME): t lock = ( 1 / f in ) × LTIMECNT

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");

char slw_exit=0; int i; unsigned int save_MCON[9]; unsigned int MemCon[9]={0,0,0,0,0,0,0x18000,0x18000,0x800000+2033}; 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;

4.8 S3C444B0X RTC功能及应用开发 4.8.1 S3C44B0X RTC功能

4.8.1 S3C44B0X RTC功能 BCD数据,秒、分、时、日、月、年 闰年产生器 告警功能:告警中断或从断电模式唤醒 排除了2000年问题 独立的电源端口(VDDRTC) 支持毫秒滴答时间中断作为RTOS核的时间滴答 循环复位功能

实时时钟框图

实时时钟部分外围电路

4.8.2 S3C44B0X RTC特殊功能寄存器 RTC控制寄存器RTCCON RTC告警控制寄存器 告警秒、分、时、日、星期、月、年数据寄存器 BCD秒、分、时、日、星期、月、年数据寄存器 RTC循环复位寄存器RTCRST TICK TIME计数寄存器TICNT

RTC特殊功能寄存器 RTC控制寄存器

RTC告警控制寄存器(RTCALM)

告警秒数据寄存器(ALMSEC) 告警分数据寄存器(ALMMIN)

RTC特殊功能寄存器 告警时数据寄存器 (ALMHOUR) 告警日数据寄存器 (ALMDAY) 告警星期数据寄存器(ALMDATE) 告警月数据寄存器 (ALMMON) 告警年数据寄存器 (ALMYEAR)

RTC特殊功能寄存器 BCD秒数据寄存器(BCDSEC) BCD分数据寄存器(BCDMIN)

BCD时数据寄存器 ( BCDHOUR) BCD日数据寄存器 ( BCDDAY) BCD星期数据寄存器( BCDDATE) BCD月数据寄存器 ( BCDMON) BCD年数据寄存器 ( BCDYEAR)

RTC特殊功能寄存器 RTC循环复位寄存器(RTCRST) TICK TIME寄存器(TICNT)

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; }

void Display_Rtc(void) { int year, month, day, weekday, hour, min, sec; rRTCCON=0x01; while(1) { if(rBCDYEAR = = 0x99) year=0x1999; else year=0x2000 + rBCDYEAR; month = rBCDMON; day = rBCDDAY; weekday = rBCDDATE;   hour = rBCDHOUR; min = rBCDMIN; sec = rBCDSEC; if(sec != 0) break; } rRTCCON=0x0; Uart_Printf(……);

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检测标志置位

6.9 S3C444B0X看门狗定时器功能及应用开发 6.9.1 S3C44B0X看门狗定时器概述

6.9.1 S3C44B0X看门狗定时器概述 看门狗定时器框图

6.9.2 S3C44B0X看门狗定时器特殊功能寄存器 看门狗定时器控制寄存器(WTCON) 看门狗定时器数据寄存器(WTDAT) 看门狗定时器计数寄存器(WTCNT)

看门狗定时器控制寄存器(WTCON)

看门狗定时器数据寄存器(WTDAT) 看门狗定时器计数寄存器(WTCNT) t_watchdog=1/( MCLK / (预分频值+1) /分频系数 ) T_watchdog= WTDAT × t_watchdog 看门狗定时器数据寄存器(WTDAT) 看门狗定时器计数寄存器(WTCNT)

6.9.3 S3C44B0X看门狗定时器应用编程 void Test_WDTimer(void) { rINTMSK=~(BIT_GLOBAL|BIT_WDT); pISR_WDT=(unsigned)Wdt_Int; isWdtInt=0; rWTCON=((MCLK/1000000-1)<<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/1000000-1)<<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); }

4.10 S3C44B0X LCD控制器功能及应用开发 4.10.1 S3C44B0X LCD 控制器的特性    存器 4.10.5 S3C44B0X LCD 编程举例

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)。

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象素数据输入端口。

LCD控制器框图

接口信号时序图

4.10.3 S3C44B0X LCD 控制器的操作 1. 灰度模式操作 2. 彩色模式操作 3. 扫描模式操作 4. 数据的存放与显示

S3C44B0X LCD 控制器的操作 像素点格式:2模式 灰度模式操作 2位像素(4级灰度,可在16级中选出) 4位像素(16级灰度) 像素点格式:4模式 彩色模式操作 3位红(从16种红中选出8种) 3位绿(从16种绿中选出8种) 2位蓝(从8种蓝中选出4种) 像素点格式:3-3-2模式

S3C44B0X LCD 控制器的操作 扫描模式操作 4位单/双扫描 8位单扫描

S3C44B0X LCD 控制器的操作 数据的存放与显示 4位双扫描数据的存放与显示

S3C44B0X LCD 控制器的操作 数据的存放与显示 4位/8位单扫描数据的存放与显示

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.抖动模式寄存器

LCD控制寄存器1(LCDCON1)

LCD控制寄存器1(LCDCON1) 16.5MHz > VCLK > 数据传输的速率 HS × VS × FR × MV

HOZVAL=( 水平显示长度 / 有效VD数据线的数量) -1 在彩色模式下: 水平显示长度= 3 × 水平像素点数 LCD控制寄存器2(LCDCON2) HOZVAL=( 水平显示长度 / 有效VD数据线的数量) -1 在彩色模式下: 水平显示长度= 3 × 水平像素点数 LINEVAL=垂直显示宽度-1;单扫描 LINEVAL=垂直显示宽度/2-1;双扫描

LCD控制寄存器3(LCDCON3)

帧缓冲起始地址寄存器1(LCDSADDR1)

帧缓冲起始地址寄存器2(LCDSADDR2)

帧缓冲起始地址寄存器3(LCDSADDR3)

GREEN查找表寄存器(GREENLUT) RED查找表寄存器(REDLUT) GREEN查找表寄存器(GREENLUT) BLUE查找表寄存器(BLUELUT)

不同模式的MV frame_rate(Hz)=1 / [ ( (1/VCLK) × (HOZVAL+1)+(1/MCLK) ×         (WLH+WDLY+LINEBLANK) ) × ( LINEVAL+1) ]

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; }

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; }

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); }