历史上的今天
今天是:2025年01月10日(星期五)
2021年01月10日 | arm 裸板编程的总结(下)
2021-01-10 来源:eefocus
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 实验四:异常和中断
==============================================================
一、异常
1.异常的种类和对应的异常模式、向量
异常模式 向量
--------------------------------------------------
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
下一篇:arm 裸板编程的总结(上)
史海拾趣
|
自动变速器能够根据发动机负荷和车速等情况自动变换传动比,使汽车获得良好的动力性和燃料经济性,并减少发动机排放污染。自动变速器操纵容易,在车辆拥挤时,可大大提高车辆行驶的安全性及可靠性。 电子控制自动变 ...… 查看全部问答> |
|
转自其他网站 为什么仪表放大器常常被人们误解呢? 图 1 所示的 三运放仪表放大器看似为一种简单的结构,因为它使用已经存在了几十年的基本运算放大器 (op amp) 来获得差动输入信号。运算放大器的输入失调电压误差不难理解。运算 ...… 查看全部问答> |
|
调查一下,大家做GPRS数据传输的方法。用GPRS模块自带的协议栈,还是移植一个TCP/IP协议栈 做一个简单的小调查,用GPRS模块做数据传输系统,大家用的方法是: 1、使用GPRS模块自带的协议栈 2、移植一个TCP/IP协议栈,如Lwip 谢谢… 查看全部问答> |
|
在WinCE下,基于微软的框架开发摄像头,怎么让它连接电脑,变成摄像头使用 项目在WinCE下的摄像头构建成功,不是基于USB的。 在WinCE下通过DShow可以采集数据正常显示。 现在有新的要求,当我们的设备与电脑相连的时候,可以把它作为普通的摄像头来使用 例如,可以进行视频聊天等等。 这个应该怎么做的啊,那些电脑上的 ...… 查看全部问答> |
|
arm linux驱动编写中,中断服务程序中可以进行ioremap吗? 发现只要在中断服务程序中执行到ioremap函数就会报错 nable to handle kernel NULL pointer dereference at virtual address 00000000 pgd = c355c000 [00000000] *pgd=338e5031, *pte=00000000, *ppte=00000000 Internal error: Oops: 817 [#1 ...… 查看全部问答> |
|
看STM32的FLASH手册,关于FLASH_ACR寄存器的LATENCY位的说明,上面明确写着: 0 wait state if 0MHz < SYSCLK <= 24MHz 1 wait state if 24MHz < SYSCLK <= 48MHz 2 wait s ...… 查看全部问答> |




