at91rm9200启动过程教程 系统上电,检测BMS,选择系统的启动方式,如果BMS为高电平,则系统从片内ROM启动。AT91RM9200的ROM上电后被映射到了0x0和0x100000处,在这两个地址处都可以访问到ROM。由于9200的ROM中固化了一个BOOTLOAER程序。所以PC从0X0处开始执行这个BOOTLOAER(准确的说应该是一级BOOTLOADER)。这个BOOTLOER依次完成以下步骤: 1、PLL SETUP,设置PLLB产生48M时钟频率提供给USB DEVICE。同时DEBUG USART也被初始化为48M的时钟频率; 2、相应模式下的堆栈设置; 3、检测主时钟源(Main oscillator); 4、中断控制器(AIC)的设置; 5、C 变量的初始化; 6、跳到主函数。 完成以上步骤后,我们可以认为BOOT过程结束,接下来的就是LOADER的过程,或者也可以认为是装载二级BOOTLOER。AT91RM9200按照DATAFLASH、EEPROM、连接在外部总线上的8位并行FLASH的顺序依次来找合法的BOOT程序。所谓合法的指的是在这些存储设备的开始地址处连续的存放的32个字节,也就是8条指令必须是跳转指令或者装载PC的指令,其实这样规定就是把这8条指令当作是异常向量表来处理。必须注意的是第6条指令要包含将要装载的映像的大小。关于如何计算和写这条指令可以参考用户手册。一旦合法的映像找到之后,则BOOT程序会把找到的映像搬到SRAM中去,所以映像的大小是非常有限的,不能超过16K-3K的大小。当BOOT程序完成了把合法的映像搬到SRAM的任务以后,接下来就进行存储器的REMAP,经过REMAP之后,SRAM从映设前的0X200000地址处被映设到了0X0地址并且程序从0X0处开始执行。而ROM这时只能在0X100000这个地址处看到了。至此9200就算完成了一种形式的启动过程。如果BOOT程序在以上所列的几种存储设备中找到合法的映像,则自动初始化DEBUG USART口和USB DEVICE口以准备从外部载入映像。对DEBUG口的初始化包括设置参数115200 8 N 1以及运行XMODEM协议。对USB DEVICE进行初始化以及运行DFU协议。现在用户可以从外部(假定为PC平台)载入你的映像了。在PC平台下,以WIN2000为例,你可以用超级终端来完成这个功能,但是还是要注意你的映像的大小不能超过13K。一旦正确从外部装载了映像,接下来的过程就是和前面一样重映设然后执行映像了。我们上面讲了BMS为高电平,AT91RM9200选择从片内的ROM启动的一个过程。如果BMS为低电平,则AT91RM9200会从片外的FLASH启动,这时片外的FLASH的起始地址就是0X0了,接下来的过程和片内启动的过程是一样的,只不过这时就需要自己写启动代码了,至于怎么写,大致的内容和ROM的BOOT差不多,不同的硬件设计可能有不一样的地方,但基本的都是一样的。由于片外FLASH可以设计的大,所以这里编写的BOOTLOADER可以一步到位,也就是说不用像片内启动可能需要BOOT好几级了,目前AT91RM9200上使用较多的bootloer是u-boot,这是一个开放源代码的软件,用户可以自由下载并根据自己的应用配置。总的说来,笔者以为AT91RM9200的启动过程比较简单,ATMEL的服务也不错,不但提供了片内启动的功能,还提供了UBOOT可供下载。笔者写了一个BOOTLODER从片外的FLASHA启动,效果还可以。 uboot结构与使用uboot是一个庞大的公开源码的软件。他支持一些系列的arm体系,包含常见的外设的驱动,是一个功能强大的板极支持包。其代码可以 http://sourceforge.net/projects/u-boot下载 在9200上,为了启动uboot,还有两个boot软件包,分别是loader和boot。分别完成从sram和flash中的一级boot。其源码可以从atmel的官方网站下载。 我们知道,当9200系统上电后,如果bms为高电平,则系统从片内rom启动,这时rom中固化的boot程序初始化了debug口并向其发送'c',这时我们打开超级终端会看到ccccc...。这说明系统已经启动,同时xmodem协议已经启动,用户可以通过超级终端下载用户的bootloader。作为第一步,我们下载loader.bin.loader.bin将被下载到片内的sram中。这个loder完成的功能主要是初始化时钟,sdram和xmodem协议,为下载和启动uboot做准备。当下载了loader.bin后,超级终端会继续打印:ccccc....。这时我们就可以下在uboot了。uboot将被下载到sdram中的一个地址后并把pc指针调到此处开始执行uboot。接着我们就可以在终端上看到uboot的shell启动了,提示符uboot>,用户可以uboot>help 看到命令列表和大概的功能。uboot的命令包含了对内存、flash、网络、系统启动等一些命令。 如果系统上电时bms为低电平,则系统从片外的flash启动。为了从片外的flash启动uboot,我们必须把boot.bin放到0x0地址出,使得从flash启动后首先执行boot.bin,而要少些boot.bin,就要先完成上面我们讲的那些步骤,首先开始从片内rom启动uboot。然后再利用uboot的功能完成把boot.bin和uboot.gz烧写到flash中的目的,假如我们已经启动了uboot,可以这样操作: uboot>protect off all uboot>erase all uboot>loadb 20000000 uboot>cp.b 20000000 10000000 5fff uboot>loadb 21000000 uboot>cp.b 210000000 10010000 ffff 然后系统复位,就可以看到系统先启动boot,然后解压缩uboot.gz,然后启动uboot。注意,这里uboot必须压缩成.gz文件,否则会出错。 怎么编译这三个源码包呢,首先要建立一个arm的交叉编译环境,关于如何建立,此处不予说明。建立好了以后,分别解压源码包,然后修改Makefile中的编译器项目,正确填写你的编译器的所在路径。 对loader和boot,直接make。对uboot,第一步:make_at91rm9200dk,第二步:make。这样就会在当前目录下分别生成*.bin文件,对于uboot.bin,我们还要压缩成.gz文件。 也许有的人对loader和boot搞不清楚为什么要两个,有什么区别吗?首先有区别,boot主要完成从flash中启动uboot的功能,他要对uboot的压缩文件进行解压,除此之外,他和loader并无大的区别,你可以把boot理解为在loader的基础上加入了解压缩.gz的功能而已。所以这两个并无多大的本质不同,只是他们的使命不同而已。 特别说名的是这三个软件包都是开放源码的,所以用户可以根据自己的系统的情况修改和配置以及裁减,打造属于自己系统的bootloder。
上传时间: 2013-10-27
上传用户:wsf950131
PCA9634是一款通过I2C总线控制的8位LED驱动器,该驱动器特别为红/绿/蓝/琥珀(RGBA)色的混合应用进行了优化。每个LED输出都有自己的8位分辨率(256级)固定频率的独立PWM控制器,该控制器运行在97KHz的频率下,占空比可由0%到99.6%可调,用以将LED设置到一个特定的亮度值。除此之外,该驱动器还有一个8位分辨率(256级)的组PWM控制器,该控制器的工作频率可以为固定的190Hz,也可以在24Hz和每10.73秒一次(约0.093Hz)之间调整,其占空比为0%到99.6%可调,用于使所有LED以同样的值模糊(dim)或者闪烁。
上传时间: 2013-12-20
上传用户:liaofamous
PCA9625是一款I2C总线控制的16位LED驱动器,主要应用于电流为100mA的红/绿/蓝/琥珀(RGBA)LED亮度和闪烁的控制,每个LED由独立的8位分辨率(256级)的固定频率PWM控制器控制输出。PWM控制器的工作频率为97kHz,占空比从0%到99.6%可调整,使LED达到所需的亮度。附加的8位分辨率(256级)PWM控制器组不但有固定的190Hz频率,还可以在24Hz和每10.73秒的固定周期内工作,产生占空比为0%至99.6%范围内的信号,使所有的LED达到同样的亮度或闪烁频率。
上传时间: 2013-10-31
上传用户:blans
PCA9624是一款带I2C总线的8位LED的电压开关优化的LED驱动器,它主要应用于电流为100mA 的红/绿/蓝/琥珀(RGBA)的LED的亮度和闪烁的控制。每个LED输出均有独立的8位分辨率(256个梯度)且输出频率固定为97KHz的PWM控制器它可以在0%到99.6%的范围内对LED的亮度进行调整,使发光二极管被设置为一个特定的亮度值。额外的8位分辨率(256个梯度)PWM控制器组既有固定的190Hz的频率又可以在24Hz和每10.73秒的固定周期内对LED灯亮度从0%至99.6%的范围内调整,使它们保持同样的亮度或闪烁速度。
上传时间: 2013-11-24
上传用户:38553903210
PCA9624是一款带I2C总线的8位LED的电压开关优化的LED驱动器,它主要应用于电流为100mA 的红/绿/蓝/琥珀(RGBA)的LED的亮度和闪烁的控制。每个LED输出均有独立的8位分辨率(256个梯度)且输出频率固定为97KHz的PWM控制器它可以在0%到99.6%的范围内对LED的亮度进行调整,使发光二极管被设置为一个特定的亮度值。额外的8位分辨率(256个梯度)PWM控制器组既有固定的190Hz的频率又可以在24Hz和每10.73秒的固定周期内对LED灯亮度从0%至99.6%的范围内调整,使它们保持同样的亮度或闪烁速度。
上传时间: 2014-12-27
上传用户:zhangliming420
1.1 微型计算机的组成及工作原理1.1.1 微型计算机中的基本概念1. 微处理器2. 微型计算机 (1)单片微处理机 (2)通用微型计算机3. 微型计算机系统1.1.2 微机基本结构 微型计算机的基本组成如图1.1所示,它由中央处理器(CPU)、存储器(Memory)、输入输出接口(I/O接口)和系统总线(BUS)构成。 1.1.3 微型计算机的基本工作过程 微型计算机的基本工作过程是执行程序的过程,也就是CPU自动从程序存放的第1个存储单元起,逐步取出指令、分析指令,并根据指令规定的操作类型和操作对象,执行指令规定的相关操作。如此重复,周而复始,直至执行完程序的所有指令,从而实现程序的基本功能,这就是微型计算机的基本工作原理。 1.2 典型单片机产品简介1.2.1 MCS-51单片机系列 MCS-51可分为两个子系列和4种类型,如表1-1所示。按资源的配置数量,MCS-51系列分为51和52两个子系列,其中51子系列是基本型,而52子系列属于增强型。表1-1 MCS-51系列单片机分类
上传时间: 2013-11-07
上传用户:debuchangshi
Avlon总线规范参考手册 Avalon总线是一种将片上处理器和外设连接成片上可编程系统 (SOPC) 的一种简单总线结构。
上传时间: 2013-10-18
上传用户:18711024007
1992 I2C 总线规范的这个版本有以下的修正• 删除了用软件编程从机地址的内容因为实现这个功能相当复杂而且不被使用• 删除了低速模式实际上这个模式是整个I2C 总线规范的子集不需要明确地详细说明• 增加了快速模式它将位速率增加4 倍到达400kbit/s 快速模式器件都向下兼容即它们可以在0~100kbit/s 的I2C 总线系统中使用• 增加了10 位寻址允许1024 个额外的从机地址• 快速模式器件的斜率控制和输入滤波改善了EMC 性能注意100kbit/s 的I2C 总线系统或100kbit/s 器件都没有改变
上传时间: 2013-10-30
上传用户:athjac
介绍了作者所设计的基于I2C 总线的测试系统的结构及I2C 总线通信协议的特点,给出了I2C 总线在avr 单片机Atmega128 和三个Atmega168 通信时的具体主发和从收程序的流程图及部分C 语言程序,实现了Atmega128 单片机与三个Atmega168 单片机之间的可靠通信。最后,总结了编写I2C 通信程序时的注意事项。
上传时间: 2013-10-31
上传用户:9牛10
PCA9517 是一款基于CMOS 工艺的低电压I2C 中继器,在I2C 总线或SMBus 应用中进行高低电压转换。PCA9517 能够在电平转换期间保持总线所有的操作模式和特性,通过数据线(SDA)和时钟线(SCL)的双向缓存实现I2C 总线扩展,总线最大容性负载为400pF。PCA9517 能够隔离器件总线两端的电压和容性负载。SDA 和SCL 引脚具有过压保护功能,在掉电的情况下为高阻状态。
上传时间: 2013-10-08
上传用户:zgz317