haihongyuan.com
海量文库 文档专家
全站搜索:
您现在的位置:首页 > 小学教育 > 小学英语小学英语

arm课件

发布时间:2014-01-05 10:45:19  

嵌入式系统讲义

第4章 S3C2410X系统结构

第三章习题解答
1、 ARM指令中的第二操作数“operand2”有哪些具 体形式? 解:有三种:寄存器、寄存器移位、8位位图立即数。

2、 对于ARM的变址寻址方式,有基地址和偏移地址两部分 组成。(1)基地址可以是哪些寄存器?(2)偏移地址可以 有哪些形式?(3)总地址的计算方法有哪些?怎么表示? (4)变址寻址应用于哪些指令? 解:(1)基地址可以是通用寄存器R0---R15中的任意一个。 (2)偏移地址可以有三种形式:12位立即数、寄存器、 寄存器移位。 (3)总地址的计算方法。有三种:前索引偏移、后索引 偏移、程序相对偏移。 即偏移地址的计算方法
– 前索引偏移:即先使用偏移,后传送数据。不定修改基地址。 如:LDR Rd,[Rn,#m]; STR Rd,[Rn,#m]!(修改基地址) – 后索引偏移:即先传送数据,后先使用偏移,修改基地址。 如:LDR Rd,[Rn],#m – 相对偏移:寻址地址在PC中,以当前指令为基地址,±4KB内。 如:LDR Rd,lable ;lable为程序标号

(4) 有4条指令: LDR、STR、LDM、STM

3、 存储器从0x400000开始的100个单元中存放着ASCII码, 编写程序,将其所有的小写字母转换成大写字母,对其它 的ASCII码不做变换。 解: MOV R0,#0x400000 MOV R1,#0 LP LDRB R2,[R0,R1] CMP R2,#0x61 BLO NEXT CMP R2,#0x7B ;0x61---0x7A为小写字母的ASC SUBLO R2, R2,#0x20 STRBLO R2,[R0,R1] NEXT ADD R1, R1,#1 CMP R1,#100 BNE LP

4、 编写程序,比较存储器中0x400000和0x400004 两无符号字数据的大小,并且将比较结果存于 0x400008的字中,若两数相等其结果记为0,若前 者大于后者其结果记为1,若前者小于后者其结果 记为-1。 解: MOV R0,#0x400000 LDR R1,[R0] ;取第1个数 LDR R2,[R0,#4] ;取第2个数 CMP R1,R2 ;两个数相比较 MOVHI R1,#1 ;R1大 MOVLO R1,# -1 ;R1小 MOVEQ R1,#0 ;两个数相等 STR R1,[R0,#8]

7、 编写一程序,存储器中从0x400200开始有一个64位数。 (1)将取反,再存回原处;(2)求其补码,存放到 0x400208处 。 解: LDR R0,=0x400200 LDR R2,=0xFFFFFFFF LDR R1,[R0] ;取低32位数 EOR R1,R1,R2 ;取反 STR R1,[R0] ;存低32位反码 ADDS R1,R1,#1 ;又加1为求补 STR R1,[R0,#8] ;存低32位补码 LDR R1,[R0,#4] ;取高32位数 EOR R1,R1,R2 ;取反 STR R1,[R0,#4] ;存高32位反码 ADC R1,R1,#0 ;高32位求补 STR R1,[R0,#12] ;存高32位补码

8、 编写一简单ARM汇编程序段,实现1+2+…+100 的运算。 解: MOV R2,#100 MOV R1,#0 LOOP ADD R1,R1,R2 ;R1中为累加和 SUBS R2,R2,#1 ;R2控制循环 BNE LOOP





本章作业:2、3、5、7、10、12、15
1、S3C2410X主要特性有哪些? 2、S3C2410X的结构分为几个部分

?每一部分主要由哪些部 件构成? 3、S3C2410X的存储器由哪几部分构成,每一部分有什么特 点?存储器主要有哪些控制寄存器? 4、S3C2410X的Flash有哪些特点? 5、S3C2410X的DMA有哪些特点?其工作过程是怎样的?每 个通道配置有哪些寄存器? 6、S3C2410X的A/D转换器有哪些特点?有哪些相关的寄存器? 7、编写一程序,用查询的方式,对S3C2410X的A/D转换器的 第0通道连续进行100次A/D转换,然后将其结果求平均值。 注意:A/D转换器有独立的模拟信号输入引脚AIN0---AIN9。

8、S3C2410X的中断系统有哪些特点?相关的寄存器有哪些? 9、S3C2410X的中断控制器的工作过程是怎样的?对于IRQ,整 个中断过程是怎样的(中断控制器处理,向CPU请求,转到 中断入口,转去获得中断服务程序的首地址,执行中断服务 程序)? 10、编写一程序,使用外部中断EINT0,用中断方式对端口C做 数据输入。(注意对中断系统和相关引脚进行初始化) 提示:C语言指向特定地址的方法: (1)#define rGPCDAT (*(volatile unsigned *)0x56000024) (2)int *rGPCDAT=0x56000024; (3)int *rGPCDAT; rGPCDAT=0x56000024; 用第一种方法为好。 11、S3C2410X的定时器系统有哪些特点?由哪几部分构成?相 关的寄存器有哪些?是如何工作的?

12、编写一程序,使用timer0产生并输出频率为 10KHz、占空比为1/2的方波。设f pclk=50MHz。 (注意对timer0和相关引脚初始化) 13、编写一程序,利用S3C2410X的PWM功能对一 直流电机进行调速,要求使用timer1产生并输出频 率为10KHz、占空比可变的方波进行控制,电机的 转速变化如下图所示。设f pclk=50MHz。(注意 对timer0和相关引脚初始化)
v 14、S3C2410X的串行 接口UART有哪些特 点?由哪几部分构成? 相关的寄存器有哪些? 0 是如何工作的?

t0

2*t0

t

15、编写一程序,使用S3C2410X的UART2进行串行数 据收发,要求用脉冲请求中断的方式、使用收/发 FIFO,8个数据位、1个停止位、不校验,波特率为 125kb/s。设Pclk为50MHz。(提示:主程序对 UART2初始化、引脚配置、中断初始化等,并进行 一次发送;中断服务程序进行收发,并且清除中断请 求标志和中断服务标志) 16、S3C2410X的SPI接口有哪些特点?由哪几部分构成? 相关的寄存器有哪些?有哪几种传输方式? 17、把S3C2410的SPI0设为主设备,同时把SPI1设为从 设备,将二者的MOSI、MISO交叉相连,二者的 SCL对连, 用GPG0引脚控制nSS1。编写程序, SPI0用中断方式、 SPI1用查询方式,采用格式B、 1Mb/s的波特率,SPI0发送数据、SPI1接收数据,发 送、接收100个字节的数据。设系统Pclk=50MHz。

18、S3C2410X的IIC接口有哪些特点?由哪几部分构 成?各种传输方式如何?相

关的寄存器有哪些? 19、试编写一程序,用S3C2410的IIC接口对串行 EEPROM(IIC接口)进行读/写操作,写入一组数 据,然后读出并显示出来,检验是否正确。 20、S3C2410X的RTC有哪些功能、特点?由哪几部 分构成?相关的寄存器有哪些? 21、编写一程序,对S3C2410的RTC进行设置,使用 报警功能,每1小时报警中断一次,中断后显示出 当前的日期和时间。初始日期、时间要设置为正确 值。

22、编写一程序,对S3C2410的RTC进行设置,使用 节拍中断,每0.5秒中断一次,中断后显示出当前的 日期和时间。初始日期、时间要设置为正确值。 23、编写一程序,利用S3C2410看门狗中断产生频率 约为600Hz的方波,并且从GPB10引脚输出。设 S3C2410的PCLK为50MHz。

第4章 S3C2410X系统结构
主要内容
4.1 S3C2410X概述 4.2 存储器配置 4.3 DMA 4.4 ADC和触摸屏接口 4.5 中断控制器 4.6 I/O端口 4.7 PWM 4.8 UART接口 4.9 SPI接口 4.10 IIC接口 4.11 RTC 4.12 USB接口 4.13看门狗 4.14 其它接口

4.14 其它接口
1、时钟和电源管理 2、 LCD控制器 3、 SD接口 4、 IIS接口

4.9 SPI串行总线接口
主要内容
1、概述 2、结构与工作原理 3、寄存器 4、应用方法 5、SPI应用举例
重点: 工作原理时序;控制寄存器;应用

一、SPI接口概述
?
SPI接口:SPI(Serial Peripheral Interface,串行外设 接口)是Motorola公司开发的一种同步串行外设接口标准。 ? SPI接口信号:有4个信号:数据发送、数据接收、时 钟和片选。在时钟信号的作用下,发送的同时,接收对方 发来的数据;也可以只发送、或者只接收。SPI的波特率可 以达到20Mb/s以上。 S3C2410 ARM9有2个SPI接口,既可以作为主SPI使用, 也可以作为从SPI使用。 ? 主要特点: – 与SPI 协议 (ver. 2.11) 兼容;
– – – – 8位发送移位寄存器; 8位接收移位寄存器; 8位预分频器; 具有查询、中断、DMA传输模式。

二、S3C2410 SPI结构与工作原理
1、SPI结构
SPI主要由4部分构成:时钟分频器、发送移位寄存器、 接收移位寄存器、控制逻辑等。如下图所示。

2、SPI设备系统组成
系统可以多个SPI设备组成,任何一个设备都可以为主 SPI,但是任一时刻只能有一个主SPI设备,并且主SPI设备 发出时钟信号和片选控制信号,选择通信的从SPI设备。如 下图所示。
SCK MISO MOSI

主 SPI 设 备

从SPI 1

从SPI 2

……

从SPI n

nSS

3、SPI工作时序
下图为时序的一部分。

图 (A)

图 (B)

Format CPOL和CPHA 第一位数据输出 其它位数据输出 数据采样
A B A CPOL=0,CPHA=0 第1个SCK上升沿前 CPOL=0,CPHA=1 第1个SCK上升沿 CPOL=1,CPHA=0 第1个SCK下降沿前 SCK下降沿 SCK上升沿 SCK上升沿 SCK上升沿 SCK下降沿 SCK下降沿

B

CPOL=1,CPHA=1 第1个SCK下降沿

SCK

下降沿

SCK上升沿

三、SPI专用寄存器
2个UART,每个都有6个专用寄存器,共12个寄存器
Register
SPCONn

Address
0x590000x0

R/W
R/W

Description
SPI控制寄存器

Reset Value
0x00

SPSTAn
SPPINn SPPREn SPTDATn SPRDATn

0x590000x4
0x590000x8 0x590000x0 0x590000x4

R
R/W R/W R

SPI状态寄存器
SPI引脚控制寄存器 SPI预分频寄存器 SPI数据发送寄存器 SPI数据接收寄存器

0x01
0x02 0x00 0x00 0x00

0x590000xC R/W

1、SPI控制寄存器(SPCON)
Register
SPCON0 SPCON1

Address

R/W

Description
SPI0 控制寄存器 SPI1 控制寄存器

Reset Value
0x00 0x00

0x59000000 R/W 0x59000020 R/W

字段名
SMOD ENSCK MSTR


6:5 4 3

意 义
SPI模式选择。00:查询模式; 01:中断; 10:DMA模式; 11:保留 时钟SCK控制。 0:禁止;1:允许。 SPI主、从选择。 0:从SPI;1:主SPI

初值
00 0 0

CPOL
CPHA Tx Auto Garbage Data Mode Enable (TAGD)

2
1

时钟极性选择。0:高电平有效;1:低
时钟相位选择。0:格式A;1:格式B 仅接收模式控制。0:正常收发; 1:仅接收(此时(自动)发送任意数据) 用于主SPI仅接收,读取数据启动发送

0
0

0

0

实验:从SPI仅接收时使TAGD=0,不向SPTDAT写数据的情况

2、SPI状态寄存器(SPSTA)
Register
SPSTA0

Address
0x59000004

R/W
R

Description
SPI0 状态寄存器

Reset Value
0x01

SPSTA1

0x59000024

R

SPI1 状态寄存器

0x01

字段名
reserved
Data Collision Error Flag (DCOL)


7:3 2 1 保 留

意 义
数据写碰撞(正在发送时写SPTDAT) 错误标志。 0:无错;1:碰撞错误 多主SPI错误标志。 0:无错;1:多主SPI错误。 收发就绪标志。 0:未就绪; 1:收或发就绪。 写SPTDAT后该位自动清0

初值

0 0

Multi Master Error Flag (MULF)

Transfer Ready Flag (REDY)

0

1

3、SPI引脚控制寄存器(SPPIN)
Register
SPPIN0

Address

R/W

Description
SPI0 引脚控制寄存器

Reset Value
0x02

0x59000008 R/W

SPPIN1

0x59000028 R/W

SPI1 引脚控制寄存器

0x02

字段名
reserved
Multi Master error detect Enable (ENMUL)


7:3 2 1 0 保 留

意 义
引脚多主SPI错误测试设置。 0:禁测;1:允许多主错误测试。 测试结果在SPSTAn中的MULF位 该位应该为1

初值

0 1 0

reserved

Master Out Keep (KEEP)

1字节发完后MOSI的控制与释放 0:释放;1:保持MOSI原电平

4、SPI预分频寄存器(SPPRE)
Register
SPPRE0

Address

R/W

Description
SPI0 预分频寄存器

Reset Value
0x00

0x5900000C R/W

SPPRE1

0x5900002C R/W

SPI1 预分频寄存器

0x00

字段名
Prescaler value


7:0 预分频值

意 义

初值

波特率计算:

Baud tate f B = Pclk/2/( Prescaler value + 1 )

Prescaler value = Pclk/2/f B - 1
提示:SPI的波特率必须<25MHz。

5、SPI发送数据寄存器(SPTDAT)
Register Address R/W Description
SPI0 发送数据寄存器 SPI1 发送数据寄存器

Reset Value
0x00 0x00

SPTDAT0 0x59000010 R/W SPTDAT1 0x5

9000030 R/W

字段名
Tx data


7:0

意 义
SPI所发送的8位数据

初值
0x00

提示:在同时双向传输时,从SPI设备必须先把所发送 的数据写到“发送数据寄存器”SPTDATn中,然后再写主 SPI设备的“发送数据寄存器”SPTDATn。

6、SPI接收数据寄存器(SPRDAT)
Register Address R/W
R R

Description
SPI0 接收数据寄存器 SPI1 接收数据寄存器

Reset Value
0x00 0x00

SPRDAT0 0x59000014 SPRDAT1 0x59000034

字段名
Tx data


7:0

意 义
SPI所接收的8位数据

初值
0x00

提示:在同时双向传输时,启动发送后,应该先读取 数据,然后再发送数据。

四、SPI应用方法
1、查询方式操作步骤
如果SPI控制寄存器SPCON已经设置过,则写数据发 送寄存器SPTDAT启动发送。查询方式操作步骤如下: (1)设置预分频寄存器SPPRE; (2)设置控制寄存器SPCON,并且为查询方式; (3)设置一个GPIO引脚,使选中的从SPI设备的片选 信号nSS有效; (4)发送数据: 第一次发送:向数据发送寄存器SPTDAT写数据。 再发送: 情况1只发不收:查询并确认Rx REDY为1,然后向数 据发送寄存器SPTDAT写数据,再次启动发送; 情况2同时收发:查询并确认Rx REDY为1,然后先读 取数据接收寄存器SPRDAT中的数据,再向数据发送寄存 器SPTDAT写数据。

(6)接收数据: 一般方式(同时收发,TAGD=0):查询并确认Rx REDY为1,然后先从数据接收寄存器中读取数据,再向数 据发送寄存器中写数据(同上面情况2)。 仅接收方式(TAGD=1):查询并确认Rx REDY为1, 然后从数据接收寄存器中读取数据。对于主SPI设备,读取 数据的同时启动一次发送(从SPI设备发送)。 (7)设置GPIO引脚,使选中的从SPI设备的片选信号 nSS无效,结束传输。

2、DMA模式发送
对SPI的DMA模式发送操作步骤如下: (1)设置预分频寄存器SPPRE; (2)设置控制寄存器SPCON,并且设为DMA 模式; (3)SPI请求DMA服务; (4)DMA发送1字节数据给SPI; (5)SPI接口发送数据; (6)返回到(3),直到DMA的计数器为0。

3、DMA模式接收
SPI以DMA模式接收操作步骤如下: (1)设置预分频寄存器SPPRE; (2)设置控制寄存器SPCON,并且设为DMA模式; (3)将SPI设置为仅接收模式,设置引脚控制寄存器 SPPIN中的TAGD为1; (4)当SPI接收到1字节数据后,请求DMA服务; (5)DMA从SPI读取数据; (6)SPI自动启动一次无用数据(0xFF)的发送; (7)返回到(4),直到DMA的计数器为0; (8)设置控制寄存器SPCON,改设为其它模式,如查 询、中断模式; (9)如果Rx REDY被设置为1,则需要读取最后接收 的数据。 注意:DMA第1次接收的是数据的无效的。

4、 SPI从设备以格式B接收的问题
当SPI从设备以格式B接收,DMA的

读信号比数据接收 的锁存信号早,在数据未锁存之前,读信号就出现了。因 此使用DMA模式不能够正确接收。如下图所示。 对于中断和查询模式,可以延时半个时钟,能够正确 读取数据。

五、SPI接口应用举例
把S3C2410的SPI0设为主设备,同时把SPI1设为从设备, 将二者的MOSI、MISO交叉相连,二者的SCL对连, 用 GPG0引脚控制nSS1。编写程序, SPI0用中断方式、 SPI1 用查询方式,采用格式B、1Mb/s的波特率,SPI0和SPI1在 发送的同时接收数据,双方都发送、接收100个字节的数据。 设系统Pclk=50MHz。 解: (1)SPI计算预分频值: 由 Baud tate = Pclk/2/( Prescaler value + 1 ) Prescaler value = Pclk/2/Baud tate - 1=24 (2)SPI控制寄存器值 SPCON0=0b 01 1 1 0 1 0 = 0x3A 含义:中断模式、使用时钟、主设备、0极性、格式B、 一般收发传输。 SPCON1=0b 01 0 0 0 1 0 = 0x22 含义:中断、不用时钟、从设备、0极性、格式B、收发

(3)SPI引脚控制寄存器
SPPIN0=0b 0 1 1 = 0x03 含义:不检测多主错误、保留1、输出引脚保持输出。 SPPIN1=0b 0 1 1 = 0x03 (4)SPI引脚配置 GPECON=0b ** ** 10 10 10 ** …… 先清0:&~(0xFC<<20);再设置:|(0xA8<<20) GPGCON=0b …… 11 11 11 ** 11 11 ** 01 先清0:&~0xFCF3);再设置:|(0xFCF1)
SPI0引脚 GPECON 29 * 28 * 27 1 26 0 25 1 24 0 23 1 22 0 21 * 20 *

