Download presentation
Presentation is loading. Please wait.
1
嵌入式系统讲义 第4章 S3C2410X系统结构 周国运 2007.3
2
第三章习题解答 1、 ARM指令中的第二操作数“operand2”有哪些具体形式? 解:有三种:寄存器、寄存器移位、8位位图立即数。
3
解:(1)基地址可以是通用寄存器R0---R15中的任意一个。 (2)偏移地址可以有三种形式:12位立即数、寄存器、寄存器移位。
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
4
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
5
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]
6
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位数 STR R1,[R0,#4] ;存高32位反码 ADC R1,R1,#0 ;高32位求补 STR R1,[R0,#12] ;存高32位补码
7
8、 编写一简单ARM汇编程序段,实现1+2+…+100的运算。
解: MOV R2,#100 MOV R1,#0 LOOP ADD R1,R1,R2 ;R1中为累加和 SUBS R2,R2,#1 ;R2控制循环 BNE LOOP
8
习 题 本章作业:2、3、5、7、10、12、15 1、S3C2410X主要特性有哪些?
习 题 本章作业: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。
9
8、S3C2410X的中断系统有哪些特点?相关的寄存器有哪些?
9、S3C2410X的中断控制器的工作过程是怎样的?对于IRQ,整个中断过程是怎样的(中断控制器处理,向CPU请求,转到中断入口,转去获得中断服务程序的首地址,执行中断服务程序)? 10、编写一程序,使用外部中断EINT0,用中断方式对端口C做数据输入。(注意对中断系统和相关引脚进行初始化) 提示:C语言指向特定地址的方法: (1)#define rGPCDAT (*(volatile unsigned *)0x ) (2)int *rGPCDAT=0x ; (3)int *rGPCDAT; rGPCDAT=0x ; 用第一种方法为好。 11、S3C2410X的定时器系统有哪些特点?由哪几部分构成?相关的寄存器有哪些?是如何工作的?
10
14、S3C2410X的串行接口UART有哪些特点?由哪几部分构成?相关的寄存器有哪些?是如何工作的?
12、编写一程序,使用timer0产生并输出频率为10KHz、占空比为1/2的方波。设f pclk=50MHz。(注意对timer0和相关引脚初始化) 13、编写一程序,利用S3C2410X的PWM功能对一直流电机进行调速,要求使用timer1产生并输出频率为10KHz、占空比可变的方波进行控制,电机的转速变化如下图所示。设f pclk=50MHz。(注意对timer0和相关引脚初始化) 14、S3C2410X的串行接口UART有哪些特点?由哪几部分构成?相关的寄存器有哪些?是如何工作的? t *t t v
11
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。
12
18、S3C2410X的IIC接口有哪些特点?由哪几部分构成?各种传输方式如何?相关的寄存器有哪些?
19、试编写一程序,用S3C2410的IIC接口对串行EEPROM(IIC接口)进行读/写操作,写入一组数据,然后读出并显示出来,检验是否正确。 20、S3C2410X的RTC有哪些功能、特点?由哪几部分构成?相关的寄存器有哪些? 21、编写一程序,对S3C2410的RTC进行设置,使用报警功能,每1小时报警中断一次,中断后显示出当前的日期和时间。初始日期、时间要设置为正确值。 22、编写一程序,对S3C2410的RTC进行设置,使用节拍中断,每0.5秒中断一次,中断后显示出当前的日期和时间。初始日期、时间要设置为正确值。
13
第4章 S3C2410X系统结构 主要内容 4.1 S3C2410X概述 4.2 存储器配置 4.8 UART接口 4.3 DMA
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 其它接口
14
4.14 其它接口 1、时钟和电源管理 2、 LCD控制器 3、 SD接口 4、 IIS接口
15
4.9 SPI串行总线接口 主要内容 1、概述 2、结构与工作原理 3、寄存器 4、应用方法 5、SPI应用举例 重点:
工作原理时序;控制寄存器;应用
16
一、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传输模式。
17
二、S3C2410 SPI结构与工作原理 1、SPI结构
18
2、SPI设备系统组成 系统可以多个SPI设备组成,任何一个设备都可以为主SPI,但是任一时刻只能有一个主SPI设备,并且主SPI设备发出时钟信号和片选控制信号,选择通信的从SPI设备。如下图所示。 主 SPI 设 备 从SPI 1 从SPI 2 从SPI n …… SCK MOSI MISO nSS
19
3、SPI工作时序 下图为时序的一部分。 图 (A)
20
图 (B) Format CPOL和CPHA 第一位数据输出 其它位数据输出 数据采样 A CPOL=0,CPHA=0 第1个SCK上升沿前
21
三、SPI专用寄存器 2个UART,每个都有6个专用寄存器,共12个寄存器 Register Address R/W Description
Reset Value SPCONn 0x590000x0 SPI控制寄存器 0x00 SPSTAn 0x590000x4 R SPI状态寄存器 0x01 SPPINn 0x590000x8 SPI引脚控制寄存器 0x02 SPPREn 0x590000xC SPI预分频寄存器 SPTDATn SPI数据发送寄存器 SPRDATn SPI数据接收寄存器
22
Tx Auto Garbage Data Mode
1、SPI控制寄存器(SPCON) Register Address R/W Description Reset Value SPCON0 0x SPI0 控制寄存器 0x00 SPCON1 0x SPI1 控制寄存器 字段名 位 意 义 初值 SMOD 6:5 SPI模式选择。00:查询模式; 01:中断; 10:DMA模式; 11:保留 00 ENSCK 4 时钟SCK控制。 0:禁止;1:允许。 MSTR 3 SPI主、从选择。 0:从SPI;1:主SPI CPOL 2 时钟极性选择。0:高电平有效;1:低 CPHA 1 时钟相位选择。0:格式A;1:格式B Tx Auto Garbage Data Mode Enable (TAGD) 仅接收模式控制。0:正常收发; 1:仅接收(此时(自动)发送任意数据) 用于主SPI仅接收,读取数据启动发送 实验:从SPI仅接收时使TAGD=0,不向SPTDAT写数据的情况
23
Data Collision Error Flag (DCOL) Multi Master Error Flag (MULF)
2、SPI状态寄存器(SPSTA) Register Address R/W Description Reset Value SPSTA0 0x R SPI0 状态寄存器 0x01 SPSTA1 0x SPI1 状态寄存器 字段名 位 意 义 初值 reserved 7:3 保 留 Data Collision Error Flag (DCOL) 2 数据写碰撞(正在发送时写SPTDAT) 错误标志。 0:无错;1:碰撞错误 Multi Master Error Flag (MULF) 1 多主SPI错误标志。 0:无错;1:多主SPI错误。 Transfer Ready Flag (REDY) 收发就绪标志。 0:未就绪; 1:收或发就绪。 写SPTDAT后该位自动清0
24
3、SPI引脚控制寄存器(SPPIN) Register Address R/W Description Reset Value 字段名 位
0x SPI0 引脚控制寄存器 0x02 SPPIN1 0x SPI1 引脚控制寄存器 字段名 位 意 义 初值 reserved 7:3 保 留 Multi Master error detect Enable (ENMUL) 2 引脚多主SPI错误测试设置。 0:禁测;1:允许多主错误测试。 测试结果在SPSTAn中的MULF位 1 该位应该为1 Master Out Keep (KEEP) 1字节发完后MOSI的控制与释放 0:释放;1:保持MOSI原电平
25
4、SPI预分频寄存器(SPPRE) Prescaler value = Pclk/2/f B - 1 Register Address
R/W Description Reset Value SPPRE0 0x C SPI0 预分频寄存器 0x00 SPPRE1 0x C SPI1 预分频寄存器 字段名 位 意 义 初值 Prescaler value 7:0 预分频值 波特率计算: Baud tate f B = Pclk/2/( Prescaler value + 1 ) Prescaler value = Pclk/2/f B - 1 提示:SPI的波特率必须<25MHz。
26
5、SPI发送数据寄存器(SPTDAT) Register Address R/W Description Reset Value 字段名
0x SPI0 发送数据寄存器 0x00 SPTDAT1 0x SPI1 发送数据寄存器 字段名 位 意 义 初值 Tx data 7:0 SPI所发送的8位数据 0x00 提示:在同时双向传输时,从SPI设备必须先把所发送的数据写到“发送数据寄存器”SPTDATn中,然后再写主SPI设备的“发送数据寄存器”SPTDATn。
27
6、SPI接收数据寄存器(SPRDAT) Register Address R/W Description Reset Value 字段名
0x R SPI0 接收数据寄存器 0x00 SPRDAT1 0x SPI1 接收数据寄存器 字段名 位 意 义 初值 Tx data 7:0 SPI所接收的8位数据 0x00 提示:在同时双向传输时,启动发送后,应该先读取数据,然后再发送数据。
28
四、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写数据。
29
(6)接收数据: 一般方式(同时收发,TAGD=0):查询并确认Rx REDY为1,然后先从数据接收寄存器中读取数据,再向数据发送寄存器中写数据(同上面情况2)。 仅接收方式(TAGD=1):查询并确认Rx REDY为1,然后从数据接收寄存器中读取数据。对于主SPI设备,读取数据的同时启动一次发送(从SPI设备发送)。 (7)设置GPIO引脚,使选中的从SPI设备的片选信号nSS无效,结束传输。
30
2、DMA模式发送 对SPI的DMA模式发送操作步骤如下: (1)设置预分频寄存器SPPRE;
(2)设置控制寄存器SPCON,并且设为DMA模式; (3)SPI请求DMA服务; (4)DMA发送1字节数据给SPI; (5)SPI接口发送数据; (6)返回到(3),直到DMA的计数器为0。
31
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次接收的是数据的无效的。
32
4、 SPI从设备以格式B接收的问题 当SPI从设备以格式B接收,DMA的读信号比数据接收的锁存信号早,在数据未锁存之前,读信号就出现了。因此使用DMA模式不能够正确接收。如下图所示。 对于中断和查询模式,可以延时半个时钟,能够正确读取数据。
33
五、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 = 0x3A 含义:中断模式、使用时钟、主设备、0极性、格式B、一般收发传输。 SPCON1=0b = 0x22 含义:中断、不用时钟、从设备、0极性、格式B、收发
34
含义:不检测多主错误、保留1、输出引脚保持输出。 SPPIN1=0b 0 1 1 = 0x03 (4)SPI引脚配置
GPECON=0b ** ** ** …… 先清0:&~(0xFC<<20);再设置:|(0xA8<<20) GPGCON=0b …… ** ** 01 先清0:&~0xFCF3);再设置:|(0xFCF1) SPI0引脚 29 28 27 26 25 24 23 22 21 20 GPECON * 1 CLK0 MOSI0 MISO0 SPI0引脚 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 GPGCON * CLK1 MOSI1 MISO1 nSS1 nSS0 输出
35
(4)中断寄存器设置 中断模式寄存器: INTMOD &=~(1<<22) INT_UART2位于第15位,将UART2设置为IRQ中断 中断屏蔽寄存器: INTMSK&=~ (1<<22) 中断优先级寄存器PRIORITY: 不设置,用复位值0x7F,优先级为循环方式。 (5)在中断服务程序中对寄存器的操作 清除中断标志寄存器相应位: SRCPND&=~ (1<<22) 清除中断服务寄存器相应位: INTPND&=~ (1<<22) 第17讲到此
36
#include "2410header.h" void Main(void) { sysinit(); while(1) Uart_Printf("\n 2410 Board SPI TEST!\n"); Test_SPI( ); }
37
char tran_data0[100], rec_data0[100], num0=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;
38
rSPTDAT1=tan_data1[num1];
for(;num1<100;) { while(rSPSTA1&1==0); INTMSK |=(1<<22); //关闭SPI0中断 rec_data[num1] = rSPRDAT1; num1++; if(num1<100) INTMSK &=~(1<<22); //打开SPI0中断 } INTMSK |=(1<<22); //关闭SPI0中断 rGPGDAT |= 1; //使GPG0输出1,nSS1为高
39
SRCPND &=~ (1<<22); //清除中断标志寄存器相应位
void _irq spi_int(void) { rec_data[num0]=rSPRDAT0; num0++; if(num<100) rSPTDAT0 = tran_data[num0]; SRCPND &=~ (1<<22); //清除中断标志寄存器相应位 INTPND &=~ (1<<22); //清除中断服务寄存器相应位 }
40
#define rSPTDAT0 (*(volatile unsigned *)0x59000010) //SPI0 Tx data
#define rSPRDAT0 (*(volatile unsigned *)0x ) //SPI0 Rx data #define rSPTDAT1 (*(volatile unsigned *)0x ) //SPI1 Tx data #define rSPRDAT1 (*(volatile unsigned *)0x ) //SPI1 Rx data
41
4.10 I2C(IIC)串行总线接口 主要内容 1、概述 2、结构与工作原理 3、寄存器 4、应用方法 5、IIC应用举例 重点:
工作原理时序;控制寄存器;应用
42
一、概 述 IIC总线的产生和应用:IIC总线是PHILIPS公司开发的一种串行总线。IIC总线应用越来越广泛,现在在很多器件上都配置有IIC总线接口,如EEPROM、时钟芯片等。 IIC总线信号:为两线,一个能够双向传输的数据线SDA、另一个能够双向传输的时钟线SCL。是信号线最少的串行总线。 S3C2410的IIC总线的特点: (1)有一个IIC总线接口。 (2) IIC总线的速度:可以标准速度传输(100kb/s),也可以高速传输(高达400kb/s)。 (3)可以查询方式和中断方式工作。 (4)可以主设备身份传输,也可以从设备身份传输,因此共有4种操作模式: 主机发送模式、主机接收模式 从机发送模式、从机接收模式
43
二、S3C2410的IIC结构与工作原理 1、S3C2410的IIC结构
状态寄存器 IIC控制逻辑 控制寄存器 地址寄存器 分 频 器 数据收发寄存器 移位寄存器 比 较 SDA SCL Pclk 片内数据总线
44
2、IIC总线系统组成 IIC总线是多主系统:系统可以有多个IIC节点设备组成,并且可以是多主系统,任何一个设备都可以为主IIC;但是任一时刻只能有一个主IIC设备,IIC具有总线仲裁功能,保证系统正确运行。 主IIC设备发出时钟信号、地址信号和控制信号,选择通信的从IIC设备和控制收发。 系统要求:(1)各个节点设备必须具有IIC接口功能;(2)各个节点设备必须共地;(3)两个信号线必须接上拉电阻。如下图所示。 IIC 1 IIC 2 IIC n …… SCL SDA 主IIC +Vcc 上拉电阻
45
3、IIC总线的工作原理 (1)IIC总线对数据线上信号的定义: 1)总线空闲状态:时钟信号线和数据信号线均为高电平。
2)起始信号:即启动一次传输,时钟信号线是高电平时,数据信号线由高变低。 3)停止信号:即结束一次传输,时钟信号线是高电平时,数据信号线由低变高。 SDA SCL 起始信号 结束信号 数据位信号 数据位
46
4)数据位信号:时钟信号线是低电平时,可以改变数据信号线电位;时钟信号线是高电平时,应保持数据信号线上电位不变,即时钟是高电平时数据有效。
5)应答信号:占1位,数据接收者接收1字节数据后,应向数据发出者发送一应答信号。低电平为应答,继续发送;高电平为非应答,结束发送。 6)控制位信号:占1位,主IIC设备发出的读写控制信号,高为读、低为写(对主IIC设备而言)。控制位在寻址字节中。 SDA SCL 起始信号 结束信号 数据位信号 数据位
47
7)地址信号:为从机地址,占7位,如下表所示,称之为“寻址字节”,各字段含义如下:
D7 D6 D5 D4 D3 D2 D1 D0 DA3 DA2 DA1 DA0 A2 A1 A0 R/ W 器件地址(DA3---DA0):是IIC总线接口器件固有的地址编码,由器件生产厂家给定。如IIC总线EEPROM AT24C××的器件地址为1010等。 引脚地址(A2、A1、A0):由IIC总线接口器件的地址引脚A2、A1、A0的高低来确定,接电源者为1,接地者为0。 读写控制位(R/ W):1表示主设备读,0表示主设备写。 7位地址和读写控制位组成1个字节。
48
红色的信号均为主IIC设备发送、从IIC设备接收;黑色的信号均为从IIC设备发送、主IIC设备接收。
1)一般格式: 2)主控制器写操作格式: 红色起始信号S、地址信号、控制信号W、各个数据、结束信号P,均为主IIC设备发送、从IIC设备接收;黑色的应答信号A/A为从IIC设备发送、主IIC设备接收。 3)主控制器读操作格式: 红色的信号均为主IIC设备发送、从IIC设备接收;黑色的信号均为从IIC设备发送、主IIC设备接收。 S 从IIC地址(7位) R/W A 传输数据 …… A P S 从IIC地址 W A 数据1 A 数据2 A …… 数据n A/A P S 从IIC地址 R A 数据1 A 数据2 A …… 数据n A P
49
4)主控制器读/写操作格式: 由于在一次传输过程中要改变数据的传输方向,因此起始信号和寻址字节都要重复一次,而中间可以不要结束信号。 在一次传输中,可以有多次启动信号。 S 从IIC地址 R A 数据1 A 数据2 A … A rS 从地址 W A 数据1 A 数据2 A 数据3 A …… 数据m A/A P
50
(3)读写操作 在发送器模式下,数据被发送之后,IIC 总线接口会等待直到 IICDS(IIC 数据移位寄存 器)被程序写入新的数据。在新的数据被写入之前,SCL 线都被拉低。新的数据写入之后, SCL 线被释放。 S3C2410X 可以利用中断来判断当前数据字节是否已经完全送出。在 CPU 接收到中断请求后,在中断处理中再次将下一个新的数据写入 IICDS,如此循环。 在接收模式下,数据被接收到后,IIC 总线接口将等待直到 IICDS 寄存器被程序读出。 在数据被读出之前,SCL 线保持低电平。新的数据从读出之后,SCL 线才释放。 S3C2410X 也利用中断来判别是否接收到了新的数据。CPU 收到中断请求之后,处理程序将从 IICDS 读取数据。
51
(4)总线仲裁 总线仲裁发生在两个主IIC设备中。如果一个主设备欲使用总线,而测得SDA为低电平,则该主设备仲裁不能够使用总线启动传输。这个仲裁过程会延长,直到信号线SDA变为高电平。 每次操作都要进行仲裁。
52
三、IIC专用寄存器 S3C2410有4个专用寄存器 Register Address R/W Description
Reset Value IICCON 0x IIC总线控制寄存器 0x0X IICSTAT 0x IIC总线控制/状态寄存器 0x0 IICADD 0x IIC总线地址寄存器 0xXX IICDS 0x C IIC数据发送/接收寄存器
53
1、IIC控制寄存器(IICCON) 字段名 位 意 义 初值 Acknowledge generation 7
意 义 初值 Acknowledge generation 7 应答使能。0:禁止应答;1:自动应答 应答电平:Tx时为高;Rx时为低 00 Tx clock source selection 6 发送时钟分频选择。 0:IICCLK = f PCLK /16; 1:IICCLK = f PCLK /512 Tx/Rx Interrupt 5 收发中断控制位。0:禁止;1:允许 Interrupt Pending flag 4 中断标志位。读:0无,1示有中断请求 写:写0清除中断标志,写1不操作 Transmit clock value 3:0 发送时钟预分频值。 Tx clock = IICCLK/(IICCON[3:0]+1)
54
1、IIC控制寄存器(续) 说明: (1)应答使能问题:一般情况下为使能;在对EEPROM读最后1个数据前可以禁止应答,便于产生结束信号。
(2)中断事件:1)完成收发;2)地址匹配;3)总线仲裁失败。 (3)中断控制位问题:设为0时,中断标志位不能正确操作,故总设为1。 (4)时钟预分频问题:当分频位选择为0时,预分频值必须大于1。
55
2、IIC控制状态寄存器(IICSTAT)
字段名 位 意 义 初值 Mode selection 7:6 工作模式选择。 00:从收; 01:从发 10:主收; 11:主发 00 Busy / START STOP condition 5 忙状态/启、停控制。读:1示忙;0示闲 写:0产生结束信号,1产生启动信号 Serial output 4 数据发送控制。0:禁止;1:允许发送 Arbitration Status flag 3 仲裁状态标志。0:仲裁成功; 1:仲裁失败(因为在连续I/O中) Address-as-slave status flag 2 从地址匹配状态。 0:与IICADD不匹配 1:匹配。在收到SART/STOP时清0 Address zero 1 地址状态标志。 0:收到的为非0地址 1:收到0地址。在收到SART/STOP时清0 Last-received bit 最后收到位状态。0:最后位为0,收到 ACK; 1:最后位为1,未收到ACK。
56
2、IIC控制状态寄存器(续) 字段名 位 意 义 初值 IICSTAT控制字: 启动主设备发送:0xF0;结束主设备发送:0xD0
意 义 初值 Mode selection 7:6 工作模式选择。 00:从收; 01:从发 10:主收; 11:主发 00 Busy / START STOP condition 5 忙状态/启、停控制。读:1示忙;0示闲 写:0产生结束信号,1产生启动信号 Serial output 4 数据发送控制。0:禁止;1:允许发送 IICSTAT控制字: 启动主设备发送:0xF0;结束主设备发送:0xD0 启动主设备接收:0xB0;结束主设备接收:0x90 第18讲到此
57
3、IIC地址寄存器(IICADD) Register Address R/W Description Reset Value 字段名 位
0x 地址寄存器 0xXX 字段名 位 意 义 初值 Slave address 7:1 7位从地址。 0xXX Not mapped 不用 - 说明: (1)对从设备,该地址有意义,对主设备其值无意义。 (2)只有在不发送数据时(数据传输控制位IICSTAT[4] =0)才能对其写;任何时间都可以读。
58
4、IIC数据发送/接收寄存器(IICDS)
Register Address R/W Description Reset Value IICADD 0x C 数据发送/接收移位寄存器 0xXX 字段名 位 意 义 初值 Data shift 7:0 8位移位接收或移位发送的数据 0xXX 说明: (1)在本设备接收时,对其作读操作得到对方发来的数据。任何时间都可以读。 (2)在本设备发送时,对其写操作,将数据发向对方。 (3)欲发送数据,必须使数据传输控制位IICSTAT[4] =1才能对其写。
59
四、IIC操作方法 1、 主 模 式 发 送 流 程 开 始 写SART 设置IICCON 启动传输 从地址写入IICDS 写STOP
开 始 设置IICCON 从地址写入IICDS 写0xF0到IICSTAT 主机发送数据 ACK、产生中断 要停止? 等待停止位起作用 清除中断标志 发送数据写入IICDS 写0xD0到IICSTAT 结 束 Y N 写SART 启动传输 写STOP 结束传输
60
2、 主 模 式 接 收 流 程 开 始 设置IICCON 从地址写入IICDS 写0xB0到IICSTAT 主机发送寻址字节
开 始 设置IICCON 从地址写入IICDS 写0xB0到IICSTAT 主机发送寻址字节 ACK、产生中断 要停止? 等待停止位起作用 清除中断标志 从IICDS中读数据 写0x90到IICSTAT 结 束 Y N 写SART 启动传输 写STOP 结束传输 主机发送数据 2、 主 模 式 接 收 流 程
61
五、IIC接口应用举例 例:试编写一程序,用S3C2410的IIC接口对串行EEPROM(IIC接口)进行读/写操作,写入一组数据,然后读出并显示出来,检验是否正确。 分析:S3C2410的IIC为主设备,EEPROM的IIC为从设备,进行的操作为主设备写、和主设备读。 解: (1)设置IIC控制寄存器 1)收发传输:IICCON=0b = 0xAF 含义:应答使能、时钟分频为 IICCLK = f PCLK /16 、 中断使能、清除中断标志、预分频值取15。 2)接收结束传输:IICCON=0b = 0x2F 含义:禁止应答(非应答)、时钟分频为 IICCLK = f PCLK /16 、中断使能、清除中断标志、预分频值取15。
62
(2)IIC控制状态寄存器 1)主模式发送、启动传输 IICSTAT=0b = 0xF0 含义:主设备发送、启动传输、输出使能、低4位为状态 2)主模式发送、结束传输 IICSTAT=0b = 0xD0 含义:主设备发送、结束传输、输出使能、低4位为状态 3)主模式接收、启动传输 IICSTAT=0b = 0xB0 含义:主设备接收、启动传输、输出使能、低4位为状态 4)主模式接收、结束传输 IICSTAT=0b = 0x90 含义:主设备接收、结束传输、输出使能、低4位为状态
63
(3)地址寄存器设置 1)S3C2410地址寄存器: 作为从设备地址为0x10(作为主设备无意义) 2)EEPROM芯片地址: 作为从设备地址为 0xA0 (4)寻址字节值 所寻从设备地址+操作控制命令(R/W): 1)主设备发送: 0xA0 2)主设备接收: 0xA1
64
#include <string.h>
#include "2410addr.h" #include "2410lib.h" #include "def.h“ U32 _iicStatus;
65
1、IIC控制寄存器(IICCON) 字段名 位 意 义 初值 Acknowledge generation 7
意 义 初值 Acknowledge generation 7 应答使能。0:禁止应答;1:自动应答 应答电平:Tx时为高;Rx时为低 00 Tx clock source selection 6 发送时钟分频选择。 0:IICCLK = f PCLK /16; 1:IICCLK = f PCLK /512 Tx/Rx Interrupt 5 收发中断控制位。0:禁止;1:允许 Interrupt Pending flag 4 中断标志位。读:0无,1示有中断请求 写:写0清除中断标志,写1不操作 Transmit clock value 3:0 发送时钟预分频值。 Tx clock = IICCLK/(IICCON[3:0]+1)
66
void Test_Iic(void) { unsigned int i,j; static U8 data[256]; Uart_Printf("[ IIC Test using AT24C02 ]\n"); rGPEUP |= 0xc000; //Pull-up disable rGPECON |= 0xa00000; //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)
67
Uart_Printf("Write test data into AT24C02(0-255)\n");
for(i=0;i<256;i++) _Wr24C02(0xa0,(U8)i,i); data[i] = 0; Uart_Printf("\nRead test data from AT24C02\n"); _Rd24C02(0xa0,(U8)i,&(data[i])); 存储器地址 所写数据 存储数据 存储器地址
68
for(i=0;i<16;i++) { for(j=0;j<16;j++) Uart_Printf("%2x ",data[i*16+j]); Uart_Printf("\n"); }
69
void _Wr24C02(U8 slvAddr,U8 addr,U8 data)
{ rIICDS = slvAddr; //发送从设备地址 rIICSTAT = 0xf0; //启动发送 while(rIICCON & 0x10==0); //查询Tx中断状态 rIICDS = addr; //发送存储器地址 rIICCON = 0xaf; //清除中断状态 while(rIICCON & 0x10==0); //查询中断状态 rIICDS = data; //发送数据 rIICCON = 0xaf; //清除中断状态.
70
while(rIICCON & 0x10==0); //查询中断状态
while(rIICSTAT&1); //等待应答ACK rIICSTAT = 0xd0; //Stop(Write) Delay(1); //等待结束生效 }
71
4.11 实时钟RTC 主要内容 概述 结构 寄存器 应用举例 重点: (1)控制寄存器; (2)RTC应用
72
一、概 述 RTC(实时时钟)功能:通常采用RTC 来提供可靠的系统时间,包括时、分、秒、和年、月、日等;而且要求在系统处于关机状态下它也能够正常工作(后备电池供电),它的外围也不需要太多的辅助电路,典型的就是只需要一个高精度的32.768KHz 晶振和电阻电容等。 RTC应用:现在很多电子产品都有RTC功能,如电子日历(台式、壁式等)、手持数码产品(手机、电子词典、各种学习机、照相机、摄像机等)、电子计量仪表(电度表、燃气表、水表等)、家用电器(电视机、机顶盒、DVD等)等,应用非常广泛。
73
RTC芯片:在上面所说产品,都有RTC功能的芯片,有的产品使用独立的RTC芯片,如壁式电子日历、电子计量仪表等;有的产品使用的不是独立的RTC芯片,而是RTC功能集成到了其它的芯片中,如手持数码产品等。 S3C2410的RTC的特点: 时钟数据采用BCD 编码 时钟数据有:秒、分、时、日、月、年、星期 能够对闰年的年月日进行自动处理 具有告警功能,当系统处于关机状态时,能产生告警中断 具有独立的电源输入 提供毫秒级时钟中断,该中断可用于作为嵌入式操作系统的内核时钟
74
二、S3C2410的RTC结构 1、S3C2410的RTC结构 S3C2410的RTC主要有5部分构成:时钟发生器、节拍发生器、时间与日期计数器(时分秒年月日星期)、报警发生器、控制逻辑等部分。如下图所示。 XTAL1 XTAL2 节拍发生器 时钟发生器 时分秒计数器 年 月 计 数 器 闰 年 发 生 器 日星期计数器 控 制 逻 辑 时 钟 分 频 器 报警发生器 RTCVDD PMWKUP ALMINT PWDN
75
2、S3C2410 RTC的振荡电路 S3C2410 RTC的只需外接2个20P左右的小电容、32.768KHz的晶振即可。如下图所示。
76
三、RTC专用寄存器 S3C2410的RTC有17个专用寄存器,均需用字节读写。下表为前10个,有4个为控制寄存器,6个为报警寄存器。
Register Address R/W Description Reset Value RTCCON 0x /3 RTC控制寄存器 0x0 TICNT 0x /7 RTC节拍计数器 0x00 RTCALM 0x /3 RTC报警控制寄存器 RTCRST 0x C/F RTC循环复位寄存器 ALMSEC 0x /7 报警秒数寄存器 ALMMIN 0x /B 报警分钟数寄存器 ALMHOUR 0x C/F 报警小时数寄存器 ALMDAY 0x /3 报警天(日)数寄存器 0x01 ALMMON 0x /7 报警月数寄存器 ALMYEAR 0x /B 报警年数寄存器
77
三、RTC专用寄存器 S3C2410的RTC有17个专用寄存器,均需用字节读写。下表为4个控制寄存器。 Register Address
R/W Description Reset Value RTCCON 0x /3 RTC控制寄存器 0x0 TICNT 0x /7 RTC节拍计数器 0x00 RTCALM 0x /3 RTC报警 控制寄存器 RTCRST 0x C /F RTC秒循环 复位寄存器
78
本表6个寄存器:为报警日期、时间寄存器 Register Address R/W Description Reset Value
ALMSEC 0x /7 报警秒数寄存器 0x00 ALMMIN 0x /B 报警分钟数寄存器 ALMHOUR 0x C/F 报警小时数寄存器 ALMDAY 0x /3 报警天(日)数寄存器 0x01 ALMMON 0x /7 报警月数寄存器 ALMYEAR 0x /B 报警年数寄存器
79
后7个寄存器: 为日期、时间寄存器。 Register Address R/W Description Reset Value BCDSEC
后7个寄存器: 为日期、时间寄存器。 Register Address R/W Description Reset Value BCDSEC 0x /3 秒当前值寄存器 0xXX BCDMIN 0x /7 分钟当前值寄存器 BCDHOUR 0x /B 小时当前值寄存器 BCDDAY 0x C/F 日当前值寄存器 BCDDATE 0x /3 星期当前值寄存器 BCDMON 0x /7 月当前值寄存器 BCDYEAR 0x /B 年当前值寄存器
80
1、RTC控制寄存器(RTCCON) Register Address R/W Description RTC控制寄存器 0x0 字段名 位
Reset Value RTCCON 0x (L) 0x (B) (字节) RTC控制寄存器 0x0 字段名 位 意 义 初值 CLKRST 3 RTC时钟计数复位。 0:不复位;1 = BCD计数复位。 CNTSEL 2 BCD计数选择。0:合并BCD计数; 1 = 保留(单独的BCD计数器) CLKSEL 1 BCD时钟选择。 0:XTAL/32768 1:用XTAL原值(但只用于测试) RTCEN RTC控制使能。 0:失能; 1:使能 指BCD时间计数和读取操作可以被执行
81
2、RTC节拍时间计数器(TICNT) Register Address R/W Description RTC节拍时间 计数器 0x00
Reset Value TICNT 0x (L) 0x (B) (字节) RTC节拍时间 计数器 0x00 字段名 位 意 义 初值 TICK INT ENABLE 7 节拍中断使能。 0:失能,1:使能 。 TICK TIME COUNT 6:0 节拍时间计数值(1~127)。 000 0000 说明:这个计数器的值在内部减少,用户不能在工作时读取这个计数器的值。
82
3、RTC报警控制寄存器(RTCCON) Register Address R/W Description RTC报警 控制寄存器 0x0
Reset Value RTCALM 0x (L) 0x (B) (字节) RTC报警 控制寄存器 0x0
83
3、RTC报警控制寄存器(RTCCON) 字段名 位 意 义 初值 Reserved ALMEN 报警总使能位。0:失能;1:使能
意 义 初值 Reserved 7 保留(为0) ALMEN 6 报警总使能位。0:失能;1:使能 YEAREN 5 年报警使能位。0:失能;1:使能 MONEN 4 月报警使能位。0:失能;1:使能 DATEEN 3 日报警使能位。0:失能;1:使能 HOUREN 2 时报警使能位。0:失能;1:使能 MINEN 1 分报警使能位。0:失能;1:使能 SECEN 秒报警使能位。0:失能;1:使能
84
4、RTC报警秒数寄存器(ALMSEC) Register Address R/W Description 报警秒数 寄存器 0x00
Reset Value ALMSEC 0x (L) 0x (B) (字节) 报警秒数 寄存器 0x00 字段名 位 意 义 初值 Reserved 7 保留(为0) ALMSECH 6:4 报警时间秒十位,BCD值。0 ~ 5 000 ALMSECL 3:0 报警时间秒个位,BCD值。0 ~ 9 0000 第19讲到此
85
5、报警时间分钟数寄存器(ALMMIN) Register Address R/W Description 报警分钟数 寄存器 0x00
Reset Value ALMMIN 0x (L) 0x B(B) (字节) 报警分钟数 寄存器 0x00 字段名 位 意 义 初值 Reserved 7 保留(为0) ALMMINH 6:4 报警时间分钟十位, BCD值。0 ~ 5 000 ALMMINL 3:0 报警时间分钟个位, BCD值。0 ~ 9 0000
86
6、报警时间小时数寄存器(ALMHOUR)
Register Address R/W Description Reset Value ALMHOUR 0x C(L) 0x F(B) (字节) 报警小时 寄存器 0x00 字段名 位 意 义 初值 Reserved 7:6 保留(为0) 00 ALMHOURH 5:4 报警时间小时十位, BCD值。0 ~ 2 ALMHOURL 3:0 报警时间小时个位, BCD值。0 ~ 9 0000
87
7、RTC报警天数寄存器(ALMDATE)
Register Address R/W Description Reset Value ALMDATE 0x (L) 0x (B) (字节) 报警日期 天数寄存器 0x01 字段名 位 意 义 初值 Reserved 7:6 保留(为0) 00 ALMDATEH 5:4 报警日期天数十位, BCD值。0 ~ 3 ALMDATEL 3:0 报警日期天数个位, BCD值。0 ~ 9 0001
88
8、报警时间月数寄存器(ALMMON) Register Address R/W Description 报警日期 月数寄存器 0x01
Reset Value ALMMON 0x (L) 0x (B) (字节) 报警日期 月数寄存器 0x01 字段名 位 意 义 初值 Reserved 7:5 保留(为0) 000 ALMMONH 4 报警日期月数十位, BCD值。0 ~ 1 ALMMONL 3:0 报警日期月数个位, BCD值。0 ~ 9 0001
89
9、报警时间年数寄存器(ALMYEAR) Register Address R/W Description 报警年数 寄存器 字段名 位
Reset Value ALMYEAR 0x (L) 0x B(B) (字节) 报警年数 寄存器 0x00 字段名 位 意 义 初值 ALMYEARH 7:4 报警日期年数十位, BCD值。0 ~ 9 0000 ALMYEARL 3:0 报警日期年数个位, 说明:年数的千位和百位应该是20。
90
10、秒循环复位寄存器(RTCRST) Register Address R/W Description 秒循环复位 寄存器 字段名 位
Reset Value RTCRST 0x C(L) 0x F(B) (字节) 秒循环复位 寄存器 0x00 字段名 位 意 义 初值 Reserved 7:4 保留(为0) 000 SRSTEN 3 秒循环复位控制位。 0:禁止;1:允许 SECCR 2:0 秒循环进位边界。 011:30秒; 100:40秒;101:50秒。 00 说明:对于秒循环进位边界设为其它值,到设定值只复位,但不会向分钟进位。
91
11、当前时间秒数寄存器(BCDSEC) Register Address R/W Description 当前时间 秒数寄存器 - 字段名
Reset Value BCDSEC 0x (L) 0x (B) (字节) 当前时间 秒数寄存器 - 字段名 位 意 义 初值 Reserved 7 保留(为0) - NOWSECH 6:4 当前时间秒十位, BCD值。0 ~ 5 NOWSECL 3:0 当前时间秒个位, BCD值。0 ~ 9
92
12、当前时间分钟寄存器(BCDMIN) Register Address R/W Description 当前时间 分钟寄存器 - 字段名
Reset Value BCDMIN 0x (L) 0x (B) (字节) 当前时间 分钟寄存器 - 字段名 位 意 义 初值 Reserved 7 保留(为0) - NOWMINH 6:4 当前时间分钟十位, BCD值。0 ~ 5 NOWMINL 3:0 当前时间分钟个位, BCD值。0 ~ 9
93
13、当前时间小时数寄存器(BCDHOUR)
Register Address R/W Description Reset Value BCDHOUR 0x (L) 0x B(B) (字节) 当前时间 小时寄存器 - 字段名 位 意 义 初值 Reserved 7:6 保留(为0) - NOWHOURH 5:4 当前时间小时十位, BCD值。0 ~ 2 NOWHOURL 3:0 当前时间小时个位, BCD值。0 ~ 9
94
14、当前日期天数寄存器(BCDDATE) Register Address R/W Description 当前日期 天数寄存器 -
Reset Value BCDDATE 0x C(L) 0x F(B) (字节) 当前日期 天数寄存器 - 字段名 位 意 义 初值 Reserved 7:6 保留(为0) - NOWDATEH 5:4 当前日期天数十位, BCD值。0 ~ 3 NOWDATEL 3:0 当前日期天数个位, BCD值。0 ~ 9
95
15、当前星期寄存器(BCDDAY) 1:星期日; 2:星期一; 3:星期二; 4:星期三; 5:星期四; 6:星期五; 7:星期六
Register Address R/W Description Reset Value BCDDAY 0x (L) 0x (B) (字节) 当前星期 寄存器 - 字段名 位 意 义 初值 Reserved 7:3 保留(为0) - NOWDAY 2:0 当前星期值。1 ~ 7 1:星期日; 2:星期一; 3:星期二; 4:星期三; 5:星期四; 6:星期五; 7:星期六
96
16、当前日期月数寄存器(BCDMON) Register Address R/W Description 报警日期 月数寄存器 0x01
Reset Value BCDMON 0x (L) 0x (B) (字节) 报警日期 月数寄存器 0x01 字段名 位 意 义 初值 Reserved 7:5 保留(为0) 000 NOWMONH 4 当前日期月数十位, BCD值。0 ~ 1 NOWMONL 3:0 当前日期月数个位, BCD值。0 ~ 9 0001
97
17、当前日期年数寄存器(BCDYEAR) Register Address R/W Description 当前日期 年数寄存器 0x00
Reset Value BCDHOUR 0x (L) 0x B(B) (字节) 当前日期 年数寄存器 0x00 字段名 位 意 义 初值 NOWYEARH 7:4 当前日期年数十位, BCD值。0 ~ 9 0000 NOWYEARL 3:0 当前日期年数个位, 说明:年数的千位和百位应该是20
98
四、S3C2410 RTC使用方法 1、读/写寄存器 (1)设置允许读写:对寄存器RTCCON 的0 位写1 。
(2)显示时间、日期方法:需要不断地从BCDSEC、BCDMIN、BCDHOUR、BCDDAY、BCDDATE、BCDMON、和BCDYEAR 寄存器读取数据,然后显示出来。
99
(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 的值。
100
2、报警功能 RTC的报警寄存器(RTCALM)决定了报警的使能、禁止、以及报警时间设定的条件。 在RTC报警的使能情况下:
(1)在正常工作模式下,报警中断(ALMINT)是激活状态的。 (2)在掉电模式下(PWDN信号有效),电源管理唤醒信号(PMWKUP)与报警中断(ALMINT)都是激活状态。
101
3、节拍中断 Period=(n+1)/128 秒 RTC 节拍用于中断请求。 TICNT 寄存器:有中断使能位、节拍时间位。
当节拍计数值到达0 时,就会触发节拍中断。节拍中断的间隔时间计算如下: Period=(n+1)/128 秒 n :节拍时间计数值(1~127) 说明:RTC 节拍中断可以作为RTOS(实时操作系统)内核的时间节拍。
102
五、应用举例 例:编写一程序,对S3C2410的RTC进行设置,使用节拍中断,每1秒中断一次,中断后显示出当前的日期和时间。初始日期、时间设置为正确值。 解: 1、设置控制寄存器 : RTCCON=0x = 0x01 含义:RTC不复位、正常BCD计数、BCD时钟选择为1/32768、允许读出RTC值
103
1、RTC控制寄存器(RTCCON) Register Address R/W Description RTC控制寄存器 0x0 字段名 位
Reset Value RTCCON 0x (L) 0x (B) (字节) RTC控制寄存器 0x0 字段名 位 意 义 初值 CLKRST 3 RTC时钟计数复位。 0:不复位;1 = BCD计数复位。 CNTSEL 2 BCD计数选择。0:合并BCD计数; 1 = 保留(单独的BCD计数器) CLKSEL 1 BCD时钟选择。 0:XTAL/32768 1:用XTAL原值(但只用于测试) RTCEN RTC控制使能。 0:失能; 1:使能 指BCD时间计数和读取操作可以被执行
104
2、设置节拍时间寄存器 : TICNT=0x = 0xFF 含义:允许节拍中断、节拍计数值为127,每1秒钟中断一次。 BIT_TICK EQU (0x1<<8) BIT_ALLMSK EQU (0xffffffff) BIT_RTC EQU (0x1<<30) #include "2410addr.h" #include "2410lib.h" void Test_Rtc_Tick(void); void __irq Rtc_Tick(void);
105
void Test_Rtc_Tick(void)
{ Uart_Printf("RTC Tick interrupt test for S3C2410!\n"); pISR_TICK = (unsigned)Rtc_Tick; //设置中断服务程序地址 rINTMSK & = ~(BIT_TICK); // (0x1<<8) //开时钟节拍中断
106
rBCDDAY = 0x03; //SUN:1 MON:2 // TUE:3 WED:4 // THU:5 FRI:6 SAT:7
//设置日期与时间 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;
107
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) //关闭时钟节拍中断 }
108
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;
109
} 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; }
110
4.12 USB接口 主要内容 USB总线概述 结构 寄存器 要求:了解USB总线及寄存器
111
一、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 。
112
2、USB接口组成(5部分) USB芯片及协议程序(固件) 控制器(控制USB芯片) 控制器程序 USB设备驱动程序 USB设备
113
3、传输方式(4种) 1)同步传输:设备与主机同步,速度高,一次传输,不确保无错误。如用于声音、视频传输。
2)中断传输:实时性强,应用于数据量少、分散、不可预测的数据传输中。如键盘、鼠标、游戏杆操作。
114
3)批量传输:应用于大量数据传输,保证传输数据正确无误。但对数据的实效性要求不高。如打印机、扫描仪等。
4)控制传输:传输的不是数据,而是命令和状态信号,主要用于主机对USB设备进行配置、控制、查询状态等。该方式数据量小、实效性要求也不高。
115
4、USB拓扑结构(树状结构)
116
1)USB主机(host):控制USB总线上所有的USB设备和所有集线器的数据通信过程。
检测、连接、断开设备 控制数据流 收集状态、纠正错误等。 2)USB设备(device):所有的USB设备均可接收数据,根据数据包的地址判断是否保存。
117
3)端点(endpoint):端点是位于USB设备中、与USB主机进行通信的基本单元。USB设备可以有多个端点,各端点的地址由设备地址和端点号确定。
4)管道(pipe):是主机与设备之间数据通信的逻辑通道。
118
5、USB总线主要特点 USB端口不区分设备 即插即用、可热插拔 传输速度高 易扩展,可扩展到127个USB设备 对设备提供电源 成本低等
119
二、S3C2410的USB 接口结构 1、USB 控制器的主要特点
S3C2410处理器内部集成的USB HOST控制器支持两个USB host 通讯端口和1个USB Device端口。 1、USB 控制器的主要特点 符合USB 1.1 协议规范 支持USB低速(1.5Mb/s)和全速(12Mb/s)设备连接 支持控制、中断、批量数据传输方式(无同步方式)
120
支持DMA方式批量传输(EP1---EP4) 集成了USB收发器 支持挂起和远程唤醒功能
集成了5个配置有FIFO缓冲器的节点 1个有16字节的FIFO(EP0) 4个有64字节的FIFO(EP1---EP4) 支持DMA方式批量传输(EP1---EP4) 集成了USB收发器 支持挂起和远程唤醒功能
121
主要有5部分构成:控制逻辑、USB协议、5个FIFO、4个DMA、USB接口。
2、S3C2410的USB 原理结构 主要有5部分构成:控制逻辑、USB协议、5个FIFO、4个DMA、USB接口。 DP0 DN0 DP1/ PDP0 DN1/ PDN0 USB 协 议 控 制 逻 辑 众 多 寄 存 器 4 个 D M A 5 F I O U S B 接 口
122
S3C2410的USB HOST结构
123
S3C2410的USB DEVICE结构
124
三、USB DEVICE专用寄存器 共46个,其基地址为0x52000000。 寄存器 描 述 偏址 FUNC_ADDR_REG
描 述 偏址 FUNC_ADDR_REG 功能地址寄存器 140 PWR_REG 电源管理寄存器 144 EP_INT_REG(EP0–EP4) 端点0---4中断寄存器 148 USB_INT_REG USB中断寄存器 158 EP_INT_EN_REG (EP0–EP4) 端点中断允许寄存器 15C USB_INT_EN_REG USB中断允许寄存器 16C
125
三、USB DEVICE专用寄存器(续1) 寄存器 描 述 偏址 FRAME_NUM1_REG 帧序号低字节寄存器 170
描 述 偏址 FRAME_NUM1_REG 帧序号低字节寄存器 170 FRAME_NUM2_REG 帧序号高字节寄存器 174 INDEX_REG 索引寄存器 178 EP0_FIFO_REG 端点0 FIFO 寄存器 1C0 EP1_FIFO_REG 端点1 FIFO 寄存器 1C4 EP2_FIFO_REG 端点2 FIFO 寄存器 1C8 EP3_FIFO_REG 端点3 FIFO 寄存器 1CC EP4_FIFO_REG 端点4 FIFO 寄存器 1D0
126
三、USB DEVICE专用寄存器(续2) 说明:n=1,2,3,4。因此是4组,24个寄存器。 寄存器 描 述 偏址
描 述 偏址 EPn_DMA_CON 端点n DMA控制寄存器 2xx EPn_DMA_UNIT 端点n DMA传输单位寄存器 EPn_DMA_FIFO 端点n DMA FIFO计数器 EPn_DMA_TTC_L 端点n DMA传输计数器L EPn_DMA_TTC_M 端点n DMA传输计数器M EPn_DMA_TTC_H 端点n DMA传输计数器H 说明:n=1,2,3,4。因此是4组,24个寄存器。
127
三、USB DEVICE专用寄存器(续3) 寄存器 描 述 偏址 IN_CSR1_REG /EP0_CSR 端点输入控制状态寄存器1
描 述 偏址 IN_CSR1_REG /EP0_CSR 端点输入控制状态寄存器1 /端点0控制状态寄存器 184 IN_CSR2_REG 端点输入控制状态寄存器2 188 MAXP_REG 端点最大包寄存器 18C OUT_CSR1_REG 端点输出控制状态寄存器1 190 OUT_CSR2_REG 端点输出控制状态寄存器2 194 OUT_FIFO_CNT1_REG 端点写输出计数寄存器1 198 OUT_FIFO_CNT2_REG 端点写输出计数寄存器2 19C
128
4.13 看门狗 主要内容 USB总线概述 结构 寄存器 要求:了解USB总线及寄存器
129
一、看门狗及工作原理 1、看门狗概念 当嵌入式系统运行时受到外部干扰或者系统错误,程序有时会出现“跑飞”,导致整个系统瘫痪。在对系统稳定性要求较高的场合,为了防止这一现象的发生,需要一种叫“看门狗”(WATCHDOG)的电路。看门狗的作用就是当系统“跑飞”而进入死循环时,恢复系统的运行。 看门狗:是一种电路,具有监视并恢复程序正常运行的功能。是一定时器电路。
130
2、看门狗的工作原理 其基本原理为: 设一系统程序完整运行一周期的时间是Tp,看门狗的定时周期为Ti,要求Ti>Tp。
其基本原理为: 设一系统程序完整运行一周期的时间是Tp,看门狗的定时周期为Ti,要求Ti>Tp。 在程序运行一周期后,修改定时器的计数值,只要程序正常运行,定时器就不会溢出。 若由于干扰等原因使系统不能在Tp 时刻修改定时器的计数值,定时器将在Ti 时刻溢出,引发系统复位,使系统得以重新运行,从而起到监控作用。
131
二、S3C2410 的看门狗 1、 S3C2410 看门狗的功能 S3C2410 的看门狗定时器有两个功能:
(1)中断功能:作为常规时钟使用,是一个十六位的定时器,可以产生中断。 (2)复位功能:作为看门狗定时器使用,当时钟计数减为0(超时)时,它将产生一个128个时钟周期的复位信号。
161
四、S3C2410 RTC使用方法 1、闰年产生器 2、读/写寄存器
这个模块可以根据NOWDATA,NOWMON,以及NOWYEAR的数据决定每个月的最后日期是28,29,30 还是31。一个8位的计数器只能显示两个BCD码,因此它不能判断00 年究竟是不是闰年。例如它不能够判断1900 年和2000 的差别。为了解决这个问题,S3C2410内的RTC 模块中有一个固定的逻辑,用来支持2000 年为闰年。请注意虽然2000 年是闰年,但1900 年不是闰年。因此,S3C2410 中00 代表2000 年,而不是1900 年。 2、读/写寄存器 要求置高RTCCON 寄存器的0 位来表示读和写RTC 模块中的寄存器。为了显示秒,分,小时,日期,月和年,CPU 会从NOWSEC,NOWMIN,NOWHOUR,NOWDAY,NOWDATE,NOWMON,和NOWYEAR 寄存器读取数据。但是由于多个寄存器的读取,可能产生1 秒钟的偏离。
Similar presentations