文档库 最新最全的文档下载
当前位置:文档库 › AVR 编译器的选择

AVR 编译器的选择

AVR 编译器的选择
AVR 编译器的选择

AVR 编译器的选择

AVR Studio+Winavr+JTAGICE

用过AVR单片机的同学都知道现在网络上有各种开发工具,但是选择哪一种开发工具比较好困扰着大多数人,虽然说选择适合自己的就是最好的有一定的道理,但是对各种开发工具有一定的了解个人认为是从事利用AVR开发电子项目的工程师所必须的。下面是我无聊从百度搜到的相关信息:

软件名称类型简介官方网址

AVR Studio

IDE、汇编编

译器ATMEL AVR Studio集成

开发环境(IDE),可使

用汇编语言进行开发

(使用其它语言需第

三方软件协助),集

软硬件仿真、调试、

下载编程于一体。

ATMEL官方及市面上

通用的AVR开发工具

都支持AVRStudio。

https://www.wendangku.net/doc/e418016082.html,

GCCAVR (WinAVR)C编译器

GCC是Linux的唯一开

发语言。GCC的编译器

优化程度可以说是目

前世界上民用软件中

做的最好的,另外,

它有一个非常大优点

是,免费!在国外,

使用它的人几乎是最

多的。但,相对而言,

它的缺点是,使用操

作较为麻烦。

https://www.wendangku.net/doc/e418016082.html,

ICC AVR C编译器

(集烧写程

序功能)

市面上(大陆)的教科

书使用它作为例程的

较多,集成代码生成

向导,虽然它的各方

面性能均不是特别突

出,但使用较为方便。

虽然ICCAVR软件不是

免费的,但,它有Demo

版本,在45天内是完

全版。

https://www.wendangku.net/doc/e418016082.html,

CodeVision AVR C编译器

(集烧写程

序功能)

与KeilC51的代码风

格最为相似,集成较

多常用外围器件的操

作函数,集成代码生

成向导,有软件模块,

不是免费软件,Demo

版为限2KB版。

www.hpinfotech.ro

ATman AVR C编译器支持多个模块调试

(AVRStudio不支持多

个模块调试)。

https://www.wendangku.net/doc/e418016082.html,

IAR AVR C编译器IAR实际上在国外比

较多人使用,但它的

价格较为昂贵,所以,

中国大陆内,使用它

的开发人员较少,只

有习惯用IAR的工程

师才会去使用它。

https://www.wendangku.net/doc/e418016082.html,

作为初学者很多人都选择ICCAVR,我也不例外,因为它的操作很简单,网上的资料也很多,破解版的也挺容易找的,但是用了一段时间之后,你会发现,它的编译效果没有那么好,特别是当你的程序量增加了以后。从上面的表格中可以看出,传说中GCCAVR的编译优化程

度是民用软件中做得最好的,由于个人向往Linux嵌入式系统的开发,而GCC又是它的唯一开发语言,综上所述,偶决定跳槽了,但是GCCAVR的操作是比较麻烦的,据说是类似DOS的那种模式,新手入门还是从低一点的位置开始吧,先不想弄makefile什么的,为了获得ICCAVR的操作简便及GCC的编译优化,那就是采用AVR

Studio+WinAVR来作为集成开发环境,同时利用JTAGICE作为硬件仿真工具。首先当然是安装好这两款软件了,网上搜一下破解版的一大堆,装好以后就可以开始编写程序了。

ARM7(sc44b0)外部中断笔记 对于sc44b0它也是一种单片机,一种比较高级的单片机而已,所以他也跟51单片机一样有外部中断,不同51单片机的是,他有8个外部中断源,对应的是8个管脚,(51只有两个,int0和int1,P3.3和P3.4),分别是Port G八个管脚。而对于外部中断4 \5\6\7很多都是共用寄存器,他们是通过或逻辑公用一个中断请求线。。下面就具体来说说使用外部中断的一些必要的配置。 一,对管脚的配置,因为Port G有三种功能用法,要通过对rPCONG(端口G 配置寄存器)的配置来选用Port G 的外部中断的功能。其配置表如下 所以应该将其配置为11(设置为中断功能状态); 二,中断模式的选择,中断模式有两种,FIQ(快速中断模式)和 IRQ(中断模式)两种,一般没有特殊要求都用IRQ模式即可。可以通过对中断模式寄存器rINTMOD配置获得。如表下 三,是否允许中断,即中断使能位。通过对中断控制寄存器INTCON的配置即可,如表下通过对中断控制寄存器的配置即可,

可以看出只要让intcon的【1】位置零即可使中断使能。 四,外部中断方式的选择,低电平或上升沿触发呢,还是别的,这就要对外部中断方式寄存器(EXTINT)的配置,其表如下

由上表可知,如果要用下降沿触发,就可将EXTINT 的值给0x22222222; 将所有的外部中断都设置为下降沿触发。 五,当中断捕抓到以后,要引起什么变化呢?或者说用什么来捕抓呢?在sc44b0中用了两个寄存器来捕抓,一个中断挂起寄存器(INTPND),和外部中断挂起寄存器(EXINTPND),一开始不明白挂起是什么意思,后来才懂,差不多就相当与51单片机的标志位一样,当中断发生后,就将挂起寄存器的对应的某一位置一或置零,外部中断挂起寄存器如表下 中断挂起寄存器:当中断产生后,是将INTPND的【21】位置一的; 所以,判断有无外部中断,就可以通过读取挂起寄存器对应的为,即可知道是否有无中断。 六,当中断发生后,挂起寄存器的对应位(即中断标志位)也发生了置位,那如果要检测下一个中断,就得将挂起寄存器的对应为复原,那怎么复原呢?在51单片机中是将中断标志位软件置零就可,在44b0中也是同样的道理,它是通过将对应的中断挂起寄存器的位置一就行了,对于EXTINTPND,他是直接将对应的位置一,对于EXTINTPND是通过将rI_ISPC的对应位置一(EXTINTPND和I_ISP的位数是一样的,两个是相互对应的) 附上程序; #define EXTINT4 0 #define EXTINT5 1 #define EXTINT6 2 #define EXTINT7 3 #define EXTINT4567 21

