搜档网
当前位置:搜档网 › ARM9和ARM11性能比较

ARM9和ARM11性能比较

ARM9和ARM11性能比较
ARM9和ARM11性能比较

ARM9和ARM11性能比较

S3C2440和S3C6410性能比较

下面是S3C6410的功能框图:

微机接口实验

北京科技大学计算机与通信工程学院 实验报告 实验名称:实验一8259 中断控制器应用实验 实验二8254 定时/计数器应用实验 实验三8255 并口控制器应用实验学生姓名: 专业: 班级: 学号: 指导教师: 实验成绩: 实验地点:机电楼320 实验时间:2015 年12 月 4 日

一、实验目的与实验要求 1、实验目的 实验一 1.掌握PC 机中断处理系统的基本原理。 2.掌握可编程中断控制器8259 的应用编程方法。 实验二 1.掌握8254 的工作方式及应用编程。 2.掌握8254 典型应用电路的接法。 实验三 1.掌握8255 的工作方式及应用编程。 2.掌握8255 典型应用电路的接法。 2、实验要求 实验一 (1)实验1-1:PC 机内中断应用实验 ①按接线图连好接线,调用程序源代码8259-1.asm,观察实验现象,将屏幕显示结果以截图方式写在实验报告中。 ②自设计实验。改变接线方式,将单次脉冲连到USB 核心板上的IRQ10 插孔上,参考本实验代码,编程实现IRQ10 中断。(注意:考虑PC 机内中断级联的方式,参看前面的原理说明),将代码写在报告中。 (2)实验1-2:PC 机内中断嵌套实验 ①按接线图连好接线,调用程序源代码8259-2.asm,做如下操作,并将屏幕显示结果以截图的方式写在实验报告中,并分析产生该现象的原因: A.按下连接IRQ 的单次脉冲按键,屏幕上会显示10个3,在屏幕上10 次显示未结束之前,按下连接IRQ10 的单次脉冲按键,观察现象; B.按下连接IRQ10 的单次脉冲按键,屏幕上会显示10个10,在屏幕上10次显示未结束之前,按下连接IRQ3 的单次脉冲按键,观察现象。 ②程序中所有代码均没有注释,请在报告中补全注释,尽量详细。

中断

填空题 (1)51系列单片机5个中断源的中断入口地址分别是INT0:;INTl:;T0:;T1:;串行口:; (2)在CPU未执行同级或更高优先级中断服务程序的情况下,中断响应等待时间最少需要个机器周期,最长需要个机器周期。 (3)中断嵌套与子程序嵌套的区别在于:一是子程序嵌套是在程序中事先安排好的;而中断嵌套是:二是子程序嵌套无次序限制,而中断嵌套只允许。 (4)CPU未执行中断程序,中断响应时间最短需个机器周期,最长需个机器周期. 选择(1)CPU响应中断后,必须用软件清除中断请求标志的有( )。 A. INT0/INT1采用电平触发方式B.INT0/INT1采用边沿触发方式 C.定时/计数器T0/T1中断D.串行口中断TI/RI (2)下列中断优先顺序排列,不可能实现的有( )。 A.T1、T0、。INT0、INT1、串行口B.INT0、T1、T0、INT1、串行口C.INT0、INT1、串行口、T0、T1 D.INT1、串行口、INT0、T0、T1 提示:将中断请求排序分成两部分,如果每部分都满足同级优先次序,则设置能实现,否则设置不能实现。 判断对错 (1)不同中断源之间可以互相中断。( ) (2)不同优先级的中断源之间可以互相中断。( ) (3)INT0、INT1、T0、串行口、T1中断优先排列顺序不能实现。( ) (4)T0、Tl、INT0、INT1、串行口中断优先排列顺序能实现。( ) (5)串行口、TO、INT0、INT1、T1中断优先排列顺序不能实现。( ) (6)串行口、INT0、T0、INTl、T1中断优先排列顺序能实现。( ) (7)INT0、INT1、串行口、T0、T1中断优先排列顺序不能实现。( ) (8)INT0、T1、INT1、T0、串行口中断优先排列顺序能实现。( ) 简答 (1)编写中断程序时,通常需要在中断入口地址区间设置一条跳转指令,跳转到中断服务程序的实际入口处。为什么要这样做? (2)什么叫中断嵌套?中断嵌套有什么限制?中断嵌套与子程序嵌套有什么区别? (3)在51系列单片机5个中断源中,中断请求标志是如何清除的? (4)在5l系列单片机中,哪几个特殊功能寄存器与中断控制有关? (5)中断源中断优先级别设置能否实现,取决于什么因素?并说明理由。 (6)51系列单片机中断优先级和中断优先权有什么区别?如何设置中断优先级? (7)在5l系列单片机中,中断是如何嵌套的? (8)在5l系列单片机中,如果CU正在执行RETI或访问IE、IP指令,则中断不能立即响应,为什么? (9)在51系列单片机中,外中断的触发方式有哪几种?如果采用电平触发方式,需要注意什么?

