我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:双彩网 > 执行例程 >

ARM编程进阶之三 —— 裸机硬件的控制方法与例程

归档日期:06-28       文本归类:执行例程      文章编辑:爱尚语录

  到目前为止,我们已经能够编写较复杂的ARM汇编程序了,遗憾的是这些程序是运行在ads自带的虚拟开发板ARMUL下的,(在axd界面下,单击options->

  到目前为止,我们已经能够编写较复杂的ARM汇编程序了,遗憾的是这些程序是运行在ads自带的虚拟开发板ARMUL下的,(在axd界面下,单击options-

  而我们最终的目的是要让程序运行在实际的硬件产品上,并能控制硬件。本文将初步介绍如何建立真实硬件的开发和调试环境,编写控制硬件的程序的方法。

  由于基于ARM的嵌入式开发板种类众多,硬件仿真器、调试代理软件也是种类繁多,使用方法各异,这就为学习编写ARM裸机程序控制硬件带来了较大的难度。为便于初学者快速入门,有必要选择一套成熟、易于学习和实践的软硬件环境。经过比较,本文(包括本系列所有与ARM硬件有关的文章)均采用友善之臂提供的带有nor flash 的qq2440(或者mini2440)嵌入式开发板(自带简易的jtag调试仿真器小板)和h-jtag调试器代理软件。以下关于开发和调试环境的搭建,均来源于友善之臂提供的qq2440用户手册(稍微修改),在此表示敬意。

  H-JTAG 安装文件位于 “Windows平台工具\H-JTAG”目录,双击运行,按照其提示安装即可。

  安装完毕,会在桌面生成H-JTAG 和H-Flasher 快捷方式,双击运行H-JTAG,程序将自动检测是否连接了JTAG 设备,因为之前我们还没有做任何设置,所以会跳出一个提示窗口:

  使用开发板附带的JTAG 小板连接开发板的JTAG 接口,并接上打开电源。点主菜单Operations->

  Detect Target,或者点工具栏相应的图标也可以,这时就可以看到已经检测到目标器件了。

  提示:如果没有设置初始化脚本,也可以检测到CPU,但无法进行下面的单步调试。

  在该窗口中点击Add 按钮,跳出选择文件对话框,找到H-JTAG 安装目录,选择并打开里面的H-JTAG.dll 文件,如图。

  关闭AXD Debugger。在CodeWarrior中点击菜单Project->

  Debug,它将自动启动AXD Debugger,AXD Debugger会启动目标映象,并通过Jtag 下载至目标板,这时在AXD Debugger 底部的状态栏会出现下载过程提示,下载完毕就可以进行单步或者全速调试了,调试过程中您可以看到CPU 各个寄存器的值,也可以设置断点等,详细的用法请参考ADS 附带的英文说明手册,这基本上和常见的VisualC++等集成开发环境是类似的。

  每一种硬件在其控制器芯片上都会有物理的寄存器(注意这里的寄存器不是指的CPU内部的寄存器R1等等,而是指的硬件芯片上的存储单元,在ARM体系下,这些存储单元与内存进行统一编址,可以被CPU通过访存指令,像访问内存一样去访问),这些寄存器通常分为3种类型:命令寄存器、状态寄存器、数据寄存器。程序控制硬件的办法通常是:程序通过str指令向命令寄存器写入合适的内容,就可以完成对硬件进行配置的操作或者要求硬件进行某种物理操作。到此为止,软件就完成了所有它该做的事情,之后硬件会自动完成相应操作,在硬件完成操作后,程序又可以通过ldr指令从数据寄存器中获得想要的数据,或者从状态寄存器中获知硬件的状态。可见,程序控制硬件,简单地说,其实就是程序对硬件的寄存器进行读写操作,命令硬件完成操作,获取硬件状态和数据,仅此而已。这里的关键是:某个硬件寄存器的内存地址是多少?为使硬件执行某个操作,应当向哪个寄存器写入什么值?这些都是程序员需要解决的问题,而这些问题的解决,关键在于程序员能:a)理解要控制的硬件的运作机制;b)能熟练查阅硬件的手册(手册中会指明寄存器的内存地址以及寄存器各种取值的含义);c)能看懂硬件的连线、最简单的裸机硬件控制程序(控制led灯的亮灭,点击下载示例代码)

  要在nLED_1连接线上输出低电平,就必须让CPU的GPB5为低电平。

  如何才能让CPU的GPB5为低电平?通过查阅S3C2440的硬件手册(点击下载)的第9章可知,需要将地址为0x56000010的这个寄存器的bit11和10设置为01,从而将GPB5这个管脚配置为输出,然后将地址为0x56000014的这个寄存器的bit5写为0,这样CPU的GPB5管脚就会输出低电平。

  做2的原因是开发板的RAM位于0x30000000——0x34000000地址(共64M),程序必须被调试器加载到ARM才能运行。

  特别说明:配置中的0x30000000被我称为“程序的期望加载地址”,简称“加载地址”。“运行地址”与“加载地址”是很重要的2个概念,请大家一定要弄清楚。“运行地址”是给编译器看的,通过看“运行地址”编译器就能计算出程序中各个标号、变量、函数等在内存中的绝对地址,从而完成涉及地址的指令的正确编译。而“加载地址”是给调试器或者操作系统看的,它的作用是让调试器或者操作系统将程序加载到正确(期望)的内存地址。通常情况下,代码的这2个地址是相等的,数据则不一定。

  做3的原因是init.o的INIT2440段的代码是首先运行的代码,因此必须放在整个二进制程序文件的最开头

  本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

  完全使用汇编语言来编写程序会非常的繁琐,因此通常情况下,只是使用汇编程序来完成少量必须由汇编程序才能完成的工作,而其它工作则由C语言程序来完成。这样一来,我们实际上就是在进行汇编和C的混合编程,甚至同一个程序的汇编源文件和C源文件是由不同的程序员编写的。在这种情况下,要想使不同程序员编写的汇编代码和C代码能耦合的很好,则必须有一个双方都必须遵守的规则,这就是ATPCS规则。第一部分内容:ATPCS规则ATPCS(ARM-Thumb Produce Call Standard)是ARM程序和Thumb程序中子程序调用的基本规则,目的是为了使单独编译的C语言程序和汇编程序之间能够相互调用。这些基本规则包括子程序调用过程中寄存器的使用

  今天在看代码的时候看到以下代码:structdsi_ctrl_hdr{chardtype;/*datatype*/charlast;/*lastinchain*/charvc;/*vi

  可作为本系统分时作业编程的主要手段,而串口中断是数据通信的处理手段。PIOA(Parallel Input/Output Controller,并行输入/输出控制器),可以通过该控制器管理ARM系统的各个设备,同时本系统也使用PIOA来控制LCD。 其它功能单元包括看门狗、电源控制器等。可以通过编程对这些控制器进行管理,在IAR开发环境下采用C语言进行编程,并通过JTAG调试接口下载到板上FLASH中运行调试。2. 液晶屏连接方式 T6963液晶显示模块与处理器的连接方式通常有两种:直接访问方式和间接控制方式。直接访问方式是指处理器以访问存储器或I/O设备的方式控制液晶控制模块工作,模块的数据线与处理器的数据总线连接,片

  随着学习的深入,渐渐发现,编程时更多的工作是不断的配置寄存器,做着许多重复的工作。所以就感觉很有必要把经常使用的寄存器、配置结构罗列出来,以方便使用!!这是其中的一部分,其他的慢慢来 本页所包含的配置函数有: void SysTick_Configuration(void); void GPIO_Configuration(void); void EXTI_Configuration(void); void NVIC_Configuration(void); void RCC_Configuration(void); void IWDG_Configuration(void); //同时需要配置

  到目前为止,我们已经具备编写较为复杂的ARM汇编程序的能力,但要编写较为复杂且实用的程序,我们就不得不掌握ARM汇编的伪指令(pseudo-instruction)。千万别把汇编伪操作(directive)与汇编伪指令(pseudo-instruction)弄混了,directive不会被编译器编译为机器指令,但pseudo-instruction会。而pseudo-instruction与指令(instruction)的区别在于,1条instruction与1条机器指令对应,而编译器会把1条pseudo-instruction编译为1条或多条机器指令。 ARM汇编伪指令共4条:ldr、adr、adrl、nop 1、ldr

  的JPEG驱动的分析,得出结论,S3C6410的JPEG解码模块不支持硬件控制自动解码*只能使用软件控制解码模式*20121202:修复连续解码BUG,目前有少数jpeg420,jpeg444会解码出错,就像windows也有可能有不支持的jpeg图片一样

  Microchip最新SAM 以及 PIC32单片机软件开发平台-- MPLAB Harmony V3介绍

  拆招有礼:洞悉电子产品中的大数据,招招解决测量难题!Keysight DAQ970系列活动

  6月4日上午10:00直播:英飞凌栅极驱动芯片的应用以及安富利对应的解决方案

  综合资讯51单片机PIC单片机AVR单片机ARM单片机嵌入式系统汽车电子消费电子数据处理视频教程电子百科其他技术STM32MSP430C2000单片机论坛单片机资源下载单片机习题与教程

本文链接:http://guidoon.com/zhixinglicheng/166.html