本程序应用了外部中断1、0,定时器中断0, 初始显示变量uname(100000), 按下中断1显示内容减1,中断0加1,定时器每隔一秒加1 显示子函数A VR_display; 频率1M A口接数码管段选 B口接数码管位选 */ #include #include volatile unsigned long Ex_i; //定时器用的变量 volatile unsigned long uname=100000;//初始显示内容 /*=====0-9=====A-G=====*/ unsigned char table[17]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff}; //共阳极数码管的段码0 1 2 3 4 5 6 7 8 9 A B C D E F /*0-7*/ unsigned char num[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //共阳极数码管的wei码0 1 2 3 4 5 6 7 8 void init_avrinter();//外部中断初始化 void init_avrtimer0();//计数器0初始化 void delay(unsigned int x);//延时函数 void AVR_display(unsigned long nnn);//显示函数 int main() //主程序 { DDRA=0xff; //设置方向寄存器为输出 DDRB=0xff; DDRD=0xff; PORTD=0xff; init_avrinter(); init_avrtimer0(); while(1) { A VR_display(uname); } } void init_avrinter()//外部中断初始化 { sei(); //开总中断

一、S5PV210中中断的特点 1、特点 ? Supports 93 vectored IRQ interrupts ? Fixed hardware interrupts priority levels ? Programmable interrupt priority levels ? Supports Hardware interrupt priority level masking ? Programmable interrupt priority level masking ? Generates IRQ and FIQ ? Generates Software interrupt 2、FIQ与IRQ的区别 1)FIQ和IRQ并不是中断源,而是中断的类型,我们可以将一个中断源设置成FIQ也可以设置成IRQ。2)FIQ是快速中断,IRQ是一般中断,FIQ的响应时间比IRQ短。 3)FIQ的优先级高于IRQ。 4)FIQ的分组寄存器(R8~R14)比IRQ(R13~R14)多。当在FIQ产生的时候,R8~R14不需要保存,响应的速度会快。 3、S5PV210的中断源

二、原理图分析

三、如何以中断的方式来检测按键:GPH2_2(EINT18) 、GPH2_3(EINT19) 按键的检测:轮询:将GPIO配置成输入……. 中断:将GPIO配置成外部中断……. 1、GPIO的配置,将一个GPIO配置成外部中断 2、外部中断的触发方式 (高电平、低电平、上升沿、下降沿)

3、外部中断的开关寄存器 0 = Enables Interrupt 打开中断 1 = Masked 关闭中断 4、外部中断判断寄存器 0 = Not occur 外部中断没有发生 1 = Occur interrupt 触发了中断

—————————————————————————— 第十三课ATMEAG16L的外部中断编程实践 本教程节选自周兴华老师《手把手教你学AVR单片机C程序设计》教程,如需转载,请注明出处!读者可通过当当网、淘宝网等网站购买本教程,如需购买配书 实验器材,可登陆周兴华单片机培训中心网购部自助购买! Atmega16L具有多达20个中断源,这里我们进行外部中断的实验,其它的等到介绍到相关内容时可进行适当的实验。 1.外部中断0 外部中断0由引脚INT0(PIND2)触发。如果INT0引脚按照MCUCR寄存器中的ISC01、ISC00设置的方式发生跳变,则不管是否lNT0中断使能,INT0中断标志位INTF0都将置位。如果SREG 寄存 器的全局中断位I和通用中断控制寄存器GICR中的INT0中断使能位INT0置位,则单片机培训开始 执行中断程序。在进入中断服务程序时,INTF0被硬件清零。必须指出,不管INT0(PIND2)引脚 方向位设置如何,只要INT0引脚发生规定的跳变,都会触发中断。中断标志位INTF0只在满足发生 中断的条件时置位,一旦条件变化,INTF0被硬件清零。向INTF0位写“1”也会对其清零。 2.外部中断1 外部中断0由引脚INT1(PIND3)触发。如果INT1引脚按照MCUCR寄存器中的ISC11、ISC10设置的方式发生跳变,则不管是否lNT1中断使能,INT1中断标志位INTF1都将置位。如果SREG 寄存 器的全局中断位I和通用中断控制寄存器GICR中的INT1中断使能位INT1置位,则开始执行中断程 序。在进入中断服务程序时,INTF1被硬件清零。必须指出,不管INT1(PIND3)引脚方向位设置 如何,只要INT1引脚发生规定的跳变,FPGA培训都会触发中断。中断标志位INTF1只在满足发生 中断的条件时置位,一旦条件变化,INTF1被硬件清零。向INTF1位写“1”也会对其清零。 3.外部中断2 外部中断2由引脚INT2(PINB2)触发。如果INT2引脚按照MCUCR寄存器中的ISC2设置的方式发生跳变,则不管是否lNT2中断使能,INT2中断标志位INTF2都将置位。如果SREG 寄存器的全局 中断位I和通用中断控制寄存器GICR中的INT2中断使能位INT2置位,则开始执行中断程序。在进 入中断服务程序时,INTF2被硬件清零。必须指出,不管INT2(PINB2)引脚方向位设置如何,只 要INT2引脚发生规定的跳变,都会触发中断。中断标志位INTF2只在满足发生中断的条件时置位, 一旦条件变化,INTF2被硬件清零。向INTF1位写“1”也会对其清零。 8.2.1 INT1中断实验