单片机实验报告

PIC单片机原理与应用实验报告 学校: 学院: 班级: 姓名: 学号: 指导教师:

实验一I/O端口实验 一、实验目的 (1)掌握MPLAP IDE集成开发环境的基本操作。 (2)掌握单片机的I/O端口的设计方法。 (3)掌握在线调试器的使用方法。 (4)学会查阅相关数据手册。 二、实验仪器设备 (1)PC机一台; (2)MPLAP IDE开发软件一套; (3)PICkit3在线调试器一套; (4)APP009实验板一块; 三、实验要求 (1)设计发光LED灯闪烁程序,下载调试,验证功能。 (2)设计流水灯程序,或其他花样彩灯程序,下载调试,验证功能。 (3)设计按按键加1计数程序,下载调试,验证功能。 四、实验步骤 (1)连接在线调试器PICkit3、APP009实验板和计算机; (2)打开MPLAP IDE集成开发环境软件,点击Debugger>Select Tools>PICkit 3 选择调试工具; (3)点击Debugger>Settings,在Settings窗口中点击Power栏,选择由PICkit3向实验板供电; (4)完成实现发光LED灯闪烁实验; 程序代码: #include void delay(void); int main() { while(1) { TRISEbits.TRISE0 = 0; //RE0设置为输出(1输入,0输出); https://www.sodocs.net/doc/1511608990.html,TE0 =1; //RE0=1输出高电平+5V,亮灯 delay(); //延时 https://www.sodocs.net/doc/1511608990.html,TE0 =0; //RE0=0输出低电平0V,灭灯 delay(); //延时 } } void delay(void) { long int i; for (i=0;i<65000;i++); } 实验现象:将程序下载到实验板上,运行程序,LED闪烁,通过改变延时函数改变延时时间,进而可以改变LED闪烁的频率。

单片机实验

石家庄铁道大学单片机实验题目实验一数据区赋值 (用指针、at、宏分别设计程序) 实现给片内RAM 30H和片外RAM 3000H开始的16字节区域分别赋值为0x01、0x02......0x0f。 At #include //at data unsigned char buffer1[16] _at_ 0x30; xdata unsigned char buffer2[16] _at_ 0x0030; void main() { unsigned int i,j; for(i=0;i<16;i++) { buffer1[i]=i; } for(j=0;j<16;j++) { buffer2[j]=j; } while(1); } 宏 #include//宏 void main() { unsigned int i,a,b; a=0x30; b=0x0030; for(i=0;i<16;i++) { DBYTE[a++]=i; XBYTE[b++]=i; } while(1); }

指针 #include //指针 void main(void) { unsigned char data*p1; unsigned char xdata*p2; unsigned int i; p1=0x30; p2=0x3000; for(i=0;i<16;i++) { *p1=i; p1++; *p2=i; p2++; } } 实验二数据区数据处理 对30H开始的内存区数据0x01~0x0f进行处理: 将30H开始的内容变成0x01、0x23、0x45......0xef存到40H开始的单元 将40H开始的内容变成0xef、0xcd.....0x23、0x01存到50H开始的单元 将50H开始的内容变成0x0f、0x0e、0x0d......0x01、0x00存到60H开始的单元#include #include #include data unsigned char buffer1[16] _at_ 0x30; data unsigned char buffer2[8] _at_ 0x40; data unsigned char buffer3[8] _at_ 0x50; data unsigned char buffer4[16] _at_ 0x60; void main() { unsigned int i,j,k,r; for(i=0;i<16;i++) {buffer1[i]=i;}//30H赋值 for(j=0;j<8;j++) {buffer2[j]=buffer1[2*j]<<4|buffer1[2*j+1];}//40H

TIM2定时中断嵌套sytick定时器中断异常

