arm 裸板编程的总结(下)

来源:本站
导读:目前正在解读《arm 裸板编程的总结(下)》的相关信息,《arm 裸板编程的总结(下)》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《arm 裸板编程的总结(下)》的详细说明。
简介:arm 裸板编程的总结

day03 实验一:GPIO

==============================================================一、用户手册导读RAM ROM--可以执行程序

硬盘 nand flash --不能执行程序,必须被加载到内存中,才能执行1.资源特性:

CPUS3c2440400MHz

内存(sdram)2个32M并联 = 64MB

NorFlash2M

NandFlash2Gb = 256MB2.内存布局

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

FIQFIQ0x1C2.优先级

Reset

Data Abort

Prefetch Abort

FIQ

IRQ

SWI UND3.产生异常之后,系统自动做的事情

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)

INTPND2.中断的分类

内部中断

CPU内部的控制器产生的中断:Uart0,IIC

外部中断

外部设备产生的中断:key1-key63.中断产生之后,CPU做的事情:

和异常相同

相应的pending被自动置位4.中断产生之后,程序员做的事情:

和异常相同

清除对应的pending位(写1清除)5.中断相关寄存器

1.内部中断

SRCPND0X4A000000

INTMOD0X4A000004

INTMSK0X4A000008

PRIORITY0x4A00000C

INTPND0X4A000010

INTOFFSET 0x4A000014子中断相关:

SUBSRCPND0X4A000018

INTSUBMSK0X4A00001C2.外部中断

配置触发方式:

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 裸板编程的总结(下)》最后刷新时间 2024-03-14 01:14:19,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《arm 裸板编程的总结(下)》该内容的真实性请自行鉴别。