本文主要以AVR单片机atmega48的外部中断的在Proteus上仿真的例子介绍AVR单片机C 语言开发环境WinAVR的使用(如何包含头文件,如何写中断服务程序,如何配置编译产生hex文件),及其在Proteus上的仿真实现(如何建立仿真图,载入hex文件进行仿真) 本例子完全为PC上软件仿真所以不涉及硬件,其全部所需软件清单如下: WinAVR、Proteus、atmega48_Datasheet 软件的下载安装,请参考网上其他教程,有很多,很容易的。 atmega48单片机的数据手册网上中英文的版本也都可以下载到。 下图是笔者所使用的软件截图,不同版本可能稍有差异,但基本不影响使用。 下面我将在假设您已经安装好2个软件(当然目前您不需要知道它们是怎么用的),并且对单片机和C语言有基本了解的基础上进行例程的演示。 let's begin。 首先要明确我们要完成的功能:单片机开始工作后,点亮LED灯1S,灭掉LED灯1S,如此循环3次,然后单片机进入无限循环,等待外部按键button按下,LED等再次点亮,当再次按下button时,LED等灭掉,如此循环。

接着画出要实现这个功能的电路,以便后续仿真。 先在桌面建一个文件夹Hello_AVR,如图。 打开软件,这个图标。 在软件界面上,右键Place->Component->From Libraries 在Keywords里面输入atmega48,选择一个32PIN管脚的单片机放到图上

同样的方法,放置一个LED灯,一个button,电阻,电容。

放置POWER和GND

图完成,在文件夹Hello_AVR下新建文件夹Sim,保存在这里 这里用PB0管脚来驱动LED灯,查阅芯片的数据手册或直接从图中可以知道,外部中断0(INT0)在PD2管脚。而且Proteus的好处是,这里我们给单片机画电源的麻烦也可以省去。 接下来要做的就是看数据手册和建立工程,编程,编译的事了。 打开Programmers Notepad File->New->Project新建工程Hello_AVR,保存到Hello_AVR文件夹

AVR单片机电源管理及睡眠模式应用实例(含源代码) AVR单片机电源管理及睡眠模式应用实例(含源代码) /*********************************************** **** AVR 电源管理_睡眠模式范例 *** **** *** **** 作者: HJJourAVR *** **** 编译器:WINAVR20050214 *** **** *** ***********************************************/ /* 本程序简单的示范了如何令AVR ATMEGA16进入睡眠状态及唤醒 电源管理及睡眠模式的介绍 进入最低耗电的掉电模式 关闭各种模块 外部中断唤醒 M16掉电模式的耗电情况(看门狗关闭),时钟为内部RC 1MHz 0.9uA@Vcc=5.0V [手册的图表约为1.1uA] 0.3uA@Vcc=3.3V [手册的图表约为0.4uA] //测量的数字万用表是FLUKE 15B,分辨率0.1uA 这个程序需要MCU进入休眠状态,为实现最低功耗,JTAG接口会被关闭,只能通过LED的变化来观察程序的运行。 这个实验里面,用STK500(AVRISP) ISP下载线来烧录更方便。 熔丝位设置 1 关断BOD功能 BODEN=1 2 如果用ISP方式烧录,就可以完全关闭JTAG口了 OCEEN=1,JTAGEN=1 */ #include #include #include #include //时钟定为内部RC 1MHz,F_CPU=1000000 也可以采用其他时钟 #include /* sleep.h里面定义的常数,对应各种睡眠模式 #define SLEEP_MODE_IDLE 0 空闲模式 #define SLEEP_MODE_ADC _BV(SM0) ADC 噪声抑制模式

ARM接口编程笔记 一、ARM编程模式 1.ARM的含义 ●ARM是一家公司的名字 ●ARM代表的是一种RISC技术 ●ARM是一种CPU体系结构的名称,同x86、PPC、MIPS等并列 2.ARM体系结构中对字节、半字、字、双字的定义 ●字节:8 bit ●半字:16 bit ●字:32 bit ●双字:64 bit 3.ARM指令集 ●ARM指令集,32 bit,功能最全 ●Thumb指令集,16 bit,是ARM指令集的子集,完成部分功能 ●Thumb‐2指令集,16 bit和32 bit混合 ●Thumb‐EE指令集,16 bit和32 bit混合 ●Java指令集,直接执行绝大部分的Java字节流,但需要授权 4.ARM处理器的权限 ●非特权级:部分指令不能执行,是一种硬件的保护机制,通常用户应用 程序运行在该权限级别 ●特权级:能执行所有指令,通常操作系统运行在该权限级别 5.ARM的工作模式,处理对应模式下的特定事务,使得这些特定事务能够在硬 件资源的使用上部分地独立开来,这是通过各种模式下有对应的私有硬件资源来实现的。 ●User:应用程序一般运行在该模式下 ●Supervisor:操作系统一般运行在该模式下 ●IRQ:中断处理程序一般运行在该模式下 ●FIQ:快速中断处理程序一般运行在该模式下 ●Abort:发生存取异常后会进入该模式 ●Undef:执行未定义的指令会进入该模式 ●System:为解决中断不可重入而设计的一种特殊模式 ●Monitor:Cortex‐A特有的模式,执行监控代码 ●除User模式外,其他7种模式都是特权模式 6.ARM寄存器 寄存器最靠近CPU中的ALU,存取速度最快,没有地址,只有编号。部分寄存器有别名,在汇编程序中本名和别名可以混用。