现象: TIM2设置10Ms定时中断,运行delay(2),程序就停滞了 分析: Sytick滴答定时器中断优先级是占线式的(实践的出来的血的经验),因为中断优先级组配置为0时,虽然TIM2的响应式优先级为2,应该说sycik的优先级已经是0了,可以走delay中断的,但是还是不行。 把中断优先级类型配置为4,即全部是抢占式优先级式,TIM2也开始走了,delay也开始走了。 这个折腾很久的,systick在R008文档中说的太少,网友的博客说了很多,只是提到systick 的中断优先级可以改,但是么有说他是抢占式的。 static __INLINE uint32_t SysTick_Config(uint32_t ticks) { if (ticks > SysTick_LOAD_RELOAD_Msk) return (1); /* Reload value impossible */ SysTick->LOAD = (ticks & SysTick_LOAD_RELOAD_Msk) - 1; /* set reload register */ // NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); /* set Priority for Cortex-M0 System Interrupts */ NVIC_SetPriority (SysTick_IRQn, 0); SysTick->VAL = 0; /* Load the SysTick Counter Value */ SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ return (0); /* Function successful */ } NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1 ; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; NVIC_Init( &NVIC_InitStructure);

STM32中EXTI(外部中断)和NVIC(嵌套向量中断)的关系

STM32中EXTI(外部中断)和NVIC(嵌套向量中断)的关 系 NVIC 是Cortex-M3 核心的一部分,关于它的资料不在《STM32 的技术参 考手册》中,应查阅ARM 公司的《Cortex-M3 技术参考手册》Cortex-M3 的向 量中断统一由NVIC 管理EXTI 是ST 公司在其STM32 产品上扩展的外中断控 制。它负责管理映射到GPIO 引脚上的外中断和片内几个集成外设的中断 (PVD,RTC alarm,USB wakeup,ethernet wakeup),以及软件中断。其输出最终被映射到NVIC 的相应通道。因此,配置EXTI 中断的过程必然包含对 NVIC 的配置,例如下面配置EXTI0 的过程,就要首先配置EXTI 控制器(使 能相应的中断线,选择中断/事件模式,触发边沿极性),然后再配置NVIC 控 制器(EXTI0 映射在NVIC 上的通道号,中断优先级,中断屏蔽状态): GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource0); EXTI_InitStructure.EXTI_Line = EXTI_Line0;EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; // or RisingEXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;// EXTI0_IRQn is defined in stm32f10x.hNVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure); EXTI0_IRQn 的值,其实就是EXTI0 中断向量在中断向量表中的位置 (STM32 技术参考手册中断向量表Position 栏中的数值)

嵌入式实验3按键实验(中断方式)

河南机电高等专科学校《嵌入式系统开发》课程实验报告 系部:电子通信工程系 班级:电信1## 姓名: ###### 学号: 120######

实验三按键实验(中断方式) 一.实验简介 在实验一的基础上,使用按键控制流水灯。 二.实验目的 熟练使用库函数操作GPIO,掌握中断配置和中断服务程序编写方法,掌握通过全局变量在中断服务程序和主程序间通信的方法。 三.实验内容 实现初始化GPIO,并配置中断,在中断服务程序中通过修改全局变量,达到控制流水灯速度及方向。 下载代码到目标板,查看运行结果。 四.实验设备 硬件部分:PC计算机(宿主机)、STM32实验板。 软件部分:PC机WINDOWS系统、MDK KEIL软件、ISP软件。 五.实验步骤 1在实验一代码的基础上,编写中断初始化代码 2在主程序中声明全局变量,用于和中断服务程序通信,编写完成主程序 3编写中断服务程序 4编译代码,下载到实验板 5.单步调试 6记录实验过程,撰写实验报告 六.实验结果及测试 中断方式的按键式实验,是通过配置外部中断寄存器和中断嵌套(NVIC)控制器来实现按键按下控制LED灯亮灭。通过按键中断打断主函数,执行LED1取反一次。 主函数初始化中断配置和LED配置,点亮LED1后一直等待中断,每中断一次,LED1取反一次。

int main(void) { LED_GPIO_Config(); LED1_ON; CLI(); SEI(); EXTI_PA0_Config(); while(1) { } } 中断嵌套控制寄存器的配置为中断嵌套分组1;抢占优先级0;响应优先级0 代码如下: void NVIC_Configuration(void) { NVIC_InitTypeDef NVIC_InitStructure; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } 外部中断按键的配置源码如下:配置PA0位中断线,并使能AFIO时钟void EXTI_PA0_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; EXTI_InitTypeDef EXTI_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO,ENABLE); NVIC_Configuration(); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0); EXTI_InitStructure.EXTI_Line = EXTI_Line0; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); }

中断嵌套