CLK0 SPI0引脚 15 14 13 12 11 10 9 GPGCON 1 1 1 1 1 1 *

MOSI0 8 * 7 1 6 1

MISO0 5 1 4 1 3 * 2 * 1 0 0 1

CLK1 MOSI1MISO1

*

nSS1

nSS0

*

输出

中断模式寄存器: INTMOD &=~(1<<22) INT_UART2位于第15位,将UART2设置为IRQ中断 中断屏蔽寄存器: INTMSK&=~ (1<<22) 中断优先级寄存器PRIORITY: 不设置,用复位值0x7F,优先级为循环方式。

(4)中断寄存器设置

(5)在中断服务程序中对寄存器的操作
清除中断标志寄存器相应位: SRCPND&=~ (1<<22) 清除中断服务寄存器相应位: INTPND&=~ (1<<22)

第17讲到此

#include "2410header.h"

void Main(void) { sysinit();
while(1) { Uart_Printf("\n 2410 Board SPI TEST!\n"); Test_SPI( ); } }

char tran_data0[100], rec_data0[100], num0=0; char tran_data1[100], rec_data1[100], num1=0; void Test_SPI(void) { rSPPRE0=24; rSPPRE1=24; rSPCON0=0x3A; rSPCON1=0x22; rSPPIN0=0x03; rSPPIN1=0x03; rGPECON = rGPECON & ~(0xFC<<20)|(0xa8<<20); rGPGCON = rGPGCON & ~0xFCF3 | 0xFCF1; rGPGDAT = rGPGCON & ~1; //使GPG0输出0

INTMOD &=~(1<<22); INTMSK &=~(1<<22);
pISR_SPI0=(U32)spi0_int;

rSPTDAT1=tan_data1[num1]; rSPTDAT0=tan_data0[num0]; for(;num1<100;) { while(rSPSTA1&1==0); INTMSK |=(1<<22); //关闭SPI0中断 rec_data[num1] = rSPRDAT1; num1++; if(num1<100) rSPTDAT1=tan_data1[num1]; INTMSK &=~(1<<22); //打开SPI0中断 } INTMSK |=(1<<22); //关闭SPI0中断 rGPGDAT |= 1; //使GPG0输出1,nSS1为高 }

void _irq spi_int(void) { rec_data[num0]=rSPRDAT0; num0++; if(num<100) rSPTDAT0 = tran_data[num0]; SRCPND &=~ (1<<22);

INTPND &=~ (1<<22); }
//清除中断标志寄存器相应位

//清除中断服务寄存器相应位

#define rSPTDAT0 #define rSPRDAT0 #define rSPTDAT1 #define rSPRDAT1

(*(volatile unsigned *)0x59000010) (*(volatile unsigned *)0x59000014) (*(volatile unsigned *)0x59000030) (*(volatile unsigned *)0x59000034)

//SPI0 Tx data //SPI0 Rx data //SPI1 Tx data //SPI1 Rx data

4.10 I2C(IIC)串行总线接口
主要内容
1、概述 2、结构与工作原理 3、寄存器 4、应用方法 5、IIC应用举例
重点: 工作原理时序;控制寄存器;应用

一、概 述
IIC总线的产生和应用:IIC总线是PHILIPS公司开发的 一种串行总线。IIC总线应用越来越广泛,现在在很多器件 上都配置有IIC总线接口,如EEPROM、时钟芯片等。 IIC总线信号:为两线,一个能够双向传输的数据线SDA、 另一个能够双向传输的时钟线SCL。是信号线最少的串行总 线。 S3C2410的IIC总线的特点: (1)有一个IIC总线接口。 (2) IIC总线的速度:可以标准速度传输(100kb/s), 也可以高速传输(高达400kb/s)。 (3)可以查询方式和中断方式工作。 (4)可以主设备身份传输,也可以从设备身份传输,因 此共有4种操作模式: 主机发送模式、主机接收模式 从机发送模式、从机接收模式

二、S3C2410的IIC结构与工作原理
1、S3C2410的IIC结构
S3C2410的IIC主要有5部分构成:数据收发寄存器、数 据移位寄存器、地址寄存器、时钟发生器、控制逻辑等部 分。如下图所示。 状态寄存器
SCL Pclk

比 较 器
分 频 器

地址寄存器 移位寄存器 数据收发寄存器
片内数据总线 SDA

IIC控制逻辑 控制寄存器

2、IIC总线系统组成
IIC总线是多主系统:系统可以有多个IIC节点设备组成, 并且可以是多主系统,任何一个设备都可以为主IIC;但是任 一时刻只能有一个主IIC设备,IIC具有总线仲裁功能,保证 系统正确运行。 主IIC设备发出时钟信号、地址信号和控制信号,选择通 信的从IIC设备和控制收发。 系统要求:(1)各个节点设备必须具有IIC接口功能; (2)各个节点设备必须共地;(3)两个信号线必须接上拉 电阻。如下图所示。 +Vcc
上拉电阻 SCL

SDA

IIC 1
主IIC

IIC 2

……

IIC n

3、IIC总线的工作原理
(1)IIC总线对数据线上信号的定义:
1)总线空闲状态:时钟信号线和数据信号线均为高电平。 2)起始信号:即启动一次传输,时钟信号线是高电平时, 数据信号线由高变低。 3)停止信号:即结束一次传输,时钟信号线是高电平时, 数据信号线由低变高。
数据位信号 数据位

