历史上的今天
返回首页

历史上的今天

今天是: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


推荐阅读

史海拾趣

C-MAX Time Solutions公司的发展小趣事

随着业务的不断发展,C-MAX Time Solutions公司开始寻求与行业内其他企业的战略合作。通过与一家知名通信设备制造商的合作,C-MAX成功将其时间同步技术融入对方的设备中,从而实现了产品的互补和市场的共同开拓。这一合作不仅拓宽了C-MAX的业务范围,也提高了其品牌在行业内的知名度和影响力。

AntennaHome公司的发展小趣事

随着5G技术的快速发展,电子行业迎来了新的变革。AntennaHome公司面临着来自行业内外的巨大挑战。为了应对这一变革,公司加大了对5G天线技术的研发力度,同时积极调整产品结构和市场策略。经过一段时间的努力,公司成功推出了多款适应5G时代需求的新型天线产品,为公司的持续发展奠定了坚实的基础。

Cal Test Electronics公司的发展小趣事

随着全球市场的不断变化和公司规模的扩大,Cal Test Electronics开始实施全球化战略。公司积极拓展海外市场,通过参加国际展会、建立海外销售渠道等方式,提高品牌知名度和市场份额。同时,公司还加强与国际同行的合作与交流,引进先进的技术和管理经验,不断提升自身的竞争力。这些努力使得Cal Test Electronics逐渐成为一个具有全球影响力的电子配件和测试产品制造商。


这些故事旨在展示Cal Test Electronics公司可能的发展轨迹和成就,但并非基于实际发生的事件。对于该公司的真实发展历程和故事,建议查阅相关官方资料或行业报告以获取更准确的信息。

E-San Electronic Co Ltd公司的发展小趣事

随着市场的不断变化和消费者需求的升级,E-San Electronic Co Ltd意识到技术创新是企业持续发展的关键。公司投入大量资金和资源,建立了自己的研发团队,并与多所高校和研究机构建立了合作关系。经过数年的努力,公司成功研发出了一系列具有自主知识产权的核心技术,这些技术不仅提升了产品的性能和质量,也为企业赢得了更多的市场份额。

Fremont_Micro_Devices_USA公司的发展小趣事

随着全球环保意识的提高和可持续发展的呼声日益高涨,E-San Electronic Co Ltd积极响应这一趋势,将环保和可持续发展理念融入企业的日常运营中。公司采用环保材料和节能技术生产电子产品,减少了对环境的污染和资源的浪费。同时,公司还积极参与各种环保公益活动和社会责任项目,为社会做出了积极的贡献。这些举措不仅提升了企业的社会形象和声誉,也为企业赢得了更多消费者的信任和支持。

Gould Ami公司的发展小趣事
检查传感器是否损坏或污垢阻塞,必要时进行清洗或更换。同时确保传感器安装位置正确,能够准确反映水位变化。

问答坊 | AI 解惑

觉得泰格功分器的幅度平衡,相位平衡还是差了点。

觉得泰格功分器的幅度平衡,相位平衡还是差了点。…

查看全部问答>

汽车自动变速箱阀体总成工作原理

自动变速器能够根据发动机负荷和车速等情况自动变换传动比,使汽车获得良好的动力性和燃料经济性,并减少发动机排放污染。自动变速器操纵容易,在车辆拥挤时,可大大提高车辆行驶的安全性及可靠性。        电子控制自动变 ...…

查看全部问答>

一款被完全误解的器件?

转自其他网站   为什么仪表放大器常常被人们误解呢?   图 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 ...…

查看全部问答>

PLC有趣的编程

  马路信号灯绿灯亮10秒接着亮黄灯10秒此时人行道信号灯亮红灯,之后马路信号灯红灯亮15秒人行道信号灯里亮绿灯。请问怎么编程?用S7-200梯形图或语句表…

查看全部问答>

关于FLASH_SetLatency();的疑问

看STM32的FLASH手册,关于FLASH_ACR寄存器的LATENCY位的说明,上面明确写着:     0 wait state if   0MHz < SYSCLK <= 24MHz     1 wait state if 24MHz < SYSCLK <= 48MHz     2 wait s ...…

查看全部问答>

IAR编译时候遇到问题

IAR编译时候,很多文件直接显示灰色,一个叉。不能编译时为什么啊?有遇到过这种问题的童鞋请帮帮忙…

查看全部问答>