中断嵌套 是指中断系统正在执行一个中断服务时,有另一个优先级更高的中断提出中断请求,这时会暂时终止当前正在执行的级别较低的中断源的服务程序,去处理级别更高的中断源,待处理完毕,再返回到被中断了的中断服务程序继续执行,这个过程就是中断嵌套。其实就是更高一级的中断的“加塞儿”,处理器正在执行着中断,又接受了更急的另一件“急件”,转而处理更高一级的中断的行为! 中断优先级?? ?在说到中断之前,我先来定义一下优先级,明白了什么是优先级,后面的阐述就容易明白了。实际上很多人都是混淆了优先级的含义,所以才觉得糊里糊涂。优先级高的中断源可以中断优先级低的中断服务程序,这就形成了中断服务程序中套着中断服务程序的情况,即形成了所谓的中断嵌套。MCU暂停现行程序而转去响应中断请求的过程称为中断响应;为使系统能及时响应并处理发生的所有中断,系统根据引起中断事件的重要性和紧迫程序,硬件将中断源分为若干个级别,称作中断优先级;中断的优先级有两个:查询优先级和执行优先级。什么是查询优级呢?我们从datasheet或书上看到的默认(IP寄存器不做设置,上电复位后为00H)的优先级:外部中断0> 定时/计数器0 > 外部中断1 > 定时/计数器1 > 串行中断或int0,timer0,int1,timer1,serial port 或INT0、T0、INT1、T1、UART 或PX0>PT0>PX1>PT1>PS>...... 其实都是查询优级。首先查询优先级是不可以更改和设置的。这是一个中断优先权排队的问题。是指多个中断源同时产生中断信号时,中断仲裁器选择对哪个中断源优先处理的顺序。而这与是否发生中断服务程序的嵌套毫不相干。当CPU查询各个中断标志位的时候,会依照上述5个查询优先级顺序依次查询,当数个中断同时请求的时候,会优先查询到高优查询先级的中断标志位,但并不代表高查询优先级的中断可以打断已经并且正在执行的低查询优先级的中断服务。例如:当计数器0中断和外部中断1(按查询优先级,计数器0中断>外部中断1)同时到达时,会进入计时器0的中断服务函数;但是在外部中断1的中断服务函数正在服务的情况下,这时候任何中断都是打断不了它的,包括逻辑优先级比它高的外部中断0计数器0中断。而中断的执行优先级就是你对IP寄存器的设置了。在2个优先级的情况下,某位为1,则相应的中断源为高优先级;为0,则为低优先级。关于中断的优先级有三条原则:1、CPU同时接收到几个中断时,首先响应优先级最高的中断请求;2、正在进行的中断过程不能被新的同级或低行优优先级的中断请求所中断;3、正在进行的低行优优先级中断服务,能被高行优优先级中断请求中断;若:同一执行优先级中的中断申请不止一个时,则有一个中断优先权排队问题。同一执行优先级的中断优先权排队,由中断系统硬件确定的自然优先级形成,优先权自高到低的顺序即:外部中断0>定时/计数0>外部中断1>定时/计数1>串行接口例如:设置IP =0x10,即设置串口中断为最高优先级,则串口中

多级嵌套的中断试验

一.实验目的 (1)掌握中断在计算机系统中的作用; (2)了解可以响应中断请求的条件和时刻,响应中断的过程和实现方案;理解使用中断隐指令的必要性; (3)了解中断处理的完整过程,开中断,关中断操作的作用,保存现场信息和恢复现场信息必须确保完整完成的含义和可行措施; (4)掌握确定中断向量,设计中断处理程序的操作步骤和实现方法;二.实验原理 1.1中断电路 TH-union教学机中断电路的总体组成,如下图所示: 图中IRQ0—IRQ2是3个中断请求源信号,分别对应实验箱上的三个中断请求 按钮,实验时,按下某个按钮表示发出相应的中断请求信号。这三级中断的 优先次序从低到高为IRQ0到IRQ2。 1.2中断处理在教学机中的具体实现 教学机的中断线路主要包括2片GAL、3个无锁按键、2片74LS374和若干插针。下面分别对这几部分进行简要介绍。 (1)3个无锁按键,提供中断请求的源信号 教学机支持3级中断发,这3个无锁按键作为3个中断源,从右到左依次为一、二、三级中断,对应的中断优先级编码P1、P0依次为01、10、11,优先级也依次升高。这3个无锁按键的引脚作为INTS GAL 和INTP GAL 的输入。