SDA

SCL

起始信号

结束信号

4)数据位信号:时钟信号线是低电平时,可以改变数据 信号线电位;时钟信号线是高电平时,应保持数据信号线上 电位不变,即时钟是

高电平时数据有效。 5)应答信号:占1位,数据接收者接收1字节数据后,应 向数据发出者发送一应答信号。低电平为应答,继续发送; 高电平为非应答,结束发送。 6)控制位信号:占1位,主IIC设备发出的读写控制信号, 高为读、低为写(对主IIC设备而言)。控制位在寻址字节中。
数据位信号 数据位

SDA SCL

起始信号

结束信号

7)地址信号:为从机地址,占7位,如下表所示,称 之为“寻址字节”,各字段含义如下:
D7 DA3 D6 DA2 D5 DA1 D4 DA0 D3 A2 D2 A1 D1 A0 D0 R/ W

器件地址(DA3---DA0):是IIC总线接口器件固有的地 址编码,由器件生产厂家给定。如IIC总线EEPROM AT24C××的器件地址为1010等。 引脚地址(A2、A1、A0):由IIC总线接口器件的地址 引脚A2、A1、A0的高低来确定,接电源者为1,接地者为0。 读写控制位(R/ W):1表示主设备读,0表示主设备写。 7位地址和读写控制位组成1个字节。