ARM的中断原理(转) 1.中断概述 CPU与外设的数据传输方式通常有以下3种方式:查询方式、中断方式、DMA方式。 所谓查询方式是指,CPU不到查询外设的状态,如果外设准备就绪则开始进行数据传输;如果外设还没有准备好,CPU将进入循环等待状态。很显然这样浪费了大量的CPU时间,降低了CPU的利用率。 所谓中断方式是指,当外设准备好与CPU进行数据传输时,外设首先向CPU发出中断请求,CPU 接收到中断请求并在一定条件下,暂时停止原来的程序并执行中断服务处理程序,执行完毕以后再返回原来的程序继续执行。由此可见,采用中断方式避免了CPU把大量的时间花费在查询外设状态的操作上,从而大大提高了CPU的执行效率。 1.中断概述 CPU与外设的数据传输方式通常有以下3种方式:查询方式、中断方式、DMA方式。 所谓查询方式是指,CPU不到查询外设的状态,如果外设准备就绪则开始进行数据传输;如果外设还没有准备好,CPU将进入循环等待状态。很显然这样浪费了大量的CPU时间,降低了CPU的利用率。 所谓中断方式是指,当外设准备好与CPU进行数据传输时,外设首先向CPU发出中断请求,CPU 接收到中断请求并在一定条件下,暂时停止原来的程序并执行中断服务处理程序,执行完毕以后再返回原来的程序继续执行。由此可见,采用中断方式避免了CPU把大量的时间花费在查询外设状态的操作上,从而大大提高了CPU的执行效率。 ARM系统包括两类中断:一类是IRQ中断,另一类是FIQ中断。IRQ是普通中断,FIQ是快速中断,在进行大批量的复制、数据传输等工作时,常使用FIQ中断。FIQ的优先级高于IRQ。 在ARM系统中,支持7类异常,包括:复位、未定义指令、软中断、预取中止、数据中止、IRQ和FIQ,每种异常对应于不同的处理器模式。一旦发生异常,首先要进行模式切换,然后程序将转到该异常对应的固定存储地址执行。这个固定的地址称为异常向量。异常向量中保存的通常为异常处理程序的地址。ARM的异常向量如下: 异常模式正常地址高向量地址 复位管理 0x00000000 0xFFFF0000 未定义指令未定义 0x00000004 0xFFFF 0004 软中断管理 0x00000008 0xFFFF 0008 预取指中止中止0x0000000C 0xFFFF 000C 数据中止中止0x00000010 0xFFFF0010 IRQ IRQ 0x00000018 0xFFFF0018

AVR单片机外部中断0、1、2 详解 中断基本包含: 1.中断源 2.中断向量(中断入口地址) 3.中断优先级 4.中断函数 除此之外,在单片机中,中断的执行或者中断的触发必 须符合以下的规则:中断触发|执行= 全局中断使能位AND 中断源使能位AND 中断源标志位 单片机内部中断的触发必须完成,全局中断使能,中断 源使能,中断源标志位置一等条件。除此之外,如果是 外部中断0,1,2(INT0,1,2),必须设置引脚触发的规则。最后呢,就是需要在程序里建立处理中断的中断 函数。 在编程的时候的步骤大致如下:(无视INT2) 1. 初始化PD2,PD3 为输入状态。DDRD|=BIT(2)|BIT(3); 2. 设置INT0,1 引脚触发的规则,实验中为低电平触发。MCUCR=0xF0; 3. 设置INT0,1 中断源使能位为逻辑1。 GICR|BIT(7)|BIT(6); 4. 清除INT0,1 的中断标志位(软件写入,逻辑1 为清

除)。GIFR|=BIT(7);BIT(6); 5. 全局中断允许位使能。SREG|=BIT(7); 6. 编辑中断处理函数。 /*ATmega16提供3个外部中断,分别由INT0、INT1和INT2引脚触发。 需要注意的是,如果将ATmega16设置为允许外部中断,则即使把INT0、INT1和INT2引脚 设置为输出方式,外部中断仍然会被触发。外部中断可选择采用上升沿触发、下降沿触发和 低电平触发(INT2中断只能采用沿触发方式。 */ #include; #include; #include "smg.h" /*1.状态寄存器SREG bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 I T H S V N Z C I:全局中断使能位。 在I置位后,单独的中断使能由不同的中断寄存器控制。若I为0,则禁止中断。 MCU 控制寄存器- MCUCR MCU 控制寄存器包含中断

异常中断处理概述 1.ARM中异常中断处理概述 1)在正常程序执行过程中,每执行一条ARM指令,程序计数器寄存器PC的值加4个字 节;每执行一条Thumb指令,程序计数器寄存器PC的值加两个字节.整个过程是顺序执行. 2)通过跳转指令,程序可以跳转到特定的地址标号处执行,或者跳转到特定的子程序处 执行; B指令用于执行跳转操作; BL指令在执行跳转操作的同时,保存子程序的返回地址; BX指令在执行跳转操作的同时,根据目标地址的最低位可以将程序状态切换到Thumb状态; BLX指令执行3个操作:跳转到目标地址处执行,保存子程序的返回地址(R15保存在R14中),根据目标地址的最低位可以将程序状态切换到Thumb状态. 3)当异常中断发生时,系统执行完当前指令后,将跳转到相应的异常中断处理程序处执 行.在当异常中断处理程序执行完成后,程序返回到发生中断的指令的下一条指令处执行. 4)在进入异常中断处理程序时,要保存被中断的程序的执行现场,在从异常中断处理程 序退出时,要恢复被中断的程序的执行现场.本章讨论ARM体系中的异常中断机制. 2.ARM体系中异常中断种类. ARM体系中的异常中断如下表所示:

3. 中断向量表中指定了各异常中断及其处理程序的对应关系.它通常存放在存储地址的低端.在ARM体系中,异常中断向量表的大小为32字节.其中,每个异常中断占据4个字节大小,保留了4个字节空间. 每个异常中断对应的中断向量表的4 .通过这两种指令,程序将跳转到相应的异常中断处理程序处执行. 当几个异常中断同时发生时,就必须按照一定的次序来处理这些异常中断.在ARM 中通过给各异常中断富裕一定的优先级来实现这种处理次序.当然有些异常中断是不坑能同时发生的,如指令预取中止异常中断和软件中断(SWI)异常中断是有同一条指令的执行触发的,他们是不可能同时发生的.处理器执行某个特定的异常中断的过程中,称为处理器处于特定的中断模式.各异常中断的中断向量地址以及中断的处理优先级如表2所示. 4.异常中断使用的寄存器 各异常中断对应着一定的处理器模式.应用程序通常运行在用户模式下.ARM中的处理器模式如表3所示. 各种不同的处理器模式可能有对应于该处理器模式的物理寄存器组,如表4所示,其中,R13_svc表示特权模式下的R13寄存器,R13_abt表示中止模式下的R13寄存器,其余的各寄存器名称含义类推. 表4 各处理器模式的物理寄存器组

目录 中断学习 (2) E2PROM学习 (3) 时钟系统及时钟源的学习 (5) 系统复位学习 (5) I/O端口的学习 (6)

中断学习 中断的过程:CPU 检测中断的产生(总是在每条指令的最后检测中断请求),然后响应中断,进入中断服务函数处理。 CPU 检测到中断并不是立即响应,而是有条件的: 1. 设立中断请求触发器 2. 设立中断屏蔽触发器 3. 总中断是开放的 4. CPU 现行指令结束后执行中断 Mega 有20个中断源,包括3个外部中断(int0、int1、int2)和18个内部中断。 与中断有关的寄存器: GIFR 通用中断标志寄存器: GIFR : 产生中断时由CPU 自动置1,响应后自动置0。 GICR 通用中断控制寄存器: GICR : 位7—5为外部中断0、1、2使能,该位置1且全局中断使能置1即响应外部中断。 位4—0与外部中断无关,为中断向量标号的选择有关。 SREG 状态寄存器: SREG : 全局中断使能标志位,置1时使能全局中断(asm (”SEI ”)),响应后应使其置0(asm (”CLI ”))。 MCUCR 单片机控制寄存器: MCUCR : Bit7—4 Bit1、0

MCUCSR 单片机控制和状态寄存器: MCUCSR : 外部中断2触发方式设置:Bit6写0为下降沿触发,Bit6写1为上升沿触发。 外部中断的初始化可以为以下步骤: 1. 设置外部中断的触发方式(0、1时设置MCUCR ;2时设置MCUCSR )。 2. (清零GIFR 寄存器对应的位,此步骤可省略。另外,此寄存器可用来做可读寄存器, 通过判断完成一些操作)。 3. 打开对应外部中断的控制位(GICR )。 4. 打开全局中断使能为I (SREG )。 5. 写中断服务函数。格式为: #pragma interrupt_handler … 阴影标注部分是必须的,func1是函数名,vector number 是中断向量标号,在头文件中定义的向量号一般前加 ”iv_中断源名称”,宏定义相当于直接使用向量号,但用起来意义明显。 注意:外部中断源的引脚一定要设置成输入作为中断检测的输入接口,而且一定要设置成带上拉电阻的方式(DDRD=0x00,PORTD=0xFF ),否则PD 端口一直为低电平就会一直触发中断。 在ICCA VR 中可以用Wizard 来生成服务程序,一个很简单的工具。只需对生成代码做简单的修改即能完成相应的功能,节省的代码的书写,同时提高了编程的效率。 E 2 PROM 学习 Mega16有512Bytes 的E 2PROM ,用户可以通过操作其控制寄存器来实现对其读写即对E 2PROM 各存储单元的访问。 与E 2PROM 有关的寄存器: EEAR 地址寄存器(分为两个字节EEARH 、EEARL ): EEARH : EEARL : E 2PROM 的初值无定义,因此必须为其赋一个确定的数值。 EEDR 数据寄存器: EEDR :

ARM assembler guide DUI0068 是一个RISC指令结构,因为有一个加载存储结构。只有load和store可以读取内存。 ARM的处理器模式 可以全部大写或小写,不能混 标志符表示一个地址

常量的定义格式: 123 0x1C 2_1001 ARM编译、链接后最终生成一个ELF格式(Executable and Linking Format)的可执行文件(后缀.axf) ELF中是分section部分的,一个ELF section 在汇编中定义一个section使用AREA指令。

ENTRY指令指示汇编代码第一条要执行的指令。 start是一个标识符,代表一个地址。 结束的方式是产生一个软件中断,把控制权交给调试器。 END指令指示汇编的结束 使用cmd进行调试: Microsoft Windows XP [版本5.1.2600] (C) 版权所有1985-2001 Microsoft Corp. C:\Documents and Settings\Administrator>cd D:\Program Files\ARM\ADSv1_2\Bin C:\Documents and Settings\Administrator>D; 'D' 不是内部或外部命令,也不是可运行的程序 或批处理文件。 C:\Documents and Settings\Administrator>D: D:\Program Files\ARM\ADSv1_2\Bin>armsd E:\dsparm\pxa270\project\armex\__image.ax f ARM Source-level Debugger, ADS1.2 [Build 805] Software supplied by: Team-EFA

AVR单片机中断应用设计要点 四川侯鑫