(2)INTS GAL,接受并记忆通过无锁按键给出的中断请求源信号 该芯片的输入信号除了3个无锁按键的6个引脚外,还有控制信号DC23、/GIR及系统时钟CK1。输出信号只有3个分别表示取指时3个无锁按键是否被按下,如果被按下,则相应的输出信号为高电平,否则为低电平。这3个输出信号被送至INTP GAL 。 该芯片实现的功能是,在每次取指前一拍(用DC2-3=1指示),将3个输出信号全部置零;在每次取指时(/GIR信号指示),都检测是否有中断请求(即是否有无锁按键被下),并用这3个输出引脚表示;在取指后以及整个指令执行过程中,这3个输出信号都将保持不变。 (3)INTP GAL,在条件成立时,向CPU 发出中断请求信号/INT(低电平有效) 该芯片实现的功能是: 1)对INTS GAL 送来的3个信号进行中断优先级编码,得到新请求的中断优先级,并与当前中断优先级P1、P0比较; 2)设置中断允许位INTE,该信号高电平表示允许中断,低电平表示禁止中断。当控制信号DC12~DC10=110时,INTE被置为1;DC12~DC10=111 时,INTE被置为0。 3)产生中断请求信号/INT,该信号低电平表示有(更高优先级)中断请求需要响应。 在中断允许位INTE=1时,如果新的中断优先级比当前中断优先级高,则给出中断请求信号/INT=0,否则/INT=1。 P1、P0也是状态寄存器的2个输入信号,可随同状态标志(C、Z、V、S)压入/弹出栈。 P1、P0也是INTVTL74LS374的2个输入信号,用来形成当前中断优先级在中断向量表中的首地址。 4)通过中断向量寄存器INTVTH 74LS374、INTVTL 74LS374硬性设置的中断向量分别为16进制的2104、2108和210C,对应的中断优先级分别是1、2、3。 三.实验内容及步骤 1.实验内容 (1)读懂教材中有关中断的概念,中断响应和中断处理的内容,了解这些功能在教学计算机中是如何实现的; (2)如果所用的教学计算机的基本指令集合中尚未实现中断隐指令,与处理中断有关的EI,DI和IRET三条指令,则需要首先实现中断隐指令和扩 展这三条指令;如果在基本指令集中已经实现了上述内容,则直接跳过 这一实验步骤。 (3)确定中断向量表地址。这个向量表是以XXX4为首地址的一段内存区(为每一个中断保留4个字的空间),用于存放对应每一个中断源的中 断处理程序的首地址,要在中断隐指令中把这里的选定的一个地址传送 到程序计数器PC中,之后就进入响应中断处理程序的执行过程。常用 的可行方案是在这里保存一条转移指令,实现依据不同的中断源转移到 不同的中断处理程序。教学机设置了3个中断源并为每个中断源分配了 不同的优先级,则3个终端程序入口地址分别为16进制的XXX4,XXX8

8259中断实验

XX学院 实验报告 实验名称 姓名 学号 班级 教师 日期

一、实验内容与要求 1.1 实验内容 本次实验分为如下3个子实验: (1)单中断请求实验:利用系统总线上中断请求信号MIR7,设计一个单一中断请求实验; (2)双中断优先级实验:利用系统总线上中断请求信号MIR6和MIR7,设计一个双中断优 先级应用实验,观察8253对中断优先级的控制; (3)级联中断实验:利用系统总线上中断请求信号MIR7和SIR1,设计一个级联中断应用 实验。 1.2 实验要求 本次实验中三个子实验的实验要求如下: (1)单中断请求实验:单脉冲KK1+与主片8259的IR7相连。每按KK1+,进入一次中断, 输出7; (2)双中断优先级实验:单脉冲KK1+连主片8259的IR7,KK2+连其IR6。每当KK1+按 下时显示“7”,每当KK2+按下显示“6”; (3)级联中断实验:单脉冲KK1+连主片8259的IR7,KK2+连从片的IR1。每当KK1+按 下时显示“M7”,每当KK2+按下显示“S1”。 二、实验原理与硬件连线 2.1 实验原理 (1)中断控制器8259简介 在Intel 386EX芯片中集成有中断控制单元(ICU),该单元包含有两个级联中断控制器,一个为主控制器,一个为从控制器。该中断控制单元就功能而言与工业上标准的82C59A是一致的,操作方法也相同。从片的INT连接到主片的IR2信号上构成两片8259的级联。 在TD-PITE实验系统中,将主控制器的IR6、IR7以及从控制器的IR1开放出来供实验使用,主片8259的IR4供系统串口使用。8259的内部连接及外部管脚引出如图1-1:

关于ARM9的中断嵌套

