s3c2440
个人感悟:学习ARM最有系统的办法就是通读芯片手册全文,从最开始引言部分(特别重要),如果时间不够,就读最开始的引言+产品概述+程序员模型+指令集。
目录:
1.芯片结构认识:
2.所有的开发板特殊功能(如:LED灯显示、按键控制、看门狗、时钟分频、串口),都是建立在s3c2440芯片内特殊功能模块的特殊功能寄存器组的使用
1.芯片结构认识:
引言:
ARM公司设计的 16/32 位ARM920T 的 RISC 处理器。ARM920T 实现了 MMU,AMBA 总线和哈佛结构高速缓冲体系结构。这一结构具有独立的 16KB 指令高速缓存和 16KB 数据高速缓存。每个都是由具有 8 字长的行(line)组成。
通过提供一套完整的通用系统外设,S3C2440A 减少整体系统成本和无需配置额外的组件。综合对芯片的功能描述,本手册将介绍 S3C2440A 集成的以下片上功能:
● 1.2V 内核供电, 1.8V/2.5V/3.3V 储存器供电, 3.3V 外部 I/O 供电,具备 16KB 的指令缓存和 16KB 的数据缓存和 MMU的微处理器
● 外部存储控制器(sdram 控制和片选逻辑)
● LCD 控制器(最大支持 4K 色 STN 和 256K 色 TFT)提供 1 通道 LCD 专用 DMA
● 4 通道 DMA 并有外部请求引脚
● 3 通道 UART(IrDA1.0, 64 字节发送 FIFO 和 64 字节接收 FIFO)
● 2 通道 SPI
● 1 通道 IIC 总线接口(支持多主机)
● 1 通道 IIS 总线音频编码器接口
● AC’97 编解码器接口
● 兼容 SD 主接口协议 1.0 版和 MMC 卡协议 2.11 兼容版
● 2 通道 USB 主机/1 通道 USB 设备(1.1 版)
● 4 通道 PWM 定时器和 1 通道内部定时器/看门狗定时器
● 8 通道 10 位 ADC 和触摸屏接口
● 具有日历功能的 RTC
● 摄像头接口(最大支持 4096×4096 像素输入;2048×2048 像素输入支持缩放)
● 130 个通用 I/O 口和 24 通道外部中断源
● 具有普通,慢速,空闲和掉电模式
● 具有 PLL 片上时钟发生器
芯片特性(摘取部分):
时钟和电源管理
● 片上 MPLL 和 UPLL:
UPLL 产生时钟运作 USB 主机/设备
MPLL 产生时钟运作 1.3V 下最高 400MHz 的 MCU
● 用软件可以有选择的提供时钟给各功能模块
● 电源模式:普通、慢速、空闲和睡眠模式
普通模式:正常运行模式
慢速模式:无 PLL 的低频率时钟
空闲模式:只停止 cpu 的时钟
睡眠模式:关闭包括所有外设的核心电源
● EINT[15:0]或 RTC 闹钟中断触发从睡眠模式中唤醒
中断控制器
● 60 个中断源(1 个看门狗,5 个定时器, 9 个 UART,24 个外部中断,4 个 DMA,2 个 RTC,2 个 ADC,1 个 IIC,2 个 SPI,1 个 SDI,2 个 USB,1 个 LCD,1 个电池故障,1 个 NAND,2 个摄像头,1 个 AC ’ 97)
● 外部中断源中电平/边沿模式
● 可编程边沿和电平的极性
● 支持快速中断请求(FIQ)给非常紧急的中断请求
通用输入/ 输出端口
● 24 个外部中断端口
● 130 个复用输入/输出端口
DMA 控制器
● 4 通道 DMA 控制器
● 支持存储器到存储器,IO 口到存储器,存储器到IO 口和 IO 口到 IO 口的传输
● 采用触发传输模式来提高传输速率
UART
● 3 通道基于 DMA 或基于中断运行的 UART
● 支持 5 位、6 位、7 位、或 8 位串行数据发送/接收
● 支持 UART 运行在外部时钟(UEXTCLK)
● 可编程波特率
● 支持 IrDA 1.0
● 测试用回环模式
● 每个通道都包含内部 64 位发送 FIFO 和 64 位接收 FIFO
看门狗定时器
● 16 位看门狗定时器
● 中断请求或系统复位超时
工作电压范围
● 核心电压: 300MHz 下 1.20V
400MHz 下 1.30V
● 存储器电压: 1.8V/2.5V/3.0V/3.3V
● I/O 口电压: 3.3V
工作频率
● Fclk 最高 400MHz
● Hclk 最高 136MHz
● Pclk 最高 68MHz
封装
● 289-FBGA
引脚分配:
S3C2440A 引脚分配(289-FBGA),(A~U)*(1~17)=17*17=289个引脚
信号端描述(摘录):
S3C2440A 特殊寄存器(摘录):
************************************************************************************
I/O端口:
端口F控制寄存器(GPFCON, GPFDAT)
如果GPF0 GPF7在关机模式下用于唤醒信号,端口将设置为中断模式。
************************************************************************************************
2.所有的开发板特殊功能(如:LED灯显示、按键控制、看门狗、时钟分频、串口),都是建立在S3C2440芯片内特殊功能模块的系列特殊寄存器的使用。
例如:
(1)LED、按键是直接配置2440相应的输出控制引脚、数据引脚,File:led_on1.S例程:
/*配置邋邋GPF4为输出引脚,把0X10写到地址0X56000050*/
LDR R1, =0X56000050
LDR R0, =0X100 //或者 MOV R0, 0X100,GPFCON = 0X0000 0100
STR R0, [R1]
/*设置邋邋GPF4为低电平输出0,写到地址:0x56000054*/
LDR R1, =0x56000054
LDR R0, =0 //GPFDAT = 0x0000 0000
STR R0, [R1]
其中,仅仅使用了寄存器GPFCON = 0X0000 0100和GPFDAT = 0x0000 0000
GPIO,英文全称为General-Purpose IO ports,也就是通用IO口。在嵌入式系统中常常有数量众多,但是结构却比较简单的外部设备/电路,对这些设备/电路有的需要CPU为之提供控制手段,有的则需要被CPU用作输入信号。而且,许多这样的设备/电路只要求一位,即只要有开/关两种状态就够了,比如灯亮与灭。对这些设备/电路的控制,使用传统的串行口或并行口都不合适。所以在微控制器芯片上一般都会提供一个“通用可编程IO接口”,即GPIO。接口至少有两个寄存器,即“通用IO控制寄存器”与“通用IO数据寄存器”。数据寄存器的各位都直接引到芯片外部,而对数据寄存器中每一位的作用,即每一位的信号流通方向时输入还是输出,则可以通过控制寄存器中对应位独立的加以设置。这样,有无GPIO接口也就成为微控制器区别于微处理器的一个特征。
在实际的MCU中,GPIO是有多种形式的。比如,有的数据寄存器可以按照位寻址,有些却不能按照位寻址,这在编程时就要区分了。比如传统的8051系列,就区分成可位寻址和不可位寻址两种寄存器。另外,为了使用的方便,很多mcu把glue logic等集成到芯片内部,增强了系统的稳定性能,比如GPIO接口除去两个标准寄存器必须具备外,还提供上拉寄存器,可以设置IO的输出模式是高阻,还是带上拉的电平输出,或者不带上拉的电平输出。这在电路设计中,外围电路就可以简化不少。
另外需要注意的是,对于不同的计算机体系结构,设备可能是端口映射,也可能是内存映射的。如果系统结构支持独立的IO地址空间,并且是端口映射,就必须使用汇编语言完成实际对设备的控制,因为C语言并没有提供真正的“端口”的概念。如果是内存映射,那就方便的多了。举个例子,比如像寄存器A(地址假定为0x48000000)写入数据0x01,那么就可以这样设置了。
引用链接:HTTPs://blog.csdn.net/liangkaiming/article/details/6307410
(2)看门狗
File: start.S 例程:
其中,仅仅使用了看门狗的控制位[0x53000000]
(3)时钟分频
File: start.S 例程:
LOCKTIME 0x4C000000 ← W R/W PLL lock time counter(保持默认值)
MPLLCON 0x4C000004 MPLL control(主时钟源设置= (92<<12)|(1<<4)|(1<<0))
UPLLCON 0x4C000008 UPLL control(USB时钟源保持默认值)
CLKCON 0x4C00000C Clock generator control(控制各外部设备,如:UART、IIC、GPIO等的使能,保持默认(使能1))
CLKSLOW 0x4C000010 Slow clock control(时钟慢速控制及寄存器保持默认值)
CLKDIVN 0x4C000014 Clock pider control(分频:T-FCLK :T- HCLK :T- PCLK=1:4:8)
CAMDIVN 0x4C000018 Camera clock pider control(摄像头分频寄存器:保持默认值)
其中,用到了寄存器LOCKTIME【0x4C000000 】(保持默认值),CLKDIVN【0x4C000014 】,MPLLCON [0x4C000004 ]寄存器的设置和应用
(4)串口
(5)