AVR的中断源较多,尤其是AT-mega128,一共有35个外部及内部中断源。通常。Flash 程序存储器空间的最低位置(0×0000~0×0045)定义为复位和中断向量空间。在中断向量表中,处于低地址的中断向量所对应的中断拥有高优先级。所以,系统复位RESET优先级最高。 一、中断设计注意事项1.具备Bootloader功能的AVR。其中断向量区可以在Flash程序存储器空间最低位置和Bootloader区的头部来回迁移,这主要用于配合Bootloadel程序的应用。如果不使用Bootloadel-功能。 一般不使用中断向量区迁移。 2.Flash较小的AVR芯片。其一个中断向量占据1个字的空间。用于放置一条相对转移RJMP指令(范围-2k~+2k字),跳到中断服务程序。对于不使用的中断。在中断向量区中应放置1条中断返回指令RETI。以增强程序的抗干扰性。 3.ATmega128的Flash空间为64k字节,因此它的一个中断向量占据2个字的空间。用于放置一条绝对转移JMP指令(指令长度为2个字)。跳到中断服务程序。对于不使用的中断。 在中断向量区中应连续放置2条中断返回指令RETI,以增强程序的抗干扰性。当使用汇编语言编写系统程序时应注意。 4.当MCU响应一个中断时.其硬件系统会自动将中断返回地址压入系统堆栈。并关闭全局中断响应(硬件将中断标志I位清0).清除该中断的中断标志位;执行中断返回指令RETI 时,硬件会先允许全局中断响应(硬件将中断标志I位置1),然后从系统堆栈中弹出返回地址到程序计数器PC中,继续执行被中断的程序。除此之外,MCU的硬件没有对中断保护做其他处理。 5.在编写中断服务程序时。首先要编写中断现场保护程序。如保护MCU的状态寄存器等。在中断返回之前,不要忘记恢复中断现场。 6.如果设置和允许外部中断响应。 即使是外部INT0~INT7引脚设置为输出。在引脚上的电平变化也会触发外部中断发生。这一特性提供了使用软件产生中断的途径。 7.外部中断可选择采用上升沿触发、下降沿触发、电平变化(由高变低或由低变高)和低电平触发等方式,无外部高电平触发方式。具体触发方式由外部中断控制寄存器EICRA(INT3:0)和EICRB(INT7:4)决定。 8.选择外部低电平方式触发中断时应注意:(1)引脚上的低电平必须一直保持到当前一条指令执行完成后才能触发中断。(2)低电平中断并不置位中断标志位。即外部低电平中断的触发不是由于中断标志位引起的,而是外部引脚上电平取反后直接触发中断(需要开放全局中断允许)。因此,在使用低电平触发方式时,中断请求将一直保持到引脚上的低电平消失为

ARM的三种中断调试方法简介 1嵌入式软件开发流程参照嵌入式软件的开发流程。第一步:工程建立和配置。第二步:编辑源文件。第三步:工程编译和链接。第四步:软件的调试。第五步:执行文件的固化。在整个流程中,用户首先需要建立工程并对工程做初步的配置,包括配置处理器和配置调试设备。编辑工程文件,包括自己编写的汇编和C语言源程序,还有工程编译时需要编写的链接脚本文件,调试过程中需要编写存储区映像文件和命令脚本文件,以及上电复位时的程序运行 1 嵌入式软件开发流程 参照嵌入式软件的开发流程。第一步:工程建立和配置。第二步:编辑源文件。第三步:工程编译和链接。第四步:软件的调试。第五步:执行文件的固化。 在整个流程中,用户首先需要建立工程并对工程做初步的配置,包括配置处理器和配置调试设备。编辑工程文件,包括自己编写的汇编和C语言源程序,还有工程编译时需要编写的链接脚本文件,调试过程中需要编写存储区映像文件和命令脚本文件,以及上电复位时的程序运行入口的启动程序文件。 对后四种文件的理解很重要,其作用解释如下。 (1) 链接脚本文件:在程序编译时起作用。该文件描述代码链接定位的有关信息,包括代码段,数据段,地址段等,链接器必须使用该文件对整个系统的代码做正确的定位。在SDRAM中调试程序、在FLASH中调试或固化后运行的链接脚本文件应加以区分。(在IDE开发环境中使用扩展名*.ld) (2)命令脚本文件:在SDRAM中调试程序时起作用。在集成环境与目标连接时、软件调试过程中以及目标板复位后,有时需要集成环境自动完成一些特定的操作,比如复位目标板、清除看门狗、屏蔽中断寄存器、存储区映射等。这些操作可以通过执行一组命令序列来完成,保存一组命令序列的文本文件称为命令脚本文件(在 IDE开发环境中使用扩展名*.cs)。 (3)存储区映像文件:在SDRAM中调试程序时起作用。在软件调试过程中访问非法存储区在部分处理器和目标板上会产生异常,如果异常没有处理,则会导致软件调试过程无法继续,为了防止以上问题并调整仿真器访问速度以达到最合适的水平,提供这样一种用于描述各个存储区性质的文件叫存储区映像文件(在IDE开发环境中使用扩展名*.map)。 在程序的调试过程中可以选择使用存储区映像文件*.map和命令脚本文件*. cs 配合程序的调试。