(2)IIC总线数据传输格式
1)一般格式: S 从IIC地址(7位) R/W A 传输数据 …… A P

2)主控制器写操作格式:
S 从IIC地址 W A 数据1 A 数据2 A …… 数据n A/A P

红色起始信号S、地址信号、控制信号W、各个数据、结 束信号P,均为主IIC设备发送、从IIC设备接收;黑色的应答 信号A/A为从IIC设备发送、主IIC设备接收。 3)主控制器读操作格式:
S 从IIC地址 R A 数据1 A 数据2 A …… 数据n A P

红色的信号均为主IIC设备发送、从IIC设备接收;黑色的 信号均为从IIC设备发送、主IIC设备接收。

4)主控制器读/写操作格式: 由于在一次传输过程中要改变数据的传输方向,因此 起始信号和寻址字节都要重复一次,而中间可以不要结束 信号。 在一次传输中,可以有多次启动信号。

S 从IIC地址 R A 数据1 A 数据2 A

… A rS 从地址 W A

数据1 A 数据2 A

数据3 A

……

数据m A/A P

(3)读写操作
在发送器模式下,数据被发送之后,IIC 总线接口会等 待直到 IICDS(IIC 数据移位寄存 器)被程序写入新的数 据。在新的数据被写入之前,SCL 线都被拉低。新的数据 写入之后, SCL 线被释放。 S3C2410X 可以利用中断来判断当前数据字节是否已经 完全送出。在 CPU 接收到中断请求后,在中断处理中再次 将下一个新的数据写入 IICDS,如此循环。 在接收模式下,数据被接收到后,IIC 总线接口将等待 直到 IICDS 寄存器被程序读出。 在数据被读出之前,SCL 线保持低电平。新的数据从读出之后,SCL 线才释放。 S3C2410X 也利用中断来判别是否接收到了新的数据。 CPU 收到中断请求之后,处理程序将从 IICDS 读取数据。

(4)总线仲裁
总线仲裁发生在两个主IIC设备中。如果一个 主设备欲使用总线,而测得SDA为低电

平,则该主 设备仲裁不能够使用总线启动传输。这个仲裁过程 会延长,直到信号线SDA变为高电平。 每次操作都要进行仲裁。

三、IIC专用寄存器
S3C2410有4个专用寄存器
Register
IICCON

Address
0x54000000

R/W
R/W R/W

Description
IIC总线控制寄存器 IIC总线地址寄存器

Reset Value 0x0X

IICSTAT
IICADD IICDS

0x54000004
0x54000008

R/W IIC总线控制/状态寄存器

0x0
0xXX 0xXX

0x5400000C R/W IIC数据发送/接收寄存器

1、IIC控制寄存器(IICCON)
字段名
Acknowledge generation


7

意 义
应答使能。0:禁止应答;1:自动应答 应答电平:Tx时为高;Rx时为低 发送时钟分频选择。 0:IICCLK = f PCLK /16; 1:IICCLK = f PCLK /512 收发中断控制位。0:禁止;1:允许 中断标志位。读:0无,1示有中断请求 写:写0清除中断标志,写1不操作

初值
00

Tx clock source selection
Tx/Rx Interrupt Interrupt Pending flag Transmit clock value

6
5 4

0
0 0 0

发送时钟预分频值。 3:0 Tx clock = IICCLK/(IICCON[3:0]+1)

1、IIC控制寄存器(续)
说明: (1)应答使能问题:一般情况下为使能;在对EEPROM 读最后1个数据前可以禁止应答,便于产生结束信号。 (2)中断事件:1)完成收发;2)地址匹配;3)总线 仲裁失败。 (3)中断控制位问题:设为0时,中断标志位不能正确操 作,故总设为1。 (4)时钟预分频问题:当分频位选择为0时,预分频值必 须大于1。

2、IIC控制状态寄存器(IICSTAT)
字段名
Mode selection
Busy / START STOP condition Serial output Arbitration Status flag Address-as-slave status flag


7:6
5 4 3 2

意 义
工作模式选择。 00:从收; 01:从发 10:主收; 11:主发 忙状态/启、停控制。读:1示忙;0示闲 写:0产生结束信号,1产生启动信号 数据发送控制。0:禁止;1:允许发送 仲裁状态标志。0:仲裁成功; 1:仲裁失败(因为在连续I/O中) 从地址匹配状态。 0:与IICADD不匹配 1:匹配。在收到SART/STOP时清0

初值
00
0 0 0 0

Address zero status flag
Last-received bit status flag

1
0

地址状态标志。 0:收到的为非0地址 1:收到0地址。在收到SART/STOP时清0
最后收到位状态。0:最后位为0,收到 ACK; 1:最后位为1,未收到ACK。

0
0

2、IIC控制状态寄存器(续)
字段名
Mode selection


7:6 5 4

意 义
工作模式选择。 00:从收; 01:从发 10:主收; 11:主发 忙状态/启、停控制。读:1示忙;0示闲 写:0产生结束信号,1产生启动信号 数据发送控制。0:禁止;1:允许发送

初值
00 0 0

Busy / START STOP condition
Serial output

IICSTAT控制字: 启动主设备发送:0xF0;结束主设备发送:0xD0 启动主设备接收:0xB0;结束主设备接收:0x90

第18讲到此

3、IIC地址寄存器(IICADD)
Register
IICADD

Address

R/W

Des

cription
地址寄存器

Reset Value
0xXX

0x54000008 R/W

字段名
Slave address Not mapped


7:1 0 7位从地址。 不用

意 义

初值
0xXX -

说明: (1)对从设备,该地址有意义,对主设备其值无意义。 (2)只有在不发送数据时(数据传输控制位IICSTAT[4] =0)才能对其写;任何时间都可以读。

4、IIC数据发送/接收寄存器(IICDS)
Register Address R/W Description Reset Value
0xXX IICADD 0x5400000C R/W 数据发送/接收移位寄存器

字段名
Data shift


7:0

意 义
8位移位接收或移位发送的数据

初值
0xXX

说明: (1)在本设备接收时,对其作读操作得到对方发来的数 据。任何时间都可以读。 (2)在本设备发送时,对其写操作,将数据发向对方。 (3)欲发送数据,必须使数据传输控制位IICSTAT[4] =1 才能对其写。

四、IIC操作方法
1、 主 模 式 发 送 流 程
开 始 设置IICCON 从地址写入IICDS 写0xF0到IICSTAT
主机发送数据 ACK、产生中断 Y 要停止? N 发送数据写入IICDS 清除中断标志 写0xD0到IICSTAT 清除中断标志 写SART 启动传输

写STOP 结束传输

等待停止位起作用
结 束

开 始

2、 主 模 式 接 收 流 程

设置IICCON 从地址写入IICDS 写0xB0到IICSTAT
主机发送寻址字节 ACK、产生中断 要停止? N 从IICDS中读数据 清除中断标志 Y

写SART 启动传输

写STOP 结束传输

写0x90到IICSTAT 清除中断标志

等待停止位起作用
结 束

主机发送数据

五、IIC接口应用举例
例:试编写一程序,用S3C2410的IIC接口对串行 EEPROM(IIC接口)进行读/写操作,写入一组数据,然 后读出并显示出来,检验是否正确。 分析:S3C2410的IIC为主设备,EEPROM的IIC为从 设备,进行的操作为主设备写、和主设备读。 解: (1)设置IIC控制寄存器 1)收发传输:IICCON=0b 1 0 1 0 1111 = 0xAF 含义:应答使能、时钟分频为 IICCLK = f PCLK /16 、 中断使能、清除中断标志、预分频值取15。 2)接收结束传输:IICCON=0b 0 0 1 0 1111 = 0x2F 含义:禁止应答(非应答)、时钟分频为 IICCLK = f PCLK /16 、中断使能、清除中断标志、预分频 值取15。

