嵌入式ARM-S3C2410
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、S3C2410/S3C2440芯片的内部结构
S3C2410采用ARM920T核,而ARM920T又集成了ARM9TDMI,属于高档32位嵌入式微处理器。
内部具有分离的16KB大小的指令Cache和16KB大小的数据Cache。
同时采用哈佛体系结构,程序存储器和数据存储器分开,分别有各自的存储管理部件MMU。
采用五级指令流水线。
使用ARM公司特有的AMBA 总线,对于高速组件采用AHB总线,而对于低速外设接口采用APB总线。
连在AHB上的组件系统总线控制器、电源管理单元、PLL(锁相环)时钟发生器、内部SRAM、外部存储器控制器、LCD控制器、DMA控制器、中断控制器;连接到APB上的硬件组件有三通道UART、一个多主IIC总线控制器、一个IIS总线控制器、五通道PWM定时器和一个内部定时器、一个看门狗定时器WDT、通用I/O口(GPIO)、具有日历功能的实时时钟RTC、八通道10位ADC、两个同步串行口SIO接口及SDI/MMC等。
S3C2440在S3C2410基础上增加了视频和音频接口。
2、存储器控制组件
S3C2410存储器控制组件包括存储器控制器、总线控制器、外部主控器、NAND Flash控制器等。
存储器控制器提供访问外部存储器所需的存储器控制信号,支持大/小端模式,地址空间1GB
3、时钟及电源管理组件
在时钟控制器、电源控制器以及USB控制器的控制之下,产生不同需求的时钟信号,如:
MPLL(锁相环时钟)输入时钟可由引脚OM[3:2]来选择是采用外部时钟EXTCLKA还是外界晶体利用内部振荡电路输出的时钟。
电源管理模块具有正常模式、、慢速模式、空闲模式、掉电模式。
正常模式下,当慢速控制位SLOW_BIT = 1时进入慢速模式,当休眠控制位IDLE_BIT = 1时进入休眠模式,当掉电控制位POWER_BIT = 时进入掉电模式。
在掉电模式和休眠模式下,只要有任意一个外部中断EINT【0:23】或RTC时钟发生中断,均将返回到正常模式。
4、中断控制器及中断控制
S3C2410的中断控制过程:
有子寄存器的中断请求元SUBSRCPND 子屏蔽SRCPND 屏蔽INTPND
优先权IRQ 没有子寄存器的中断请求元模式
FIQ
异常向量表从0x00000000~0x0000001F,其中普通中断IRQ和快速中断FIQ 的向量地址为0x00000008~0x0000001B和0x0000001C~0x0000001F。
源中断挂起寄存器SRCPND和中断挂起寄存器INPND,他们指示某个中断请求是否处于挂起状态。
当多个中断源请求服务时,SRCPND相应的位写入1,通过优先级仲裁当前最高优先权的中断源对应的INTPND位写入1,如果中断没有被屏蔽,CPU将处理该中断。
用ARM汇编语言写一段对S3C2410的初始化程序,要求关闭看门狗中断,允许UART/INT_RXD0、TIMER0/1/2、RTC以及EINT0/1/2/3中断,并把EINT/1/2/3设置为快速中断FIQ方式,其余为普通中断IRQ。
解:INTMOD EQU 0x4A000004 ;定义中断模式寄存器地址INTMASK EQU 0x4A000008 ;定义中断屏蔽寄存器地址
INTSUBMASK EQU 0x4A000010 ;定义中断子屏蔽寄存器地址
LDR R0,=INTMASK ;指示中断模式寄存器地址
LDR R1,=0x0000000F ;EINT/1/2/3为FIQ中断,其他为IRQ中断
STR R1,[R0] ;写入中断模式寄存器
LDR R0,=INTMASK ;指示中断屏蔽寄存器地址
LDR R1,[R0] ;取原来中断屏蔽寄存器的值
ORR R1,0x00000400 ;b9=1(INT_WDT为第9位)
STR R1,[R0] ;写入中断屏蔽寄存器,屏蔽WDT中断
AND R1,R1,#0C7FFF1F0 ;题目要求的若干中断允许的位写0
STR R1.[R0] ;写入中断屏蔽寄存器,开相关允许的寄存器
LDR R0,=INTSUBMASK ;只是中断子屏蔽寄存器地址
LDR R1,[R0] ; 取原来子中断屏蔽寄存器的值
AND R1,R1,0xFFFFFFFE ;b0=0(INT_RXD0为第0位)
STR R1,[R0] ;写入中断子屏蔽寄存器,允许INT_RXD0中断
5、实时时钟RTC
RTC具有的主要功能包括BCD数据(时、分、秒、日、月、年)、闰年产生器、告警功能(告警中断或从断电模式唤醒)、独立的电源端口(VDDRTC)、支持毫秒滴答时钟中断作为RTOS核的滴答时钟、循环复位功能等。
RTC的组成:滴答时钟发生器、闰年发生器、分频器、控制寄存器、告警发生器、复位寄存器以及年、月、日、星期、时、分、秒寄存器等构成。
实时时钟模块采用单独的供电引脚和单独的时钟源,采用32.768KHz晶体。
通过215时钟分频器得到1Hz的脉冲,进而得到时钟的最小单位时间为1s。
例:对RTC进行初始化操作,完成的功能有复位RTC、允许对RTC读写操作、BCD组合方式、时钟选择为频率/215分频,并将2013年12月18日21时30分15秒写入相应的数据寄存器。
用ARM汇编语言完成对上述操作的子程序。
解:操作程序如下:
//定义寄存器地址
RTCCON EQU 0x57000040 ;
BCDYEAR EQU 0x57000088
BCDMONTH EQU 0x57000084
BCDDATE EQU 0x5700007C
BCDHOUR EQU 0x57000078
BCDMIN EQU 0x57000074
BCDSEC EQU 0x57000070
ThisYEAR EQU 0x13
ThisMONTH EQU 0x12
ThisDATE EQU 0x18
ThisHOUR EQU 0x21
ThisMIN EQU 0x30
ThisSEC EQU 0x15
//初始化RTC子程序
RTCInit
LDR R0,=RTCCON
MOV R1,,# 0x08
STR R1,[R0]
MOV R1,#0x01
STR R1,[R0]
//以下是写时间寄存器
LDR R0,=BCDYEAR
MOV R1,#ThisYEAR
STRB R1,[R0]
LDR R0,=BCDMONTH
MOV R1,#ThisMONTH
STRB R1,[R0]
LDR R0,=BCDDA TE
MOV R1,#ThisDATE
STRB R1,[R0]
LDR R0,=BCDHOUR
MOV R1,#ThisHOUR
STRB R1,[R0]
LDR R0,=BCDMIN
MOV R1,#ThisMIN
STRB R1,[R0]
LDR R0,=BCDSEC
MOV R1,#ThisSEC
STRB R1,[R0]
LDR R0,=RTCCON
MOV R1,#0
STRB R1,[R0]
MOV PC,LR
6、通用I/O接口GPIO
例:在以S3C2410为核心的嵌入式系统中,设置H端口SPH6、GPH7分别为TXD2、RXD2,GPH2/GPH3为输入端口,GPH剩余口均为输入端口,允许所有输出引脚上拉,让GPH2输出高电平,GPH3输出低电平。
解:(1)控制寄存器决定引脚功能:由H端口GPH6、GPH7作为TXD2、RXD2,则控制器的位13:12=10,15:14 = 10,GPH2/GPH3输出,位5:4 = 01,7:6 = 01,其余引脚为输入,用00表示,即每个引脚使用两个控制位,GPHCON = 00 0000 1010 0000 0101 0000 = 0x0000 A050。
(2)上拉寄存器决定引脚在内部是否接上拉电阻。
(3)数据寄存器可以读取输入引脚的数据,也可以写数据到输出引脚。
程序片段如下:
LDR R0,=GPHCON ;假设已经定义GPHCON地址为0x56000070
LDR R1,=0x00000A50 ;控制寄存器GPHCON的控制字
STR R1,[R0] ;写入控制寄存器GPHCON中
LDR R0,=GPHUP ;假设已经定义GPHCON地址为0x56000078 LDR R1,[R0] ;读原来上拉寄存器GPHUP的值
ORR R1,R1,#0x0000000C ;GPH2/GPH3内部上拉
STR R1,[R0] ;写入上拉寄存器GPHUP中
LDR R0,=GPHDAT ;假设已经定义GPHDA T地址为0x56000074 LDR R1,[R0] ;读原来数据寄存器GPHDAT的值
ORR R1,R1,#0x00000004 ;GPH2对应位置1(输出高电平)
AND R1,R1,#0xFFFFFFF7 ; GPH3对应位置0(输出低电平)
STR R1,[R0] ;写入数据寄存器GPHDAT中
7、串行异步通信接口UART
(1)UART线路控制寄存器
S3C2410/S3C2440有三个UART接口UART0、UART1、UART2,其对应的线路控制寄存器为ULCON0、ULCON1、ULCON2,用于确定传输帧的格式,地址分别为0x50000000、0x50004000、0x50008000,可读写,复位时全是0,其含
三个UART对应的控制寄存器为是UCON0、UCON1、UCON2地址分别是
(3)UART发送接收状态寄存器
三个UART对应的发送/接收状态寄存器为UTRSTAT0、UTRSTAT1、UTRSTAT2,地址分别为0x50000010、0x50004010、0x50008010,只读,各位的
UART数据寄存器分为发送缓冲寄存器UTXHn和接收缓冲寄存器URXHn。
三个通道的UART发送缓冲器位UTXH0、UTXH1、UTXH2,地址分别为0x50000020、0x50004020、0x50008020,接受缓冲器为URXH0、URXH1、URXH2,地址分别为0x50000024、0x50004024、0x50008024.
(5)UART波特率除数寄存器
UART的波特率由除数寄存器决定,也取决于外部时钟,关系是如下:UBRDIVn = INT(UCLK/(波特率*16))-1。