NoInt EQU 0x80 //禁止IRQ中断 USR32Mode EQU 0x10 //用户模式 SVC32Mode EQU 0x13 //管理模式 SYS32Mode EQU 0x1f //系统模式 IRQ32Mode EQU 0x12 //中断模式 FIQ32Mode EQU 0x11 //快速中断模式 ;引入的外部标号在这声明 //IMPORT表示引用外部的信息 IMPORT OSIntCtxSw ;任务切换函数//引用外部的函数 IMPORT OSIntExit ;中断退出函数 IMPORT OSTCBCur ;UC/OS II正在运行的任务指针 IMPORT OSTCBHighRdy ; UC/OS II任务就绪表中级别最高的优先级 IMPORT OSIntNesting ;中断嵌套计数器 IMPORT StackUsr ;用户模式堆栈 IMPORT OsEnterSum ;开关中断的次数 CODE32 AREA IRQ,CODE,READONLY MACRO $IRQ_Label HANDLER $IRQ_Exception_Function EXPORT $IRQ_Label ; 输出的标号 IMPORT $IRQ_Exception_Function ; 引用的外部标号 $IRQ_Label SUB LR, LR, #4 ; 计算返回地址 //进入中断后,它的返回地址该怎么计算呢,可以这样来理解,因为它的指令流水线是3级的,即执行进入中断函数时,PC已经指向欲取值的指令即当前执行的地址+8;当已进入中断时,LR里面装的是PC,所以要想中断返回到正确的地址处,就必须把LR-4。 STMFD SP!, {R0-R3, R12, LR} ; 保存任务环境 //这里面为什么只把R0-R3,R12,LR保存呢,其它不用吗,是这样的,我们可以从你装的ADS1.2目录下的PDF文件夹里面的ADS_DeveloperGuide_D.PDF文件的2.2就可以发现r4-r11装的是局部变量,在进行函数跳转时,编译器它会自动保护它们的。 MRS R3, SPSR ; 保存状态 STMFD SP, {R3, SP, LR}^ ; 保存用户状态的R3,SP,LR,注意不能回写,前面一个SP 是IRQ模式的,后面一个SP是用户模式的,为什么不能回写呢,如果你回写的话,那么它保存的是用户的SP,显然是不行的。不知这样理解对不对。这里保存SP和LR的目的是为了嵌套, ; 正是因为没有回写,所以后面调整了SP ,调整指令是SUB SP, SP, #4*3 LDR R2, =OSIntNesting ; OSIntNesting++ 中断嵌套数+1 ;(相当于调用了一次中断进入函数OSIntEnter(),与后面的BL OSIntExit 形成呼应)LDRB R1, [R2] ADD R1, R1, #1 STRB R1, [R2] SUB SP, SP, #4*3 ;由于前面SP没有回写,保存了3个32位的寄存器,这里调整指针 ;做好弹出这三个数据的准备

钟楠楠单片机实验二

钟楠楠-单片机实验二

————————————————————————————————作者:————————————————————————————————日期:

西安邮电大学430单片机实验报告 实验二 定时器实验 学院:?自动化学院 班级:?自动1102 姓名:?钟楠楠 学号:06111051

实验二 定时器实验 一、实验目的: 1、熟悉MSP430定时器Timer_A 的组成、工作原理; 2、掌握T imer_A的编程实现。 二、实验要求: 1、通过T ime r_A 来产生一个脉冲信号,信号频率为1Hz,占空比为1:1; 2、采用中断方式工作,定时器每10ms中断一次; 3、以1S 为周期,点亮接在P1.2的L ED 灯; 三、实验步骤: (1)工作原理 主计定时计数器单元包括:时钟源选择、预分频器、计数器(TAR )和计数模式选择4个部分。定时器支持多种类型时钟源,包括:S MCL K、ACLK 、TA CLK(外部引脚)、INCLK (TA CLK 取反),类型选择由位域TA SSE LX 控制。时钟源经过预分频器分频后作为16位定时器TAR 输入,在时钟信号的上升沿,T AR可递增或者递减计数(由计数器工作模式而定),计数器溢出后可产生中断,TAR 可以通过软件进行读或写。置位TACLR,可以复位T AR 、预分频器和计数方向。 (2)工作模式 定时器有四种工作模式:停止、增计数、连续计数、增/减计数模式。工作模式由 00 011011 TACLK ACLK SMCLK INCLK 1/2/4/8分频TASSELx IDx 16位定时器TAR 15 Clear 计数 模式Time Clock EQU0RC 捕获模式CMx 00 011011CCI2A CCI2B GND VCC logic Sync 01 TACCR2比较器2 1 SCS COV CAP Y A EN SCCI 输出 单元EQU0 OUT OUTMODX POR D Set Q Reset OUT2 Signal Set TACCR2CCIFG Timer Block CCR2 150CCI EQU2 TACLR CCR0MCx Set TAIFG CCISx Timer Clock Timer Clock

8259的外部优先级中断实验指导书新规定

中断实验 8259A是一种可编程接口芯片,它将中断源的优先级排队、识别中断源及提供中断向量的功能集于一体,因此,只需对8259A进行编程,就可以管理8级中断,并选择优先模式、中断请求方式、中断结束方式等。在中断源超过8个时,不需加任何附加电路通过多片级联构成多达64级向量中断,所以8259A的中断控制功能既强又灵活。 2.4.4 实验预习: (1) 了解中断的概念。 (2) 了解8259A的工作原理。 (3) 分析、了解中断子程序入口地址的设置过程。 2.4.5实验要求: (1).要认真预习实验内容。 (2).要求在运行主程序时对每次中断进行记录。 2.4.6实验步骤及说明: (1)连线。 (2)编辑录入源程序并汇编。 (3)启动系统,运行程序。 (4)触发脉冲(中断申请)。 (5)观察验证结果。 (6)说明:一个8259A可外接8个中断源,本实验只响应INT0,INT1,INT2中断,8259A 也可以多级连接以响应多个中断源。本实验的8259A的INT0,INT1,INT2管脚分别是中断申请源,哪个优先级高,就首先执行相应的中断服务程序,假设CUP 首先响应的是INT0申请源,那么就要执行IENT0中断服务程序,就说明它的级别最高。现将INT0,INT1,INT2管脚连到一起,接到单脉冲信号发生器插孔,在运行主程序时,同时申请中断(给一个正脉冲),观察存储器的内容在执行IENT0、IENT1、IENT2中断服务程序前后数据的变化(从0400H观察)。 联机