(2)IIC控制状态寄存器
1)主模式发送、启动传输 IICSTAT=0b 11 1 1 0 0 0 0 = 0xF0 含义:主设备发送、启动传输、输出使能、低4位为状态 2)主模式发送、结束传输 IICSTAT=0b 11 0 1 0 0 0 0 = 0xD0 含义:主设备发送、结束传输、输出使能、低4位为状态 3)主模式接收、启动传输 IICSTAT=0b 10 1 1 0 0 0 0 = 0xB0 含义:主设备接收、启动传输、输出使能、低4位为状态 4)主模式接收、结束传输 IICSTAT=0b 10 0 1 0 0 0 0 = 0x90 含义:主设备接收、结束传输、输出使能、低4位为状态

(3)地址寄存器设置
1)S3C2410地址寄存器: 作为从设备地址为0x10(作为主设备无意义) 2

)EEPROM芯片地址: 作为从设备地址为 0xA0
所寻从设备地址+操作控制命令(R/W): 1)主设备发送: 0xA0 2)主设备接收: 0xA1

(4)寻址字节值

#include <string.h> #include "2410addr.h" #include "2410lib.h" #include "def.h“ U32 _iicStatus;

1、IIC控制寄存器(IICCON)
字段名
Acknowledge generation


7

意 义
应答使能。0:禁止应答;1:自动应答 应答电平:Tx时为高;Rx时为低 发送时钟分频选择。 0:IICCLK = f PCLK /16; 1:IICCLK = f PCLK /512 收发中断控制位。0:禁止;1:允许 中断标志位。读:0无,1示有中断请求 写:写0清除中断标志,写1不操作

初值
00

Tx clock source selection
Tx/Rx Interrupt Interrupt Pending flag Transmit clock value

6
5 4

0
0 0 0

发送时钟预分频值。 3:0 Tx clock = IICCLK/(IICCON[3:0]+1)

void Test_Iic(void) { unsigned int i,j; static U8 data[256];

Uart_Printf("[ IIC Test using AT24C02 ]\n");
rGPEUP |= 0xc000; rGPECON |= 0xa00000; //Pull-up disable //GPE15:IICSDA //GPE14:IICSCL

rIICCON = (1<<7) | (0<<6) | (1<<5) | (0xf); rIICADD = 0x10; //2410 slave address = [7:1] rIICSTAT = 0x10; //IIC bus data output //enable(Rx/Tx)

Uart_Printf("Write test data into AT24C02(0-255)\n");
存储器地址 for(i=0;i<256;i++) _Wr24C02(0xa0,(U8)i,i);

for(i=0;i<256;i++) data[i] = 0;

所写数据

Uart_Printf("\nRead test data from AT24C02\n");
存储数据

for(i=0;i<256;i++) _Rd24C02(0xa0,(U8)i,&(data[i]));
存储器地址

for(i=0;i<16;i++) { for(j=0;j<16;j++) Uart_Printf("%2x ",data[i*16+j]); Uart_Printf("\n"); } }

void _Wr24C02(U8 slvAddr,U8 addr,U8 data) { rIICDS = slvAddr; //发送从设备地址 rIICSTAT = 0xf0; //启动发送 while(rIICCON & 0x10==0); rIICDS = addr; rIICCON = 0xaf; while(rIICCON & 0x10==0); rIICDS = data; rIICCON = 0xaf; //查询Tx中断状态 //发送存储器地址 //清除中断状态 //查询中断状态 //发送数据 //清除中断状态.

while(rIICCON & 0x10==0); while(rIICSTAT&1); rIICSTAT = 0xd0; Delay(1); }

//查询中断状态 //等待应答ACK //Stop(Write) //等待结束生效

4.11 实时钟RTC
主要内容
概述 结构 寄存器 应用举例
重点: (1)控制寄存器; (2)RTC应用

一、概 述
提供可靠的系统时间,包括时、分、秒、和年、月、 日等;而且要求在系统处于关机状态下它也能够正 常工作(后备电池供电),它的外围也不需要太多 的辅助电路,典型的就是只需要一个高精度的 32.768KHz 晶振和电阻电容等。 如电子日历(台式、壁式等)、手持数码产品(手 机、电子词典、各种学习机、照相机、摄像机等)、 电子计量仪表(电度表、燃气表、水表等)、家用 电器(电视机、机顶盒、DVD等)等,应用非常广 泛。

RTC(实时时钟)功能:通常采用RTC 来

RTC应用:现在很多电子产品都有RTC功能,

的芯片,有的产品使用独立的RTC芯片,如壁式

电 子日历、电子计量仪表等;有的产品使用的不是独 立的RTC芯片,而是RTC功能集成到了其它的芯片 中,如手持数码产品等。

RTC芯片:在上面所说产品,都有RTC功能

S3C2410的RTC的特点:
时钟数据采用BCD 编码 时钟数据有:秒、分、时、日、月、年、星期 能够对闰年的年月日进行自动处理 具有告警功能,当系统处于关机状态时,能产生告警中 断 ? 具有独立的电源输入 ? 提供毫秒级时钟中断,该中断可用于作为嵌入式操作系 统的内核时钟 ? ? ? ?

二、S3C2410的RTC结构
1、S3C2410的RTC结构
S3C2410的RTC主要有5部分构成:时钟发生器、 节拍发生器、时间与日期计数器(时分秒年月日星 期)、报警发生器、控制逻辑等部分。如下图所示。
节拍发生器
XTAL1 XTAL2 时钟发生器
RTCVDD

控制逻辑
报警发生器

时 钟 分 频 器

时分秒计数器 日星期计数器 年月计数器 闰年发生器

PMWKUP ALMINT PWDN

2、S3C2410 RTC的振荡电路
S3C2410 RTC的只需外接2个20P左右的小电 容、32.768KHz的晶振即可。如下图所示。

三、RTC专用寄存器
S3C2410的RTC有17个专用寄存器,均需用字 节读写。下表为前10个,有4个为控制寄存器,6个 为报警寄存器。 R/W Register Address Description Reset Value
RTCCON 0x57000040/3 R/W TICNT 0x57000044/7 R/W

RTC控制寄存器 RTC节拍计数器

0x0 0x00 0x00 0x0 0x00 0x00

RTCALM 0x57000050/3 R/W RTC报警控制寄存器 RTCRST 0x5700006C/F R/W RTC循环复位寄存器 ALMSEC 0x57000054/7 R/W ALMMIN 0x57000058/B R/W

报警秒数寄存器 报警分钟数寄存器

ALMHOUR 0x5700005C/F R/W
ALMDAY 0x57000060/3 R/W ALMMON 0x57000064/7 R/W ALMYEAR 0x57000068/B R/W

报警小时数寄存器
报警天(日)数寄存器 报警月数寄存器 报警年数寄存器

0x00
0x01 0x01 0x00

三、RTC专用寄存器
S3C2410的RTC有17个专用寄存器,均需 用字节读写。下表为4个控制寄存器。
Register Address R/W Description Reset Value

RTCCON 0x57000040/3 R/W RTC控制寄存器 0x0 TICNT 0x57000044/7 R/W RTC节拍计数器 0x00 0x57000050 RTC报警 RTCALM R/W 0x00 /3 控制寄存器 0x5700006C RTC秒循环 RTCRST R/W 0x0 /F 复位寄存器

本表6个寄存器:为报警日期、时间寄存器
Register
ALMSEC ALMMIN ALMHOUR ALMDAY ALMMON ALMYEAR

Address
0x57000054/7 0x57000058/B 0x5700005C/F 0x57000060/3 0x57000064/7 0x57000068/B

R/W

Description

Reset Value

R/W 报警秒数寄存器 0x00 R/W 报警分钟数寄存器 0x00 R/W 报警小时数寄存器 0x00 R/W 报警天(日)数寄存器 0x01 R/W 报警月数寄存器 0x01 R/W 报警年数寄存器 0x00

后7个寄存器: 为日期、时间寄存器。
Register Address R/W Description

Reset Value

