ARMS3C2440A讲解
- 格式:doc
- 大小:849.01 KB
- 文档页数:23
S3C2440A中的时钟控制逻辑可以产生必须的时钟信号,包括CPU的FCLK,AHB总线外设的HCLK以及APB总线外设的PCLK。
S3C2440A包含两个锁相环(PLL):一个提供给FCLK、HCLK和PCLK,另一个专用于USB模块(48MHz)。
时钟控制逻辑可以不使用PLL来减慢时钟,并且可以由软件连接或断开各外设模块的时钟,以降低功耗。
S3C2440A的主时钟源由外部时钟(EXTCLK)或者外部晶振(XTIPll)提供,输入时钟源由模式控制引脚OM3和OM2控制选择,在复位信号的上升沿参考OM3和OM2的引脚将OM[3:2]的状态在内部锁定,如图1所示图1 引导启动时的时钟源选择选择不同输入时钟源时连接方式如图2所示:图2 时钟连接参考通过在片内集成的2个锁相环:MPLL和UPLL,可对输入的Fin=12MHz的晶振频率进行倍频。
S3C2440使用了三个倍频因子MDIV、PDIV和SDIV来设置倍频,通过寄存器MPLLCON和UPLLCON可设置倍频因子。
其中MPLLCON寄存器用于设置处理器内核时钟主频FCLK,其输入输出频率间的关系为FCLK=MPLL=(2*m*Fin)/(p*2^s)其中m=(MDIV+8), p=(PDIV+2), s=SDIV。
其中UPLLCON寄存器用于产生48MHz或96MHz,提供USB时钟(UCLK),其输入输出频率间的关系为UCLK=UPLL=(m * Fin) / (p * 2^s)其中m=(MDIV+8), p=(PDIV+2), s=SDIV。
手工计算相对复杂些,我们可以根据欲得到的主频FCLK大小,直接通过查表来获知各倍频因子的设置参数,详见。
S3C2440的数据手册中提供了一个表格来查询各个输出频率和输入频率所对应的MPLL中参数m、p和s 的值,使用的时候最好只使用该表格中推荐的数值。
图3 PLL真值表通过图3的真值表,我们可以得到如果输入时钟为12MHz,输出时钟FCLK为405MHz,可以选择MDIV 为127,PDIV为2,SDIV为1。
S3C2440存储控制器的地址空间与MMU分析介绍一、S3C2440存储控制器如果大家写过S3C2440的ARM裸机程序都应该知道通常SDRAM的起始地址是0X30000000,但是大家有没有想过为什么呢?下面我将给大家做一个简要的介绍。
查S3C2440的手册可知S3C2440可寻址1G的地址范围,但是S3C2440的地址线只有27根,理论上只能寻址2的27次方等于128M的地址范围。
于是S3C2440通过一个叫BANK 的东东解决了这个问题。
S3C2440引出了8根BANK线(对应nGCS0~ nGCS7),通过这个8根线来选通和关闭不同的存储器,这样S3C2440最多就可以连接8个128M的存储器,只要在某一时刻只选通一个BANK就可以实现1G的寻址空间每个BANK有个地址,对该BANK地址的访问实际上就是选通该BANK,于是ARM核只要发出一个地址,然后S3C2440的储存控制器只要把该地址解释成两部分:一部分是BANK地址一部分是连接到该BANK存储器内部的地址就可以访问了。
而作为32位的CPU,可以使用的地址范围理论上可以达到2的32次方等于4G,除去上述的1G地址空间,还有一部分是CPU内部寄存器的地址,剩下的地址空间没有使用。
下面我们来看到S3C2440存储器的地址空间分布图左边的是表示CPU从NOR FLASH启动时的地址空间图,右边是CPU从NAND FLASH 启动时的地址空间图。
从图中可以看出SDRAM接在BANK6上面,地址为0X30000000,这就解释了开始最开始的那个问题。
问题又来了为什么CPU从NAND和NOR启动时地址空间不同?这是因为NOR是线性结构,跟普通的内存差不多,它接在BANK0上。
而NAND则是另外一种结构,S3C2440有专用的NAND控制器和地址线来连接,它不能接在BANK0上。
CPU启动时必定从0地址开始执行程序,而从NAND启动时,0地址没有存储器,那CPU怎么办呢?于是就出现了一种叫“起步石”(stepping stone)的东东,它是S3C2440内部的一块4K的存储器,当从NAND启动时,0地址线会连接到起步石上面,同时CPU会通过内部的硬件将NAND FLASH开始的4K数据复制到起步石里面。
第十六章ADC和触摸屏接口16.1概述10位CMOS的ADC(模数转换器)是有8通道模拟输入的循环类型设备。
其转换模拟输入信号到10位的数字编码,最大的转换率是在2.5MHz转换时钟下达到500KSPS。
AD转换器支持片上采样和保持功能及掉电模式。
触摸屏接口可以控制或选择触摸屏触点用于XY坐标的转换。
触摸屏接口包括触摸触点控制逻辑和有中断产生逻辑的ADC接口逻辑。
16.2特点-分辨率:10位-微分线性误差:±1.0LSB-积分线性误差:±2.0LSB-最大转换速率:500KSPS-低功耗-供电电压:3.3V-输入模拟电压范围:0~3.3V-片上采样保持功能-普通转换模式-分离的XY坐标转换摸-自动连续XY坐标转换模式-等待中断模式16.3ADC及触摸屏接口操作模块图如图16-1所示AD转换器和触摸屏接口的功能模块图。
注意AD转换器设备是一个循环类型。
注意(图标)当触摸屏接口使用时,XM或PM应该接触摸屏接口的地。
当触摸屏设备不使用时,XM或PM应该连接模拟输入信号作为普通ADC转换用。
16.4功能描述16.4.1AD转换时间当GCLK频率为50MHz和预分频器(预定标器)值为49,总共10位转换时间如下:AD转换器频率=50MHz/(49+1)=1MHz转换时间=1/(1MHz/5cycles)=1/200KHz=5us注:AD转换器设计在最大2.5MHz时钟下工作,所以转换率最高达到500KSPS。
16.4.2触摸屏接口模式(1)正常转换模式单个转换模式可能多数是使用在通用目的的ADC转换。
该模式可以通过设置ADCCON(ADC控制寄存器)来初始化并且完成对ADCDAT0的读写操作(ADC数据寄存器0)。
(2)分离XY坐标转换模式触摸屏控制器可以在两种转换模式中的一种模式下操作。
分离的XY坐标转换模式由以下方法操作。
X坐标模式写X坐标转换数据到ADCDAT0,触摸屏接口产生中断源到中断控制器。
第二章处理器工作模式2.1概述S3C2440采用了非常先进的ARM920T内核,它是由ARM(Advanced RISC Machines) 公司研制的。
2.2 处理工作状态从程序员的角度上看,ARM920T可以工作在下面两种工作状态下的一种:● ARM 状态:执行32位字对齐的ARM指令● THUMB 状态:执行16位半字对齐的THUMB指令。
在这种状态下,PC 寄存器的第一位来选择一个字中的哪个半字注意;这两种状态的转换不影响处理模式和寄存器的内容。
2.3 切换状态进入THUMB 状态进入THUMB 状态,可以通过执行BX指令,同时将操作数寄存器的状态位(0位)置1来实现。
当从异常(IRQ,FIQ,UNDEF,ABORT,SWI等)返回时,只要进入异常处理前处理器处于THUMB状态,也会自动进入THUMB状态。
进入ARM状态进入ARM状态,可以通过执行BX指令,并且操作数寄存器的状态位(0位)清零来实现。
当处理进入异常(IRQ,FIQ,RESET,UNDEF,ABORT,SWI等)。
这时,PC值保持在异常模式下的link寄存器中,并从异常向量地址处开始执行处理程序。
存储空间的格式ARM920T将存储器空间视为从0开始由字节组成的线性集合,字节0到3中保存了第一个字节,字节4到7中保存第二个字,以此类推,ARM920T对存储的字,可以按照小端或大端的方式对待。
大端格式:在这种格式中,字数据的高字节存储在低地址中,而字数据的低字节则存放2.4 指令长度指令可以是32位长度(在ARM状态下) 或16位长度(在THUMB状态) 。
数据类型ARM920T支持字节(8位),半字(16位) 和字(32位) 数据类型。
字必须按照4字节对齐,半字必须是2字节对齐。
2.5 操作模式ARM920T支持7种操作模式:● 用户模式(user模式),运行应用的普通模式● 快速中断模式(fiq模式),用于支持数据传输或通道处理● 中断模式(irq模式),用于普通中断处理● 超级用户模式(svc模式),操作系统的保护模式● 异常中断模式(abt模式),输入数据后登入或预取异常中断指令● 系统模式(sys模式),使操作系统使用的一个有特权的用户模式● 未定义模式(und模式),执行了未定义指令时进入该模式]外部中断,异常操作或软件控制都可以改变中断模式。
由于片面问题,所以可能会看起来不太美观,可以看附件中的内容。
ARM启动代码相当于我们电脑的BIOS,也就是ARM启动时对处理器的一些初始化及嵌入式系统硬件的一些初始化。
由于它直接面对处理器内核和硬件控制器进行编程,一般都是用汇编语言。
一般包括:中断向量表,初始化存储器系统,初始化堆栈,初始化有特殊要求的断口,设备初始化,变量初始化等。
这几天对着RealView MDK-ARM中自带的启动代码研究了一下,遇到问题又对着数据手册和指令表看了一下,总算对S3C2440A的硬件有了一个大致的了解。
学习嵌入式系统重在系统,学习ARM只是为学习嵌入式系统铺路,懒猫比较笨可能在上系统之前要裸奔几天以强化以下对S3C2440A内部结构的了解。
把MDK自带的S3C2440A.S文件的注释发一下,这些是懒猫结合数据手册与ARM指令表理解了,可能会有错误,放在这里只是引导一下像我一样还没有入门的兄弟们,希望你们不要害怕ARM害怕嵌入式,老毛他老人家说的对,世上无难事,只怕有心人,ARM指令就那么多,看一遍不会就多看几遍,还有一定要学习看软件自带的帮助文件.;/*****************************************************************************/;/* S3C2440.S: Startup file for Samsung S3C440 */;/*****************************************************************************/;/* <<< Use Configuration Wizard in Context Menu >>> */ ;/*****************************************************************************/;/* This file is part of the uVision/ARM development tools. */ ;/* Copyright (c) 2005-2008 Keil Software. All rights reserved. */ ;/* This software may only be used under the terms of a valid, current, */;/* end user licence from KEIL for a compatible version of KEIL softwar e */;/* development tools. Nothing else gives you the right to use this softwa re. */;/*****************************************************************************/;下面这些参数是与CPSR状态寄存器有关;参数的由来:这里各个模式的参数是由寄存器CPSR的模式位设置M[4:0]得来的,;比如这里的用户模式,CPSR的M[4:0]设置为10000就是0x10。
s3c2440工作原理
S3C2440是一款ARM11核心的微处理器,其工作原理可以概括为以下几
个方面:
1. 地址空间管理:S3C2440的存储器控制器具有大小端模式选择、可编程
的访问位宽、8个存储器banks等特点。
每个bank有128M 的字节(总
共1G字节/8个banks)。
其中,前6个存储器bank(bank0-bank5)可以是ROM、SRAM等类型的存储器,而后两个存储器bank(bank6-
bank7)则可以作为ROM、SRAM、SDRAM等类型的存储器。
2. 数据传输方式:S3C2440提供了三个UART端口,每个UART端口都可以通过查询、中断和DMA方式传输数据。
当发送数据时,CPU先将数据写入发送FIFO中,然后UART会自动将FIFO中的数据复制到“发送移位器”中,发送移位器将数据一位一位地发送到TXDn数据线上。
接收数据时,“接收移位器”将RXDn数据线上的数据一位一位地接收进来,然后复制到接收FIFO中,CPU即可从中读取数据。
3. 寄存器配置:S3C2440的UART有3个独立通道,每个通道支持的停止位有1位、2位,数据位有5、6、7、8位,支持校验功能,另外还有红外发送/接收功能。
这些功能通过相应的寄存器进行配置。
以上信息仅供参考,如需了解更多信息,建议查阅S3C2440的硬件手册或相关技术文档。
ARM9嵌入式处理器S3C2440实现了远程图像光线监控系统对图像监控系统,用户常常提出这样的功能需求:希望能够监控距离较远的对象这些对象有可能分布在郊区、深山,荒原或者其他无人值守的场合;另外,希望能够获取比较清晰的监控图像,但对图像传输的实时性要求并不高很明显,用传统的PC机加图像采集卡的方式很难满足这样的需求。
在嵌入式领域,ARM9系列微处理器在高性能和低功耗方面提供了最佳的性能,因此选用ARM9嵌入式处理器S3C2440设计实现了一个远程图像光线监控系统通过这个系统,可以远在千里之外控制一个摄像机进行图像采集并回传。
如果这个摄像机有一个485接口的云台,还可以通过互联网远程控制摄像机的取景角度、镜头拉伸、聚焦等功能除了获取图像数据.系统还提供了多路开关控制和数据采集功能,可以连接温度、湿度等各类传感器和控制红外夜视灯等其他外部设备的开关状态。
最后,通过GP RS或C DMA无线通信模块及Internel互联网将数据传至任何地方。
1 系统设计本系统采用三星公司的S3C2440嵌入式处理器和arm-linux 2.4.26操作系统;S3C2440使用ARM920T内核,主频是400 MHz;除了集成通用的串口控制器、USB控制器、A/D转换器和GPIO等功能之外,还集成了一个摄像头接门(CAMIF)(这个接口是远程图像采集的核心部分)。
系统在S3C2440处理器的控制下,从CCD摄像机采集模拟视频信号,然后经过编码、DMA传输到内存缓冲,接着由软件对内存中的数字视频数据进行压缩和打包.最后通过通信单元将图像以IP包的方式发送到监控中心的服务器。
整个系统的硬件结构原理如图1所示1.1 图像采样接口S3C2440的摄像头接口(CAMIF)支持ITU-R BT.601/656 YCbCr 8比特标准的图像数据输入,最大可采样4096×4096像素的图像。
摄像头接口可以有两种模式与DMA控制器进行数据传输:一种是P端口模式,把从摄像头接口采样到的图像数据转为RGB数据,并在DMA控制下传输到SDRAM(一般这种模式用来提供图像预览功能);另一种是C端口模式,把图像数据按照YCbCr 4:2:0或4:2:2的格式传输到SDRAM(这种模式主要为MPEG-4、H.263等编码器提供图像数据的输入)。
LPC3250与S3C2440A性能及功能参数对比1.性能/功能参数对比表续上表2.芯片的用户手册下载地址LPC3250用户手册下载地址:/support/documents/microcontrollers/pdf/user.manual.lpc3220.01.lpc3230.01.lpc3240.01.lpc3250.01.pdfS3C2440A用户手册下载地址:/global/business/semiconductor/productInfo.do?fmly_id=229&part num=S3C2440&xFmly_id=2293.结合WinCE系统分析LPC3250的优势优势(一)——AHB矩阵总线结构由于LPC3250内部采用了先进的矩阵总线结构,使得LPC3250即使主频比S3C2440A 低了近200MHZ,但是整体的性能差距却不大。
优势(二)——LCD分辨率LPC3250支持1024*768的分辨率,而对系统性能几乎不会产生影响;而S3C2440A数据手册中支持最高640*480的分辨率,实际应用最高也只能到800*480。
射 频 和 天 线 设 计 培 训 课 程 推 荐易迪拓培训()由数名来自于研发第一线的资深工程师发起成立,致力并专注于微波、射频、天线设计研发人才的培养;我们于2006年整合合并微波EDA网(),现已发展成为国内最大的微波射频和天线设计人才培养基地,成功推出多套微波射频以及天线设计经典培训课程和ADS、HFSS等专业软件使用培训课程,广受客户好评;并先后与人民邮电出版社、电子工业出版社合作出版了多本专业图书,帮助数万名工程师提升了专业技术能力。
客户遍布中兴通讯、研通高频、埃威航电、国人通信等多家国内知名公司,以及台湾工业技术研究院、永业科技、全一电子等多家台湾地区企业。
易迪拓培训推荐课程列表:/peixun/tuijian/射频工程师养成培训课程套装该套装精选了射频专业基础培训课程、射频仿真设计培训课程和射频电路测量培训课程三个类别共30门视频培训课程和3本图书教材;旨在引领学员全面学习一个射频工程师需要熟悉、理解和掌握的专业知识和研发设计能力。
一、产品概述:S3C2440A微处理器是一款由Samsung半导体公司推出的高性能、低功耗、高集成度并具有工业级温度范围和性能的微处理器,经过工业级EMC测试,相对S3C2440A有以下优势:公司网址:01-具有工业级温度范围02-主频高达533MHz03-具有数字摄像头接口04-更低的内核电压05-支持更多分辨率液晶屏06-支持多种电压存储器07-具有AC97编解码器接口08-具有更多可用的I/O口09-UART口输入输出各具有64字节FIFO10-无需外围电路的触摸屏接口二、硬件资源:01-程序处理器:Samsung的S3C2440A-40(ARM920T)微处理器,工作频率最高可达533MHz 02-内存:2片4Banks×4Mbits×16bits SDRAM,共64MB;可扩展至128MB03-Nandflash:256M×8bits Nandflash(K9F2G08)04-Norflash:4MB.支持容量128M或更高05-时钟:12MHz系统外部时钟源;32.768KHz的RTC时钟源06-电源:支持3.3V或5V电压(设计可选)供电三、物理特性:01-六层板工艺,经过长期强电磁环境考验,性能稳定02-长70mm,宽50mm,独特的双列贴装使得底版布线更加容易03-两条100PIN的连接器,另有一条16PIN,总计216pin,引出了所有可用接口四、核心板图示:核心板实物图1核心板实物图2 五、核心板引脚定义:六、应用范围:此核心板适用于我公司的S3C2440开发板及工程项目应用加速产品开发周期七、资料提供:01-ADS v1.2安装程序(评估版)02-ADS v1.2的JTAG调试软件03-烧写工具软件04-串口工具软件sscom32.exe、dnw.exe、t ftp.exe05-并口及USB Device接口驱动程序06-BOOTLOADER源代码07-非操作系统测试程序源码08-uC/OS-II源码09-Linux for 3C2440内核源码包、文件系统、应用程序源码以及编译工具10-Windows CE for S3C2440 BSP包11-核心板电路原理图,底板所有设计资料(包括原理图和PCB版图)12-全部芯片手册及资料13-应用软件集成开发环境安装包八、供货清单:01-2440核心板一块02-光盘资料工会党支部工作总结[工会党支部工作总结] xxxx年,我们工会党支部在师直党工委的正确领导下,认真学习贯彻“三个代表”重要思想,学习党的十六届四中全会精神,自觉用“三个代表”重要思想指导工作,进一步加强党支部的建设,在工作中较好的发挥了政治核心和战斗堡垒作用,工会党支部工作总结。
s3c2440芯片原理
S3C2440是三星公司生产的一款32位嵌入式微处理器芯片,广
泛应用于嵌入式系统中,具有较高的性能和低功耗特点。
该芯片采
用ARM920T核心,集成了丰富的外设接口和功能模块,适用于多种
应用场景。
从原理上来说,S3C2440芯片的工作原理涉及到其内部结构和
外部接口。
首先,S3C2440芯片内部包含了ARM920T核心,该核心
是一种高性能、低功耗的32位RISC处理器,具有较强的运算能力
和低功耗特点。
此外,S3C2440还集成了存储控制器、多媒体接口、串行接口、并行接口、定时器、中断控制器等丰富的外设接口和功
能模块,可以满足不同嵌入式系统的需求。
在外部接口方面,S3C2440芯片具有丰富的外设接口,包括SDRAM控制器、NAND Flash控制器、LCD控制器、USB接口、以太网
接口等,这些接口可以与外部存储器、显示器、通信设备等进行连接,实现数据的输入、输出和处理。
此外,S3C2440还具有多个通
用输入输出引脚(GPIO)和模拟输入输出引脚(ADC),可以实现与外部
设备的通信和控制。
总的来说,S3C2440芯片的工作原理涉及到其内部结构和外部接口,通过内部核心和外设接口的协同工作,实现了嵌入式系统的数据处理、存储、显示和通信等功能。
在实际应用中,开发人员可以根据具体的需求,灵活配置S3C2440芯片的各种功能模块和外设接口,实现不同应用场景下的嵌入式系统设计和开发。
S3C2410A中⽂数据⼿册第⼀章产品综述1.1特性 (2)体系结构 (2)系统管理器 (3)NAND Flash 启动引导 (3)Cache 存储器 (3)时钟和电源管理 (3)中断控制器 (4)具有脉冲带宽调制功能的定时器 (4)RTC(实时时钟) (4)通⽤I/O端⼝ (4)UART (4)DMA控制器 (5)A/D转换和触摸屏接⼝ (5)LCD控制器STN LCD显⽰特性 (5)TFT彩⾊显⽰屏 (5)看门狗定时器 (5)IIC总线接⼝ (6)IIS总线接⼝ (6)USB主设备 (6)SD主机接⼝ (6)SPI接⼝ (6)⼯作电压 (7)操作频率 (7)封装 (7)1.2内部结构图 (8)表1-1 272-FBGA 引脚分配及顺序 (9)表1-2 272-FBGA封装的引脚分配 (12)信号描述 (21)表1-3 S3C2410A信号描述 (21)表1-4 S3C2410A 专⽤寄存器 (25)Samsung 公司推出的16/32位RISC处理器S3C2410A,为⼿持设备和⼀般类型应⽤提供了低价格、低功耗、⾼性能⼩型微控制器的解决⽅案。
为了降低整个系统的成本,S3C2410A提供了以下丰富的内部设备:分开的16KB的指令Cache和16KB数据Cache,MMU虚拟存储器管理,LCD控制器(⽀持STN&TFT),⽀持NAND Flash系统引导,系统管理器(⽚选逻辑和SDRAM控制器),3通道UART,4通道DMA,4通道PWM定时器,I/O 端⼝,RTC,8通道10位ADC和触摸屏接⼝,IIC-BUS接⼝,IIC-BUS接⼝,USB主机,USB 设备,SD主卡&MMC卡接⼝,2通道的SPI以及内部PLL时钟倍频器。
S3C2410A采⽤了ARM920T内核,0.18um⼯艺的CMOS标准宏单元和存储器单元。
它的低功耗、精简和出⾊的全静态设计特别适⽤于对成本和功耗敏感的应⽤。
一.CPU地址分配:1.s3c2440A的存储器控制器有以下特性:.大小端(通过软件选择).地址空间:每个bank有128M的字节(总共1G字节/8个banks).可编程的访问位宽,bank0(16/32位),其他bank(8/16/32位).共8个存储器banks.6个是ROM,SRAM等类型存储器bank(bank0----bank5).2个是可以作为ROM、SRAM、SDRAM等存储器bank(bank6----bank7).7个固定的存储器bank起始地址(bank0----bank6).最后一个bank的起始地址可调整(bank7,接两片sdram时.接在bank7上的sdram会根据bank6上的结束地址而调整).最后两个bank大小可编程.所有存储器bank的访问周期可编程.总线访问周期可通过插入外部wait来延长.支持SDRAM的自刷新和掉电模式理论上,cpu是32位的.可以寻址的空间为2的32次方,也就是4GB的地址空间.但我们cpu 只用了其中一1GB多一点的空间,其它的空间都是未到到.且看下图,我们作一个感性认识:图1(1)S3C2440A的存储器管理器提供访问外部存储器的所有控制信号,27位地址信号(ADDR[26:0])、32位数据信号(DA TA[31:0])、8个片选信号(nGCS[7:0])、以及读/写控制信号等.看图1,我们知道.从0x40000000地址开始,有片内SRAM,片内寄存器,还有未使用的空间.这是都是固定的,不能动的.留给我们用户的只有0x00000000到0x3FFF FFFF这1GB的地址空间给我们用.1GB的地址空间我们需要30根地址线才能完全寻址完毕,2的30次方刚好等于1GB,但是,芯片引脚上只给出了27根地址()ADDR[26:0]),单靠芯片上的27根引脚,它只能控制128M的空间,那3根线去哪里.其实这3根线用在了3-8译码器(如:000表示00000001,001表示00000010,010表示00000100,011表示00001000等等)的输入端去了,而这个3-8译码器的输出端,就是对应这nGCS0~7,对应着8个bank,用于选择当前处于哪个bank,这样做的好处在于很模块化结构化了,便于管理.不会造成一片和手动去分割地址.(2)bank0---bank5为固定128MB,bank6和bank7的容量可编程改变,可以是2、4、8、16、32、64、128MB请看图2图2所以.7个固定存储器bank(bank0-bank6)起始地址。
以下程序在Keil4中建立项目,芯片选S3C 2410A无论是S3C2410A还是S3C2440A,其IO口B都是11位二进制数,xxx xxxx xxxx,现在控制第5、6、7、8为做输出点亮LED灯(共阳极,输出0点亮),即xx8 765x xxxx,GPBCON equ 0x56000010GPBDAT equ 0x56000014GPBUP equ 0x56000018xport xmainarea Init,code,readonlyentryexportxmainldr r0,=GPBCONldr r1,[r0]bic r1,#0x3fC00 ;r1=xx00 0000 00xx xxxx xxxxorr r1,#0x15400 ;r1=xx01 0101 01xx xxxx xxxxstr r1,[r0] ;r1传给GPBCON设置8765位为输出ldr r0,=GPBUPldr r1,[r0]orr r1,#0x1e0 ;r1=xx1 111x xxxxstr r1,[r0] ;开B口第8、7、6、5位上拉电阻ldr r0,=GPBDATldr r2,[r0] ;把B口最初状态保存在R2 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;LOOP dr r1,[r2]orr r1,#0x1c0str r1,[r0]bl delay;BL跳转时将PC+4值自动保存在R14即LR中,也就是将程序的下一个语句地址保存在lr中在跳;转后执行mov pc,lr相当于返回,这样BL相当于调用子程序,pc=lr相当于子程序返回;;;;;;;;;;;;;;;;;;dr r1,[r2]orr r1,#0x1a0str r1,[r0]bl delay;;;;;;;;;;;;;;;;;;;;;ldr r1,[r2]orr r1,#0x160str r1,[r0]bl delay;;;;;;;;;;;;;;;;;;;;;;;;ldr r1,[r2]orr r1,#0x0e0str r1,[r0]bl delay;;;;;;;;;;;;;;;;;;;;;;;;b LOOPdelaymov r3,#3delay1 sub r3,r3,#1cmp r3,#0x0bne delay1mov pc,lr ;这句相当于子程序返回语句 end1. A(*(volatile unsigned *)0x56000010)的意思是把0x48000000强制转换成volatile unsigned long类型的指针,暂记为p,那么就是#define A *p,即A为P指针指向位置的内容了。
这里就是通过内存寻址访问到寄存器A,可以读/写操作。
*(volatile unsigned *)0×48000080 含义:因为()优先级高于*,所以先执行(volatile unsigned*)0×48000080 这个表示将0×48000080强制转化为指针类型,指针指向的类型是unsigned,指针存放的地址为0×56000080。
也就是说指针指向寄存器A。
然后在执行()外面的*,表示取出指针所指向的值。
2.在ADS1.2中,可以先添加头文件,再调用。
调用头文件时,由于2440addr.h头文件在调用了option.h头文件的内容,而option.h头文件在有调用了def.h,所以,这三个头文件需要同时调用。
在利用厂家提供的资料制作自己的头文件也用注意这种情况!在keil4中进行时,Keil4已经预装了一些许可芯片的头文件,可以直接调用芯片型号的头文件,如S3C2440芯片,可直接调用#include“S3C2440.h"、如S3C2410芯片,可直接调用#include"S3C2410.h",也可以新建头文件,把下面的内容复制进响应的头文件文本文件中,保存,再在C语言程序中调用这些头文件。
#include"option.h"#include<stdio.h>#include<stdlib.h>#include"def.h"#include"2440addr.h"3. 2440addr.h定义了ARM内所有寄存器的名称,如A~F等多个IO口的控制寄存器名称;option定义了时钟的设置等功能;def.h定义了几个特殊字长名称,如U32为unsigned int(无符号长整型)、U16为unsigned short (短整形),S32为int型(有符号整型),S16为short int,U8为unsigned char ,S8为char等4.ARM开发不会都用汇编语言或C语言单独完成,往往是两者配合使用,一般用汇编编写初始化文件,设置程序入口(根据硬件状况设置),再用C语言编写开发程序。
如IMPORT xMain ;相当于设置主函数入口,C语言的主函数就必须用xMain(),不能用main()AREA Init,CODE,READONLYENTRYLDR R0,=0x3FF0000 ;LDR也是一种赋值语句,相当于MOV,不同是LDR的数前是=,mov的数前是#BIC R1,R1,#0xF80 ;给立即数0xF8(即1111 1000)取反,再与R1与运算,结果是立即数为1的位对应的R1位全为0;STR R1,[R0]LDR SP,=0x3FE1000BL xMainB . ;注意B后有个点END#define rGPBCON (*(volatile unsigned *)0x56000010)//Port B control#define rGPBDAT (*(volatile unsigned *)0x56000014)//Port B data#define rGPBUP (*(volatile unsigned *)0x56000018)//Pull-up control B//定义了各个特殊功能寄存器地址和名称,要使用必须调用该头文件/*=== 如果不调用该头文件,必须把要使用的定义名称和地址语句在主程序前声明#define rGPBCON (*(volatile unsigned *)0x56000010)//Port B control#define rGPBDAT (*(volatile unsigned *)0x56000014)//Port B data#define rGPBUP (*(volatile unsigned *)0x56000018)//Pull-up control *//* 自定义简单延迟程序 */int delay(int times){int i;for(i=0;i<times;i++);return 0;}/* 主程序 */void xMain(void) //主函数名称与主函数入口地址对应,在上面汇编Init.s中有定义{ //不能随意写成main,或者Main等,要查看或编写init.s文件(见下图)rGPBCON |=0x3fc00; //GPB5-8 able outputrGPBCON &=0x15400; //GPBCON两位管理GPBDAT的方向(见下面对应关系,00-in,01-out,10-other,11-无用);/ / 方向控制GPBCON d21d20 d19d18 d17d16 d15d14 d13d12 d11d10 d9d8 d7d6 d5d4 d3d2 d1d0// 输入输出sfrGPDAT d10 d9 d8 d7 d6 d5 d4 d3 d2 d1 d0rGPBUP |=0x1e0; //disable GPB5-8 pull up res,GPBUP一位管一位,0-链接上拉电阻,1-关闭上拉电祖while(1){rGPBDAT|=0x1e0;//GPB7 output 0rGPBDAT&=0xeff;delay(50000000);//调用汇编语言编写的延时程序rGPBDAT|=0x1e0;//GPB7 output 0rGPBDAT&=0xf7f;delay(50000000);//调用汇编语言编写的延时程序rGPBDAT|=0x1e0;//GPB7 output 0rGPBDAT&=0xfbf;delay(50000000);//调用汇编语言编写的延时程序rGPBDAT|=0x1e0;//GPB7 output 0rGPBDAT&=0xfdf;delay(50000000);//调用汇编语言编写的延时程序 }}ARM汇编程序基本知识1.汇编程序的基本组成ARM汇编语言程序中,程序是以程序段为单位组织代码的。
段是相对独立的指令或者代码序列,拥有特定的名称。
段的种类有代码段、数据段和通用段,代码段的内容为执行代码,数据段存放代码运行时需要用到的数据,通用段不包含用户代码和数据,所有通用段共用一个空间。
段使用AREA 伪操作来定义,并且说明相关属性,如代码段定义AREA Init, CODE, READONLY…数据段定义AREA Stack1,DATA,READWRITE,NOINIT,ALIGN=3……;GPIO寄存器宏定义GPBCON EQU 0x56000010GPBDAT EQU 0x56000014 GPBUP EQU 0x56000018 EXPORT xmainAREA LEDTESTh,CODE,READONLY ENTRYxmainldr r0,=GPBCONldr r1,[r0]bic r1,r1,#0x3fc00orr r1,r1,#0x15400str r1,[r0]ldr r0,=GPBUPldr r1,[r0]orr r1,r1,#0x1e0str r1,[r0]looptestldr r2,=GPBDATldr r3,[r2]bic r3,r3,#0x1e0orr r3,r3,#0xF0str r3,[r2]ldr r0,=0x2ffffffbl delayldr r3,[r2]bic r3,r3,#0x1e0orr r3,r3,#0x1e0str r3,[r2]ldr r0,=0x2ffffffbl delayb looptestdelaysub r0,r0,#1cmp r0,#0x0bne delayldr pc,=looptestEND一个汇编程序至少应该有一个代码段,可以有零或者多个数据段。