该文章介绍了ARM处理器的中断系统,以周立功公司的LPC2000为例。希望对大家有用! 1.1 中断源 LPC2000系列的向量中断控制器(VIC)支持32个中断请求输入,也即是支持32个中断源,见表5.1。这32个中断按顺序称为VIC通道0,VIC通道1,…,VIC通道31。 每一个VIC通道都支持软件中断与硬件中断,即每个中断均可由软件或硬件中断产生,软件中断与对应通道上的硬件中断是逻辑“或”的关系。软件中断可通过置位VICSoftInt寄存器相应位来产生,也可通过置位VICSoftIntClear 寄存器相应位来清除。 表5.1 外设功能的中断源 1.2 三种中断类型 LPC2000具有3类中断:FIQ、向量IRQ和非向量IRQ。LPC2000系列可通过对VICIntSelect和VICVectCntlx(x=0,1,…,15)这两类寄存器的设置,将以上的32个中断源设置为这三类中断的任何一种。其中,快速中断请求FIQ具有最高优先级。建议只分配一个中断请求给FIQ以减少中塅处理程序的延迟。当然,VIC支持多个FIQ中断。向量IRQ具有中等优先级。该级别最多可分配32个请求中的16个。32个请求中的任何一个都可以分配到16个向量IRQslot中的任意一个。其中,slot0具有最高优先级,而slot15则为最低优先级。非向量IRQ 具有最低优先级。 1.3 如何初始化某个中断源为三类中断中的一类 通过VICIntSelect中断选择寄存器将32个中断请求分配为FIQ或IRQ (包括向量IRQ与非向量IRQ);通过VICVectCntlx(x=0,1,…,15)来选择32个中断请求中的某个为向量IRQ并设定此中断请求为IRQ slotx(x对应于VICVectCntlx中的x)。若某个中断源被设定为IRQ,但却未通过VICVectCntlx 使能,则该中断源将被默认为非向量IRQ。 1.4 中断处理过程中断处理过程如下所示: 初始化:设置中断源为3种中断源之一,设置中断地址,使能中断,然后正常运行用户程序;当有IRQ中断产生时,VIC将会根据中断源设置VICVectAddr

A VR单片机外部中断范例1. 开发语言 本范例使用WinA VR/GCC 20050214 版本开发 2. 范例描述 按下按键0,LED0亮。直到松手,其他按键才能起作用 按下按键1,LED1亮。其他按键随时都能起作用 按下按键2,LED0/1都熄灭。直到松手,其他按键才能起作用3. 电路图设计:为简化线路设计。 . 4. 代码设计与说明: /************************************************* **** AVR 外部中断使用范例*** **** *** **** 策划、整理与测试:阿莫(armok) *** **** 代码设计:HJJourA VR *** **** 编译器:WINA VR20050214 *** **** www.OurA https://www.wendangku.net/doc/e418016082.html, 2005.8.31 *** *************************************************/ /* 本程序简单的示范了如何使用ATMEGA16的外部中断 中断的设置 按键的简单延时防抖动 中断的嵌套 变量在中断中的应用---如果变量会在中断服务程序中被修改,须加volatile限定 本范例可直接使出厂状态的新M16芯片,无需对芯片的熔丝位进行配置。

出于简化程序考虑,各种数据没有对外输出,学习时建议使用JTAG ICE硬件仿真器关于外部中断作唤醒源的条件:(将会在后面的电源管理和睡眠模式范例中应用)而INT0和INT1的边沿触发中断只能在空闲模式起作用,即CLKI/O不停止INT0和INT1的低电平中断,INT2在各种睡眠模式下都可以,因为这几种中断工作于异步模式,不需要时钟驱动 官方的M16中文手册对外部中断的描叙存在多处错误,请参考英文原版。*/#include #include #include #include /*宏INTERRUPT 的用法与SIGNAL 类似,区别在于 SIGNAL 执行时全局中断触发位被清除、其他中断被禁止 INTERRUPT 执行时全局中断触发位被置位、其他中断可嵌套执行 另外avr-libc 提供两个API 函数用于置位和清零全局中断触发位,它们是经常用到的。 分别是:void sei(void) 和void cli(void) 由interrupt.h定义*/ //注:内部函数_delay_ms() 最高延时262.144mS@1MHz /* 该函数可以实现较精确的定时,但用JTAG仿真时较麻烦---会进入机器码窗口(Disassembeler) .注意跳开该语段。 一旦JTAG仿真进入该内部函数语句,会变得像"死机"一样(其实在运行中),可以先[break],然后 在后面的C语句设[breakpoint],[RUN]跳过*/ // for()/while()语句计算延时时间较麻烦。 // 为了使_delay_ms()函数的延时正确,须在makefile中设定F_CPU为实际的系统时钟频// 本范例为1MHz内部RC振荡器即F_CPU=1000000 /* C:\WinA VR\avr\include\avr\目录包括所有芯片的定义和其他头文件 其中iom16.h 定义ATMEGA16芯片的特性(中断向量,寄存器,位定义...) 包括下面中断服务程序的常量SIG_INTERRUPTx ,PORTx,GICR..... */ //管脚定义 #define EXT_INT0 2 //PD2 按键0 #define EXT_INT1 3 //PD3 按键1 #define EXT_INT2 2 //PB2 按键2 #define LED0 0 //PB0 #define LED1 1 //PB1 #define LED2 3 //PB3 //宏定义 #define LED0_ON() PORTB|= (1<

ARM中断及相关寄存器 要正确应用ARM处理器必须首先对它的系统寄存器进行正确配置,下面简要介绍一下ARM寄存器,包括一些中断寄存器设置如中断状态(0x8000.0240,0x8000.1240,0x8000.2240)和中断屏蔽寄存器(0x8000.0280,0x8000.1280,0x8000.2280)。 ARM中断寄存器主要包括: ·中断模式寄存器可以设置2个中断源为IRQ或FIQ方式。 ·中断挂起寄存器,当有中断请求产生时,相应的位会被硬件置1,处于挂起状态。当进入中断处理程序时,必须通过软件清除这个标志位,以标志响应中断请求。 ·中断屏蔽寄存器,当需要屏蔽某些中断源时,可以设置相对应的位。 ·中断优先级寄存器可以设置21个中断源优先级的高低。 ·中断偏移寄存器,中断响应时通过读这个寄存器可以查到当前的中断源。 如表1所示是ARM的一些系统寄存器列表。 表1 ARM系统寄存器列表 系统寄存器中的每一位或几位都对应系统功能的控制、状态等信息。例如: ·SYSCON1中的UARTIEN、LCD EN位分别控制异步串口1与LCD显示的使能。 ·SYSCON2中的SDRAM Z用来设置SDRAM存储器的位宽。 ·SYSCON3中的CLKCTL用来在18MHz、37MHz、49MHz和74MHz中选择一种作