BCDSEC 0x57000070/3 R/W 秒当前值寄存器 0xXX BCDMIN 0x57000074/7 R/W 分钟当前值寄存器 0xXX BCDHOUR 0x57000078/B R/W 小时当前值寄存器 0xXX BCDDAY 0x5700007C/F R/W

日当前值寄存器 0xXX BCDDATE 0x57000080/3 R/W 星期当前值寄存器 0xXX BCDMON 0x57000084/7 R/W 月当前值寄存器 0xXX BCDYEAR 0x57000088/B R/W 年当前值寄存器 0xXX

1、RTC控制寄存器(RTCCON)
Register Address R/W Description
Reset Value

0x57000040(L) R/W RTCCON RTC控制寄存器 0x57000043(B) (字节)

0x0 初值
0 0 0 0

字段名 位





RTC时钟计数复位。 CLKRST 3 0:不复位;1 = BCD计数复位。 BCD计数选择。0:合并BCD计数; CNTSEL 2 1 = 保留(单独的BCD计数器) BCD时钟选择。 0:XTAL/32768 CLKSEL 1 1:用XTAL原值(但只用于测试) RTC控制使能。 0:失能; 1:使能 RTCEN 0 指BCD时间计数和读取操作可以被执行

2、RTC节拍时间计数器(TICNT)
Register Address R/W Description
RTC节拍时间 计数器
Reset Value

0x57000044(L) R/W TICNT 0x57000047(B) (字节)

0x00 初值
0 000 0000

字段名
TICK INT ENABLE


7

意 义
节拍中断使能。 0:失能,1:使能 。

TICK TIME 6:0 节拍时间计数值(1~127)。 COUNT

说明:这个计数器的值在内部减少,用户不能在工 作时读取这个计数器的值。

3、RTC报警控制寄存器(RTCCON)
Register Address R/W Description
RTC报警 控制寄存器
Reset Value

0x57000050(L) R/W RTCALM 0x57000053(B) (字节)

0x0

3、RTC报警控制寄存器(RTCCON)
字段名 Reserved ALMEN YEAREN MONEN DATEEN HOUREN MINEN SECEN 位
7 保留(为0)

意 义

初值
0

6 报警总使能位。0:失能;1:使能
5 年报警使能位。0:失能;1:使能 4 月报警使能位。0:失能;1:使能 3 日报警使能位。0:失能;1:使能 2 时报警使能位。0:失能;1:使能 1 分报警使能位。0:失能;1:使能 0 秒报警使能位。0:失能;1:使能

0
0 0 0 0 0 0

4、RTC报警秒数寄存器(ALMSEC)
Register Address R/W Description
报警秒数 寄存器
Reset Value

0x57000054(L) R/W ALMSEC 0x57000057(B) (字节)

0x00 初值
0

字段名 Reserved ALMSECH ALMSECL


7 保留(为0)

意 义

6:4 报警时间秒十位,BCD值。0 ~ 5 000 3:0 报警时间秒个位,BCD值。0 ~ 9 0000
第19讲到此

5、报警时间分钟数寄存器(ALMMIN)
Register Address R/W Description
报警分钟数 寄存器
Reset Value

0x57000058(L) R/W ALMMIN 0x5700005B(B) (字节)

0x00 初值
0

字段名 Reserved ALMMINH
ALMMINL


7

意 义
保留(为0)

6:4
3:0

报警时间分钟十位, BCD值。0 ~ 5 报警时间分钟个位, BCD值。0 ~ 9

000
0000

6、报警时间小时数寄存器(ALMHOUR)
Register Address
Reset R/W Description Value

0x5700005C(L) R/W ALMHOUR 0x5700005F(B) (字节)

报警小时 寄存器

0x00 初值
00 00

字段名 Reserved
ALMHOURH


7:6

意 义
保留(为0)

ALMHOURL

报警时间小时十位, 5:4 BCD值。0 ~ 2 报警时间小时个位, 3:0 BCD值。0 ~ 9

0000

7、RTC报警天数寄存器(ALMDATE)
Register Address R/W Description
Reset Value


报警日期 0x57000060(L) R/W ALMDATE 0x57000063(B) (字节) 天数寄存器 字段名 Reserved 位
7:6 5:4 3:0

0x01
初值
00 00 0001


保留(为0)



ALMDATEH
ALMDATEL

报警日期天数十位, BCD值。0 ~ 3 报警日期天数个位, BCD值。0 ~ 9

8、报警时间月数寄存器(ALMMON)
Register Address R/W Description
报警日期 月数寄存器
Reset Value

0x57000064(L) R/W ALMMON 0x57000067(B) (字节)

0x01 初值
000 0

字段名 Reserved
ALMMONH


7:5 4

意 义
保留(为0)

ALMMONL

3:0

报警日期月数十位, BCD值。0 ~ 1 报警日期月数个位, BCD值。0 ~ 9

0001

9、报警时间年数寄存器(ALMYEAR)
Register Address R/W Description
报警年数 寄存器
Reset Value
0x00

0x57000068(L) R/W ALMYEAR 0x5700006B(B) (字节)

字段名
ALMYEARH ALMYEARL


7:4 3:0

意 义 报警日期年数十位, BCD值。0 ~ 9 报警日期年数个位, BCD值。0 ~ 9

初值
0000 0000

说明:年数的千位和百位应该是20。

10、秒循环复位寄存器(RTCRST)
Register Address R/W Description
Reset Value 0x00

0x5700006C(L) R/W 秒循环复位 RTCRST 0x5700006F(B) (字节) 寄存器

字段名 Reserved


7:4 保留(为0)





初值
000

秒循环复位控制位。 0 SRSTEN 3 0:禁止;1:允许 秒循环进位边界。 011:30秒; 00 SECCR 2:0 100:40秒;101:50秒。 说明:对于秒循环进位边界设为其它值,到 设定值只复位,但不会向分钟进位。

11、当前时间秒数寄存器(BCDSEC)
Register Address R/W Description
当前时间 秒数寄存器 意
保留(为0)

Reset Value

0x57000070(L) R/W BCDSEC 0x57000073(B) (字节)

初值
-

字段名 Reserved NOWSECH NOWSECL


7 6:4 3:0



当前时间秒十位, BCD值。0 ~ 5 当前时间秒个位, BCD值。0 ~ 9

12、当前时间分钟寄存器(BCDMIN)
Register Address R/W Description
当前时间 分钟寄存器 意
保留(为0) Reset Value

0x57000074(L) R/W BCDMIN 0x57000077(B) (字节)

-

字段名 Reserved NOWMINH NOWMINL


7



初值
-

当前时间分钟十位, 6:4 BCD值。0 ~ 5 当前时间分钟个位, 3:0 BCD值。0 ~ 9

13、当前时间小时数寄存器(BCDHOUR)
Register Address R/W Description
Reset Value

当前时间 0x57000078(L) R/W BCDHOUR 0x5700007B(B) (字节) 小时寄存器

初值
-

字段名 Reserved NOWHOURH
NOWHOURL


7:6

意 义
保留(为0)

5:4
3:0

当前时间小时十位, BCD值。0 ~ 2 当前时间小时个位, BCD值。0 ~ 9

-

14、当前日期天数寄存器(BCDDATE)
Register Address R/W Description
Reset Value

当前日期 0x5700007C(L) R/W BCDDATE 0x5700007F(B) (字节) 天数寄存器

初值
-

字段名 Reserved
NOWDATEH


7:6 5:4

意 义
保留(为0)

NOWDATEL

3:0

当前日期天数十位, BCD值。0 ~ 3 当前日期天数个位, BCD值。0 ~ 9

-

15、当前星期寄存器(BCDDAY)
Register Address R/W Description
当前星期 寄存器
Reset Value

0x57000080(L) R/W BCDDAY 0x57000083(B) (字节)

初值
-

字段名 Reserved NOWDAY


7:3

意 义
保留(为0)

2:0

当前星期值。1 ~ 7

-

1:星期日; 4:星期三; 7:星期六

2:星期一; 5:星期四;

3:星期二; 6:星期五;

16、当前日期月数寄存器(BCDMON)
Register Address R/W Description
报警日期 月数寄存器
Reset Value

0x57000084(L) R/W BCDMON 0x57000087(B) (字节)

0x01 初值
000 0

字段名 Reserved
NOWMONH


7:5 4