①用串口线连接实验机和系统计算机。打开实验机的电源,显示8086。 ②点击系统机桌面上的图标(CT2000系统软件实验平台),在对 话框中选择“好”。在仿真器菜单中点击“仿真器设置”。在对话框中选择不使用软件模拟器。在选择仿真器项中选择“CT2000实验系统”,仿真头选择“8088/8086实验”,CPU选择“8088”。端口选择为COM1。确认硬件仿真器设置。实验机显示“888888”。 通过逻辑分析仪记录波形 ③点击项目菜单选择“编译”→检查编译是否正确。 ④置逻辑分析仪:仿真器→跟踪器/逻辑分析仪设置→逻辑分析 仪;逻辑分析仪窗口“”→触发设置→采样频率10M。 ⑤点击“”复位→“”全速运行程序→发“”单脉冲后,可通过逻辑分析仪窗口观察到中断相应的波形,通过分析波形可以了解中断的响应过程,以及中断响应的条件,记录波形。 2.4.7 8259A的内部寄存器: (1) 中断请求寄存器IRR 每片8259A能够管理8个外部中断源,其中断请求输入端为IR7-IR0,在没设定指定优先级或优先级循环方式时IR0的优先级最高,IR7的优先级最低。请求信号可以是电平触发也可以是边沿触发。中断请求寄存器IRR是一个具有锁存功能的8位寄存器,用它来存放外部中断请求信号IR7-IR0。当某个中断源有请求时,IRR寄存器中的相应位置“1”,当中断请求被响应,IRR寄存器中的相应位被清零。 (2) 中断屏蔽寄存器IMR 中断屏蔽寄存器IMR是一个8位锁存器,与8级中断源IR7-IR0相对应。其中的每一位可以对IRR中相对应的中断源进行屏蔽。某位为“1”时,相应中断源被屏蔽,某位为“0”时,表示开放。 (3) 优先权分析器PR 当中断源IRi有中断请求产生时,PR检查新产生的中断请求的优先级并和“正在服务的中断”进行比较,判定是否向CPU提出中断申请。同时有多个中断请求时,PR进行中断请求优先级的比较并提出申请,及中断被响应时送出最高优先级中断源的中断类型号。 (4) 中断服务寄存器ISR 中断服务寄存器ISR是一个8位锁存器,与8级中断源IR7-IR0相对应。用来存放正在服务的所有中断级,包括尚末服务完而中途被别的中断所打断了的中断级,在第一个INTA信号有效时ISR的相应位置“1”,中断服务结束时用命令将其清零。 2.4.8 编程注意事项: (1) 正确设置可编程中断控制和工作方式。 (2) 必须正确设置中断服务程序人口地址。 2.4.9 8259A的编程:

STM32实验报告

实验一:一个灯的闪烁 一、实验要求 1.熟悉使用STM32F103ZET6开发板 2.利用C语言程序实现一个灯闪烁 二、电路原理图 图1-1 LED灯硬件连接图 三、软件分析 1.本实验用到以下3个库函数(省略了参数):RCC_DeInit();RCC_APB2PeriphClockCmd();GPIO_Init(); 2.配置输入的时钟:SystemInit()主要对RCC寄存器进行配置,GPIOA连接在APB2上,因此RCC_APB2PeriphClockCmd()函数需要使能APB2Periph_GPIOA 3.声明GPIO结构:PF6~PF10口配置为输出= GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10; 4.应用GPIO口:点亮LED1有五种方法 ①ODR寄存器法:GPIOA->ODR=0xffbf; ②位设置/清除寄存器法:GPIOA->BRR|=0X001; ③方法③只适用于GPIOx_BSRR寄存器 ④GPIO_WriteBit()函数法:GPIO_Write(0xffbf); ⑤置位复位库函数法:GPIO_ResetBits(GPIOF,GPIO_Pin_8); 5.主函数程序: int main(void) { RCC_Configuration(); /* 配置系统时钟*/

GPIO_Configuration(); /* 配置GPIO IO口初始化*/ for(;;) { GPIOF->ODR = 0xfeff; /* PF8=0 --> 点亮D3 */ Delay(600000); GPIOF->ODR = 0xffff; /* PF8=1 --> 熄灭D3 */ Delay(600000); } } 四、实验现象 下载程序后开发板上的LED1灯闪烁 五、总结 通过对本实验可以发现,和51等8位单片机相比,STM32对I/O端口的操作变得复杂了许多。 51单片机点灯的程序最简单,直接在main()中写一个while(1),里面写4行代码就可以了。STM32进入while(1)之前必须先配置I/O的方向,必须使能外设的时钟。对STM32来说,除了CM3内核都算外设,包括GPIO。STM32可以关闭任何外设的时钟以禁止该外设,这样设计是出于减少功耗的考虑。 实验二:流水灯的闪烁 一、实验要求 1、熟悉使用STM32F103ZET6开发板 2、利用C语言程序实现流水灯的闪烁实验 二、电路原理图

