day03 实验一:GPIO
==============================================================
一、用户手册导读
RAM ROM--可以执行程序
硬盘 nand flash --不能执行程序,必须被加载到内存中,才能执行
1.资源特性:
CPUS3c2440400MHz
内存(sdram)2个32M并联 = 64MB
NorFlash2M
NandFlash2Gb = 256MB
2.内存布局
sdram起始地址:0x30000000 ~ 0x34000000nGCS6
二、原理图
三、s3c2440 主芯片手册
1.Product Overview
1.s3c2440芯片的内部组成
ARM920T内核
MMU
高性能外设控制器--AHB Bus
普通外设控制器--APB Bus
4k的SRAM
内部总线
2.引脚封装
289pin FBGA
pin number
pin name
pin signal
3.SFR(special functional register)
r0-r15 --> ARM内核的寄存器
SFR ---> 各控制器上的寄存器
和内存统一编址
2.Programmers Model
3.ARM/Thumb Instruction Sets
4.各控制器的单独描述
5.Memory Controller
程序的运行地址:
SRAM or SDRAM
SDRAM的位置:
0x30000000 ~ 0x34000000
SRAM的位置:
Nor 启动:0x40000000 ~ 0x40001000 4k
Nand启动:0x0 ~ 0x1000 4k
四、GPIO实验
General purpose input/output ports
s3c24408 ports
GPA - GPH,GPJ
寄存器描述:
GPACON - GPJCON-->功能配置寄存器 (input/output/mux)
GPADAT - GPJDAT --> 数据配置寄存器 (high/low)
GPBUP - GPJUP --> 上拉寄存器 (yes/no)
Extern Interrupt controller register
==============================================================
day04 实验二:UART
==============================================================
1.如何学习操作一个外设
1.先看实物
9针公头
2.硬件连接(原理图)
s3c2440(GPH2,GPH3) --> max3232(电平转换,转换TTL电平为RS电平) ---> COM0
CON1,CON2,CON3提供串口外接
3.芯片手册(s3c2440 UART控制器)
1.UART控制器的内部组成(Block Diagram)
1.Transmiter
64FIFO
shifter
2.Receiver
64FIFO
shifter
3.BaudRate Generator--> Clock Source
4.APB
2.UART的操作
1.数据发送
可编程:8N1
产生break condition
2.数据接收
可编程:8N1
错误检测:
3.波特率
可编程:
UBRDIVn = (int)( UART clock / ( buad rate x 16) ) –1
4.AFC
disable
5.FIFO MODE
Non-FIFO
6.IR MODE
Normal Mode
3.寄存器
ULCON00x50000000//设置8N1,IR Mode
UCON00x50000004//clock selection , Interrupt or Polling or DMA, Interrupt trigger
UFCON00x50000008//disable FIFO
UMCON00x5000000C//disable AFC
UTRSTAT00x50000010//status register
UTXH00x50000020//transmiter holding register 发送缓冲寄存器
URXH00x50000024//reciever holding register接收缓冲寄存器
UBRDIV00x50000028//波特率设置寄存器
UBRDIVn = (int)( UART clock / ( buad rate x 16) ) –1
(int)(50 * 1000 * 1000/(115200 * 16) - 1) = 26
==============================================================
day05 实验三:时钟
==============================================================
1.实物
x2(s3c2440) ---------12MHz
x6(dm9000)---------25MHz
x1(rtc)--------- 32.768KHz
2.硬件连接(原理图)
3.芯片手册
1.时钟控制器组成:
1.时钟源选择(OM[3:2])
12MHz 晶振
外部时钟信号
2.两个PLL
MPLL用于FCLK,HCLK,PCLK
UPLL用于USB Block
3.时钟控制单元
4.HDIVN和PDIVN
2.开发板使用的时钟频率
FCLK(400MHz)-->ARM920T
HCLK(100MHz)-->AHB Bus(Interrupt,SDRAM,NANDFLASH)
PCLK(50MHz)-->APBBus(UART,IIC,SPI,IIS,GPIO)
3.PLL(Phase Locked Loop)
功能:倍频
M,P,S
locktime-->FCLK没有输出,CPU不工作
加电/reset之后,MPLL会自动开始工作,但是使用12MHz的系统时钟,除非写入一个有效的值
4.SFR
LOCKTIME 0x4C000000//变频锁定时间
MPLLCON 0x4C000004//设置PLL的输出频率92,1,1
CLKCON 0x4C00000C
CLKSLOW 0x4C000010//慢时钟设置disable 0
CLKDIVN 0x4C000014//设置FCLK的降频因子
CAMDIVN 0x4C000018//设置bit9为0
==============================================================
day06 实验四:异常和中断
==============================================================
异常模式 向量
--------------------------------------------------
ResetSVC0x0
Undefined InstructionUND0x4
SwiSVC0x8
Prefetch AbortABORT 0xC
Data AbortABORT 0x10
Reserve 0x14
IRQIRQ0x18
FIQFIQ0x1C
2.优先级
Reset
Data Abort
Prefetch Abort
FIQ
IRQ
SWI UND
3.产生异常之后,系统自动做的事情
1.备份返回地址
将pc-4放入对应异常模式的r14中
2.备份状态寄存器
将cpsr,保存到对应模式的spsr
3.强制切换到对应的异常模式
修改cpsr,强制切换模式
4.将pc值强制修改为对应的异常向量
5.如果产生异常之前处于Thumb状态,切换到ARM状态
6.对于有些异常,会禁用掉irq和fiq,防止不予预期的异常嵌套
4.产生异常之后,程序员应做的事情
1.安装异常处理程序
在异常向量表处存放一条跳转指令,跳转到真正的异常处理例程
注意:
不能使用BL
使用b指令应该考虑范围:+=32MB
使用ldr指令应该考虑文字池的位置
2.异常处理例程
1.保存现场
stmfd sp!,{r0-r12,r14}
2.获取中断编号
3.处理
bl swi_handler
注意:多个子程序嵌套注意保存r14的值
4.恢复现场
ldmfd sp!,{r0-r12,pc}^
二、中断(IRQ,FIQ)
1.中断控制器
SUBSRCPND
SUBMASK
SRCPND
MASK + MODE
if irq
(priority)
INTPND
2.中断的分类
内部中断
CPU内部的控制器产生的中断:Uart0,IIC
外部中断
外部设备产生的中断:key1-key6
3.中断产生之后,CPU做的事情:
和异常相同
相应的pending被自动置位
4.中断产生之后,程序员做的事情:
和异常相同
清除对应的pending位(写1清除)
5.中断相关寄存器
1.内部中断
SRCPND0X4A000000
INTMOD0X4A000004
INTMSK0X4A000008
PRIORITY0x4A00000C
INTPND0X4A000010
INTOFFSET 0x4A000014
子中断相关:
SUBSRCPND0X4A000018
INTSUBMSK0X4A00001C
2.外部中断
配置触发方式:
EXTINT0 0x56000088
eint0 - eint7
EXTINT1 0x5600008c
eint8-eint15
EXTINT2 0x56000090
eint16 - eint23
配置外部中断掩码
EINTMASK 0x560000a4
eint4 - eint23
配置外部中断未决
EINTPEND 0x560000a8
eint4 - eint23
6.关于中断处理程序,返回地址的修正
1.在产生异常之后,CPU总是会将PC-4保存到对应异常的LR中
2.对于不同的异常,对该返回地址需要进行相应的修正
swi不需要修正
irq/fiq-4