意 义
保留(为0)

NOWMONL

3:0

当前日期月数十位, BCD值。0 ~ 1 当前日期月数个位, BCD值。0 ~ 9

0001

17、当前日期年数寄存器(BCDYEAR)
Register Address R/W Description
当前日期 年数寄存器
Reset Value

0x57000088(L) R/W BCDHOUR 0x5700008B(B) (字节)

0x00 初值
0000 0000

字段名
NOWYEARH NOWYEARL

意 义 当前日期年数十位, 7:4 BCD值。0 ~ 9 当前日期年数个位, 3:0 BCD值。0 ~ 9



说明:年数的千位和百位应该是20

四、S3C2410 RTC使用方法 1、读/写寄存器
RTCCON 的0 位写1 。

(1)设置允许读写:对寄存器 (2)显示时间、日期方法:需要不断

地从BCDSEC、BCDMIN、BCDHOUR、 BCDDAY、BCDDATE、BCDMON、和 BCDYEAR 寄存器读取数据,然后显示出来。

(3)可能会引起显示错误。

例如,假设用户在2006 年12 月31 日23 点59 分59秒读取寄存器BCDYEAR 到BCDSEC, 在用户读取BCDSEC 寄存器时,如果结果是0, 那么很有可能年、月、日、时、分已经变成了 2007 年1 月1 日0 时0 分了,数据组合在一起 可能是错的。读取的数据可能是:
? ? 1) 2006 年12 月1 日0 时0分 2) 2006 年1 月1 日0 时0 分,等

解决的方法:当读取到的BCDSEC 等于0 时, 用户应该再读取一次BCDYEAR到BCDSEC 的值。

2、报警功能
RTC的报警寄存器(RTCALM)决定了 报警的使能、禁止、以及报警时间设定的条 件。 在RTC报警的使能情况下: (1)在正常工作模式下,报警中断 (ALMINT)是激活状态的。 (2)在掉电模式下(PWDN信号有效), 电源管理唤醒信号(PMWKUP)与报警中 断(ALMINT)都是激活状态。

3、节拍中断
RTC 节拍用于中断请求。 TICNT 寄存器:有中断使能位、节拍时 间位。 当节拍计数值到达0 时,就会触发节拍中 断。节拍中断的间隔时间计算如下:

Period=(n+1)/128 秒 n :节拍时间计数值(1~127)
说明:RTC 节拍中断可以作为RTOS (实时操作系统)内核的时间节拍。

1、RTC控制寄存器(RTCCON)
Register Address R/W Description
Reset Value

0x57000040(L) R/W RTCCON RTC控制寄存器 0x57000043(B) (字节)

0x0 初值
0 0 0 0

字段名 位





RTC时钟计数复位。 CLKRST 3 0:不复位;1 = BCD计数复位。 BCD计数选择。0:合并BCD计数; CNTSEL 2 1 = 保留(单独的BCD计数器) BCD时钟选择。 0:XTAL/32768 CLKSEL 1 1

:用XTAL原值(但只用于测试) RTC控制使能。 0:失能; 1:使能 RTCEN 0 指BCD时间计数和读取操作可以被执行

五、应用举例
例:编写一程序,对S3C2410的RTC进行 设置,使用节拍中断,每1秒中断一次,中 断后显示出当前的日期和时间。初始日期、 时间设置为正确值。 解: 1、设置控制寄存器 : RTCCON=0x0 0 0 1 = 0x01 含义:RTC不复位、正常BCD计数、BCD 时钟选择为1/32768、允许读出RTC值

2、设置节拍时间寄存器 : TICNT=0x1 1 1 1 1 1 1 1 = 0xFF 含义:允许节拍中断、节拍计数值为127, 每1秒钟中断一次。 BIT_TICK BIT_ALLMSK BIT_RTC EQU EQU EQU (0x1<<8) (0xffffffff) (0x1<<30)

#include "2410addr.h" #include "2410lib.h" void Test_Rtc_Tick(void); void __irq Rtc_Tick(void);

void Test_Rtc_Tick(void) { Uart_Printf("RTC Tick interrupt test for S3C2410!\n"); pISR_TICK = (unsigned)Rtc_Tick; //设置中断服务程序地址 rINTMSK & = ~(BIT_TICK); // (0x1<<8) //开时钟节拍中断

//设置日期与时间

rBCDYEAR = 0x07; rBCDMON = 0x05; rBCDDAY = 0x03; //SUN:1 MON:2 // TUE:3 WED:4 // THU:5 FRI:6 SAT:7 rBCDDATE = 0x22; rBCDHOUR = 0x08; rBCDMIN = 0x38; rBCDSEC = 0x25;

rTICNT = (1<<7) + 127; //设置节拍值 //Period = (n + 1) / 128 =1sec rRTCCON = 0x01; //启动计时、允许读写

Uart_Printf("Press any key to exit.\n"); Uart_Getch(); //等待按键
rINTMSK | = BIT_TICK; //(1<<8) //关闭时钟节拍中断 }

void __irq Rtc_Tick(void) { char year,month,date,hour,min,sec; //读取年月日 year = rBCDYEAR; month = rBCDMON & 0x1F; date = rBCDDATE & 0x3F; //读取时分秒 hour = rBCDHOUR & 0x3F; min = rBCDMIN & 0x7F;

sec

= rBCDSEC & 0x7F; //显示日期、时间 Uart_Printf(“20%2x年%2x月%2x日, %2x:%2x:%2x\n", year, month ,date hour,min,sec);

//清除中断请求标志 rSRCPND | = BIT_TICK; //清除中断请求标志 rINTPND | = BIT_TICK;

}

4.12 USB接口
主要内容
USB总线概述 结构 寄存器
要求:了解USB总线及寄存器

一、USB总线概述
1、USB标准
USB(Universal Serial Bus,通用串行 总线)是由Intel、Compaq、Microsorft 等公司联合提出的一种新的串行总线标 准,主要用于PC与外围设备互连。1996 年2月发布v1.0,2000年4月发布了v2.0, 数据传输速度为:低速1.5Mb/s,全速 12Mb/s,高速480Mb/s 。

2、USB接口组成(5部分)
USB芯片及协议程序(固件) 控制器(控制USB芯片) 控制器程序 USB设备驱动程序 USB设备

3、传输方式(4种)
1)同步传输:设备与主机同步,速 度高,一次传输,不确保无错误。如用 于声音、视频传输。 2)中断传输:实时性强,应用于数 据量少、分散、不可预测的数据传输中。 如键盘、鼠标、游戏杆操作。

3)批量传输:应用于大量数据传输, 保证传输数据正确无误。但对数据的实 效性要求不高。如打印机、扫描仪等。 4)控制传输:传

T控制寄存器

3、 S3C2410 看门狗定时时间
预分频器为8位,其值为:0---255 再分频器可选择值为:16、32、64、128 输入到计数器的时钟周期为:

T_wtd=1/[PCLK/(Prescaler+1)/Division_factor]
看门狗的定时周期为: T=WTDAT×T_wtd

注意:
一旦看门狗的定时器启动工作,其数据 寄存器(WTDAT)中的值将不会自动读到 时间寄存器中间去(WTCNT)。 由于这个原因,程序员必须在看门狗计 时器启动之前,应该将一个初始值写入到看 门狗的时间计数器(WTCNT)中间去 。 即先对时间计数器系初值,再启动看门 狗工作。

三、看门狗专用寄存器
共3个,其基地址为0x53000000。
寄存器 WTCON WTDAT WTCNT 描 述 看门狗控制寄存器 看门狗数据寄存器 看门狗计数寄存器 初值 偏移地址 0x8021 0 0x8000 4 0x8000 8

1、看门狗控制寄存器(WTCON)
Register Off Add R/W
WTCON 字段名 Prescaler Value Reserved 0

Description

Reset Value

R/W 看门狗控制寄存器 0x8021 位 意 义 初值 0x80 00 1

15:8 预分频值。0---255。

7:6 保留(为0) 看门狗控制位。 Watchdog Timer 5 0:禁止;1:允许

1、看门狗控制寄存器(WTCON,续)
字段名 Clock Select Interrupt Generation Reserved Reset Enable 意 义 再分频值选择。 00:16; 4:3 01:32;10:64;11:128 看门狗中断控制。 2 0:禁止; 1:允许。 1 0 保留(为0) 看门狗复位功能控制。 0:禁止; 1:允许。 位 初值 00 0 0 1