为系统工作频率。 与系统运行紧密相关的其他寄存器如表2所示,对它们进行正确设置,就可以启用 SDRAM、LCD或者串行通信口。 表2 ARM的其他重要寄存器列表 数据手册上是这么说的: INTPND 寄存器中的26 个位对应着每一个中断源。当某个中断产生时,INTPND 中相 应的pending 位就会置1,说明该中断还未被处理。中断服务程序中必须清除该pending 位,从而使系统能够及时响应下一次中断。INTPND 是一个只读寄存器,清除pending 位的方式 是向I_ISPC/F_ISPC 的相应位写入“1”。在多个中断同时发生时,INTPND 将所有发生的中断pending 位都置1。虽然中断请求可以通过INTMSK 寄存器屏蔽,但是如果被屏蔽的中断 发生了,INTPND 中的pending 位仍然会被置1。

ARM11(3)——外部中断 WF 2013.1.24 最近正在学习ARM11(S3C6410开发板)的外部中断部分,稍有心得,特此总结一些学习笔记,分享出来,献给那些像我一样正在ARM11上裸奔的嵌入式学徒们,同时也希望看到此文的业界前辈多多指教。 外部中断基础知识总结: ARM11(S3C6410开发板)共有187根多功能I/O口,其中127根可用于外部中断,而这127个外部中断引脚又被分为十组:EINT0~EINT9,这十组对应VICX(中断矢量寄存器)中0、1、32、33、53五个中断号。十组外部中断和五个中断号之间的对应关系却是略显复杂:EINT0共28根引脚被分为了四部分分别对应了0、1、32、33四个中断号,EINT1~EINT9这9组共99根引脚却只对应了53一个中断号。 外部中断逻辑图: 外部中断的基本编程思想总结: 1、初始化I/O引脚设置——GPX; (1)、必须设置所需引脚为中断模式——GPXCON; (2)、可选性设置上下拉电阻和数据位——GPXPUD、GPXDAT; 2、初始化外部中断设置——EINTX; (1)、选择外部中断的触发方式——EINTXCON; (2)、清除外部中断屏蔽——EINTXMASK; (3)、外部中断悬挂给1置0——EINTXPEND; 3、初始化总中断设置——VICX; (1)、选择中断模式——VICXINTSELECT; (2)、设置中断函数入口——VICXVECTADDR; (3)、中断使能——VICXINTENABLE; 4中断函数出口处设置; (1)、清除当前中断函数记录——VICXADDR; (2)、给1置0外部中断悬挂位——EINTXPEND。 程序实例: 程序说明:实现按键中断控制LED灯的显示,每按一个键LED会显示一种方案。 .c文件代码: //引入GPN引脚(外接按键)三个寄存器的地址标号 #define rGPNCON (*(volatile unsigned*)(0x7f008830)) #define rGPNDAT (*(volatile unsigned*)(0x7f008834))

ARM应用笔记 一、ARM体系结构 ARM是Advanced RISC Machines的缩写,是一家微处理器行业的知名企业,设计了大量高性能、廉价、耗能低的RISC (精简指令集)处理器。ARM公司只设计芯片,而不生产。它技术授权给半导体、软件和OEM厂商,并提供服务。 ARM体系结构的目前7个版本: ARM V1版架构:只在原型机ARM1出现过,只有26位的寻址空间,没有用于商业产品。 ARM V2版架构:对V1版进行了扩展,例如ARM2和ARM3(V2a)架构。包含了对32位乘法指令和协处理器指令的支持。同样为26位寻址空间,现在已经废弃不再使用。 ARM V3版架构:1990年设计的第一个微处理器采用的是版本3的ARM6,作为IP核、独立的处理器、具有片上高速缓存、MMU和写缓冲的集成CPU,V3版架构(目前已废弃)对ARM体系结构作了较大的改动。 ARM V4版架构:V4版架构在V3版上作了进一步扩充,V4版架构是目前应用最广的ARM体系结构,ARM7、ARM8、ARM9和StrongARM都采用该架构。V4不再强制要求与26位地址空间兼容。 ARM V5版架构:V5版架构是在V4版基础上增加了一些新的指令,ARM10和Xscale都采用该版架构。 ARM V6版架构:V6版架构是2001年发布的,首先在2002年春季发布的ARM11处理器中使用。在降低耗电量地同时,强化了图形处理性能。 ARM V7版架构:ARMv7架构是在ARMv6架构的基础上诞生的。该架构采用了Thumb-2技术,是在ARM的Thumb代码压缩技术的基础上发展起来的,并且保持了对现存ARM解决方案的完整的代码兼容性。Thumb-2技术比纯32位代码少使用31%的内存,减小了系统开销,同时能够提供比已有的基于Thumb技术的解决方案高出38%的性能。 命名方式上,基于ARMv7架构的ARM处理器已经不再延用过去的数字命名方式,而是冠以Cortex的代呼。基于v7A的称为“Cortex-A”,基于v7R的称为“Cortex-R”,基于v7M的称为“Cortex-M”。

相关文档
相关文档 最新文档