STM32的嵌套中断系统NVIC详细整理

STM32的嵌套中断系统 本文档由“~风中的叶~”整理;QQ:654705188 一、综述: 1、STM32 (Cortex-M3) 中的优先级概念 STM32(Cortex-M3)中有两个优先级的概念:抢占式优先级和响应优先级,也把响应优先级称作“亚优先级”或“副优先级”,每个中断源都需要被指定这两种优先级。 1. 何为占先式优先级(pre-emption priority) 高占先式优先级的中断事件会打断当前的主程序/中断程序运行—抢断式优先响应,俗称中断嵌套。 2. 何为副优先级(subpriority) 在占先式优先级相同的情况下,高副优先级的中断优先被响应; 在占先式优先级相同的情况下,如果有低副优先级中断正在执行,高副优先级的中断要等待已被响应的低副优先级中断执行结束后才能得到响应—非抢断式响应(不能嵌套)。 3. 判断中断是否会被响应的依据 首先是占先式优先级,其次是副优先级; 占先式优先级决定是否会有中断嵌套; Reset、NMI、Hard Fault 优先级为负(高于普通中断优先级)且不可调整。 4. 优先级冲突的处理 具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断的嵌套,或者说高抢占式优先级的中断可以嵌套低抢占式优先级的中断。 当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。如果这两个中断同时到达,则中断控制器根据他们的响应优先级高低来决定先处理哪一个;如果他们的抢占式优先级和响应优先级都相等,则根据他们在中断表中的排位顺序决定先处理哪一个。 5. Cortex-M3中对中断优先级的定义 既然每个中断源都需要被指定这两种优先级,就需要有相应的寄存器位记录每个中断的优先级;在Cortex-M3中定义了8个比特位用于设置中断源的优先级,这8个比特位可以有8种分配方式,如下: 所有8位用于指定响应优先级 最高1位用于指定抢占式优先级,最低7位用于指定响应优先级

实验9多重中断及中断嵌套

4.1实验9多重中断及中断嵌套 4.1.1实验目的 了解MCS-51单片机的中断组成、中断原理、中断处理及响应过程、中断优先级、外部中断的中断方式,掌握中断功能的编程方法。 4.1.2实验设备 PC机一台,DP-51PROC单片机综合仿真实验仪一台或DICE-598H+增强型单片机开发实验仪一台。 4.1.3实验内容 P1.1连接蜂鸣器,P3.2、P3.3、P1.7分别连接K1~K3;用户按下K1~K3,蜂鸣器发出1KHz、2KHz、4KHz声音。仔细观察一个按键或若干键同时按下时程序执行状态。电路如图4-6所示。 图 4-6 多重中断

硬件连线方法: 用导线连接A2区INT0、INT1、P17插孔至D1区K1~K3插孔, z 3插孔至A4区X15、X10、X6插孔,A4 4.1.4 实验参 z DP-51PROC :A2区P11插孔至B5区BUZZ 插孔。 DICE-598H+:用导线连接D1区K1~K 区X2插孔至B2区VIN 插孔,B2区J1外接扬声器,插孔功能详见附录1。 考程序;Exp9_1:多重中断及中断嵌套 ;系统时钟11.0592MHz ,P1.1连接蜂鸣器,P3.2、P3.3、P1.7分别连接K1~K3 ;用户按下K1~K3,蜂鸣器发出1KHz 、2KHz 、4KHz 声音 ; XTH EQU 30H ;存放定时器常数高8位 XTL EQU 31H ;存放定时器常数低8位 ORG 0000H ljmp Start ORG 0003H ljmp Ex0SVR ORG 0013H ljmp Ex1SVR ORG 001BH ljmp T1SVR ORG 0100H Start: mov SP,#5FH ;堆栈区设在未用RAM 的高端 mov TMOD,#00010000B mov TH1,#0FFH mov TL1,#0F0H clr TR1 mov IE,#10001101B mov IP,#00001000B;设置不同的优先级,观察执行效果 mov P1,#0FFH mov P3,#0FFH ScanKey:mov A,P1 jb ACC.7,ScanKey Key1P: mov XTH,#0FEH mov XTL,#33H

相关主题