2、看门狗数据寄存器(WTDAT)
Register Off Add R/W
WTDAT 4

Description

Reset Value

R/W 看门狗数据寄存器 0x8000

说明:(1)该数据寄存器为对看门狗计数器重
装计数值。初始值为0x8000。 (2)在初始化看门狗操作中,WTDATA 的值不会自动加载到定时计数器中。 (3)在计数溢出后,WTDAT的值将被装 载到WTCNT 寄存器中。

3、看门狗计数寄存器(WTCNT)
Register Off Add R/W
WTCNT 字段名 Count Value 8 位

Description

Reset Value

R/W 看门狗计数寄存器 0x8000 意 义 初值
0x8000

15:0 看门狗的当前计数值

说明:在计数中只能读,不能写(写不
起作用)。

四、应用举例
例:编写一程序,利用S3C2410看门狗中 断产生频率为1kHz的方波,并且从GPB0引 脚输出。设S3C2410的PCLK为50MHz。

解: (1)计算数据寄存器值
1)取再分频值为16,分频后的频率为: 50M/16 = 3125000Hz 2)取预分频值为25,分频后的频率为: 3125000/25 = 125000Hz

3)取计数值为60,则计数器后的频 率为: 125000/60 = 2083.3Hz 4)方波频率为: 2083.3/2 = 1042Hz 不可能实现准确的1000Hz方波。

(2)看门狗控制寄存器值
WTCON =0b 00011000 00 0 00 1 0 0 = 0x1804 含义:预分频值为0x18、保留00、先 禁止看门狗定时器工作、选择再分频00 (分频值为16)、允许定时器中断、保 留0、禁止看门狗复位



(3)看门狗数据寄存器值
WTDAT = 60 = 0x3C

BIT_WDT EQU

(0x1<<9)

#include <string.h> #include "2410addr.h" #include "2410lib.h" #include "timer.h" void __irq Wdt_Int(void);

void Test_WDT_IntReq(void) { Uart_Printf(“WatchDog Timer Interrupt Request Test!\n"); rINTMSK &= ~(BIT_WDT); //开看门狗中断 pISR_WDT = (unsigned)Wdt_Int; //设置中断向量 rGPBCON = rGPBCON&0x03|0x01; //把GPB0设为输出

rWTCON = 0x1804; //写控制寄存器 rWTDAT = 60; //写数据寄存器 rWTCNT = 60; //写计数器 rWTCON = rWTCON | (1<<5); //启动看门狗定时器工作

Uart_Printf(“Press any Key to Exit!\n”);

Uart_Getch();

//等待按键

rWTCON & = ~(1<<5); //关闭看门狗定时器 rINTMSK | = (BIT_WDT); //屏蔽看门狗中断 }

void __irq Wdt_Int(void) { rGPBDATA ^ = 0x01;

//对GPB0取反

rSRCPND | = BIT_WDT; //清除看门狗中断请求标志 rINTPND | = BIT_WDT; //清除看门狗中断服务标志 }

4.14 LCD控制器
主要内容
LCD概述 结构与工作原理 寄存器

一、LCD概述
LCD(液晶显示器)
LCD构成 主要分成三部分:LCD显示 屏、显示控制器、缓冲存储器。 1、LCD显示屏(LCD模块) 主要由:玻璃基板、偏振片、电极、胶 框、液晶材料、背光等构成。 (STN、TFT) 2、显示控制器 产生各种信号:场、行扫描及同步信号, 显示驱动信号等。 显示控制器:如T6963、LPC3600

二、S3C2410 LCD控制器

一般功能:S3C2410 LCD控制器具 有一般LCD控制器功能,产生各种信号、 传输显示数据到LCD驱动器。

1、S3C2410特点
(1)基本特点
1)有专用DMA 用于向LCD驱动器传输数据 2)有中断(INT_LCD)

3)显示缓存可以很大 系统存储器可以作为显示缓存用 4)支持多屏滚动显示 用显示缓存支持硬件水平、垂直滚屏 5)支持多种时序LCD屏 通过对LCD控制器编程,产生适合不 同LCD显示屏的扫描信号、数据宽度、 刷新率信号等。 6)支持多种数据格式 大端、小端格式,WinCE格式。

(2)支持STN材料LCD
1)单色显示:每像素2位数据、4级灰度; 每像素4位数据、16级灰度。 2)单色扫描: 4位单向、双向扫描,8位 单向扫描。 3)彩色显示:每像素16位数据、65536 种色彩,每像素24位数据真色彩。 4)支持多种LCD屏 640×480、320×240、160×160等 5)4MB显示缓存 支持256色的像素数: 4096×1024, 2048×2048, 1024×4096等

(3)支持TFT材料LCD
1)单色显示:每像素1位数据、2位 数据、4位数据、8位数据。 2)彩色显示:每像素16位数据、 65536种色彩,每像素24位数据、16M 种真色彩。 3)支持多种LCD屏 640×480、320×240、160×160等 4)4MB显示缓存 支持64K色的像 素数:2048×1024等

三、S3C2410 LCD控制器 结构与工作原理
1、控制器结构

1、LCD控制器结构
主要由6部分组成:时序发生器、LCD主 控制器(LPC3600)、DMA

、视频信号混 合器、数据格式转换器、控制逻辑等。

2、LCD控制器引脚信号
共41个信号 VD[23:0]:LCD数据 VDEN:数据使能 VCLK:时钟信号 VLINE:行扫描信号 LEND:行结束信号

VFRAME:帧扫描信号 HSYNC:水平同步信号 VSYNC:垂直同步信号 VM:显示驱动交流信号 LCDVF0、LCDVF1、 LCDVF2:时序控制信号

LCD_PWREN:面板电源控制信号 LCD_HCLK:时钟面板控制信号 CPV:行同步面板控制信号 STV:帧同步面板控制信号 TP:显示驱动面板控制信号 STH:面板控制信号

四、LCD控制器专用寄存器
S3C2410的有17个专用寄存器,分为三类, 其基地址均为0x4D000000。 1、控制寄存器(5个,如下表)
寄存器 LCDCON1 LCDCON2 LCDCON3 LCDCON4 LCDCON5 描 述 LCD控制寄存器1 LCD控制寄存器2 LCD控制寄存器3 LCD控制寄存器4 LCD控制寄存器5 初值 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 偏址 0x00 0x04 0x08 0x0C 0x10

2、地址寄存器
共3个地址寄存器控制寄存器,如下表所 示。
寄存器 描 述 初值 偏址 LCDSADDR1 帧起始地址寄存器1 0x00000000 0x14 LCDSADDR2 帧起始地址寄存器2 0x00000000 0x18 LCDSADDR3 虚拟屏地址寄存器 0x00000000 0x1C

3、颜色寄存器
共3个地址寄存器控制寄存器,如下表所 示。
寄存器 REDLUT GREENLUT BLUELUT DITHMODE TPAL 描 述 红颜色寄存器 绿颜色寄存器 蓝颜色寄存器 抖动模式寄存器 临时调色存器 初值 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 偏址 0x20 0x24 0x28 0x4C 0x50

4、中断寄存器
共3个地址寄存器控制寄存器,如下表所 示。
寄存器 LCDSADDR1 LCDSADDR2 LCDSADDR3 描 述 中断服务存器 中断标志寄存器 中断屏蔽寄存器 LPC3600控制器 控制寄存器 初值 0x0 0x0 0x3 偏址 0x54 0x58 0x5

LPCSEL

0x4

0x60

四、S3C2410 RTC使用方法
1、闰年产生器
这个模块可以根据NOWDATA, NOWMON,以及NOWYEAR的数据决定每 个月的最后日期是28,29,30 还是31。一个 8位的计数器只能显示两个BCD码,因此它 不能判断00 年究竟是不是闰年。例如它不能 够判断1900 年和2000 的差别。为了解决这 个问题,S3C2410内的RTC 模块中有一个固 定的逻辑,用来支持2000 年为闰年。请注意 虽然2000 年是闰年,但1900 年不是闰年。 因此,S3C2410 中00 代表2000 年,而不是


网站首页网站地图 站长统计
All rights reserved Powered by 海文库
copyright ©right 2010-2011。
文档资料库内容来自网络,如有侵犯请联系客服。zhit326@126.com