精华内容
下载资源
问答
  • 自己整理的详细知识点,以后配置定时器中断串口通信不用再东找西找了。直接一文全打尽!!!因为从Word直接复制过来图片上传不了,所以直接截图上传。

     自己整理的详细知识点,以后配置定时器中断,串口通信不用再东找西找了。直接一文全打尽!!!因为从Word直接复制过来图片上传不了,所以直接截图上传。

    展开全文
  • STM32 中断原理及外部中断的实现

    千次阅读 2021-01-18 15:39:09
    NVIC 中断配置 Nested Vectored Interrupt Controller,嵌套向量中断控制器。 CM3支持256个中断,16个内核中断,240个外部中断,256级可编程中断设置。 STM32使用了其中一部分,16个内核中断,107系列有68个可屏蔽...

    内容较充实,作为个人的学习记录

    NVIC 中断优先级管理

    Nested Vectored Interrupt Controller,嵌套向量中断控制器。

    CM3支持256个中断,16个内核中断,240个外部中断,256级可编程中断设置。

    STM32使用了其中一部分,16个内核中断,107系列有68个可屏蔽中断(103系列只有60个),16级可编程的中断优先级。




    中断寄存器

    • ISER[8],Interrupt Set-Enable Registers,中断使能寄存器组,用8个32位寄存器控制(256个可编程中断),每个位控制一个中断。由于STM32f103只有60个可屏蔽中断,于是只用了 ISER[0] 和 ISER[1] 64个中断中的前60位。

    • ISER[0] 的 bit0 至 bit31 对应中断0至31,ISER[1] 的 bit0 至 bit27 对应中断32至59,使能某个中断就将对应的 ISER 置1

    • ICER[8],Interrupt Clear-Enable Register,中断除能寄存器组。中断对应与ISER相同,但作用是置1清除中断使能

    • ISPR[8],Interrupt Set-Pending Register,中断挂起控制寄存器组。置1将正在进行的中断挂起,暂停等待执行,执行同级或更高级别的中断

    • ICPR[8],Interrupt Clear-Pending Register,中断解挂控制寄存器组,置1将挂起的中断解挂

    • IABR[8],Interrupt Active Bit Register,中断激活标志位寄存器组,只读寄存器为1表示该位对应的中断正在被执行

    • IP[240],Interrupt Priority Registers,中断优先级控制寄存器组,相当重要! STM32的中断分组与其密切相关。

      IP[240]有240个8bit寄存器组成,每个可屏蔽中断占用8bit,总共可表示240个可屏蔽中断,STM32f1使用其中60个,IP[59]至IP[0]分别对应中断59至0。每个可屏蔽中断只用高4位,分为抢占优先级响应优先级,抢占优先级在前、响应优先级在后,各占几位由SCB->AIRCR中的中断分组设置。采用库函数==NVIC_PriorityGroupConfig () ==配置。

      AIRCR
      如果组设置为3,则每个中断的中断优先寄存器高4位中前3位是抢占优先级,优先级级别0-7;低1位是响应优先级,优先级级别0-1。

      STM32的中断向量有抢占属性和响应属性,属性编号越小,优先级别越高。

      抢占属性是打断其他中断的属性,有这个属性就有嵌套中断。由库函数NVIC_IRQChannelPreemptionPriority() 进行参数配置。

      响应属性应用在抢占属性相同时(前提),两个中断向量的抢占优先级相同时,如果同时到达,则优先处理响应优先级高的中断。由库函数NVIC_IRQChannelSubPriority() 进行参数配置。




    库函数配置

    NVIC 中断管理函数声明在 misc.c 文件里


    1. 中断优先级分组函数 NVIC_PriorityGroupConfig()

    此函数在系统工程中只能被调用一次!一旦确定好中断分组就不能更改!

    目前了解到的在主函数中调用该函数


    F12 查看函数定义块:

    void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup)
    {
     	assert_param(IS_NVIC_PRIORITY_GROUP(NVIC_PriorityGroup));
    	SCB->AIRCR = AIRCR_VECTKEY_MASK | NVIC_PriorityGroup;
    }
    

    可以看到,这个函数通过设置 SCB->AIRCR 寄存器设置中断分组。

    补充:

    assert_param(),断言机制函数,在stm32f10x_conf.h文件中可以看到 assert_param() 是一个宏定义,作用就是检测传递给函数的参数是否是有效的参数,返回值是 0假 1真。


    中断优先组配置示例:分组值为2,2优先2抢占:

    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
    

    暂时看到的此函数调用都是在主函数里,以后看到其他程序结构再补充:
    main



    2. 中断初始化函数 NVIC_Init

    函数定义:

    void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct)
    

    查看结构体 NVIC_InitTypeDef 的成员变量:

    typedef struct
    {
     	uint8_t NVIC_IRQChannel; 
     	uint8_t NVIC_IRQChannelPreemptionPriority;
     	uint8_t NVIC_IRQChannelSubPriority; 
     	FunctionalState NVIC_IRQChannelCmd; 
    } NVIC_InitTypeDef;
    
    • NVIC_IRQChannel,定义初始化的是哪个中断,例如 USART1_IRQn
    • NVIC_IRQChannelPreemptionPriority,定义这个中断的抢占优先级别,级别数不超过2的“抢占优先级位数”次方。(一个是位数,一个是级别数)
    • NVIC_IRQChannelSubPriority,定义这个中断的响应优先级别,级别数不超过2的“响应优先级位数”次方。
    • NVIC_IRQChannelCmd,该中断是否使能

    IRQ全称为Interrupt Request,即是“中断请求”的意思


    中断初始化配置示例:

    NVIC_InitTypeDef NVIC_InitStructure;
    
    NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
    //串口 1 中断
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1 ;
    // 抢占优先级为 1
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
    // 响应优先级为 2
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; 
    //IRQ 通道使能
    NVIC_Init(&NVIC_InitStructure); 
    //根据上面指定的参数初始化 NVIC 寄存器
    

    通常如果写外部中断时,此代码块放在 \exti.c\EXTI_Init() 函数内部,每个端口配置结束都需要一个NVIC_Init(&NVIC_InitStructure);




    小结

    中断优先级设置的步骤:

    1. 系统运行开始的时候设置中断分组。确定组号,也就是确定抢占优先级和子优先级的分配位数。调用函数为 NVIC_PriorityGroupConfig();
    2. 设置所用到的中断的中断优先级别,对每个中断调用函数为 NVIC_Init();




    STM32 外部中断

    基础知识

    STM32 外部 IO 口的中断功能

    文件: stm32f10x_exti.c/h

    每个 IO 口都可以作为外部中断的中断输入口,支持19个外部中断/事件请求,每个中断设有状态位、独立的触发/屏蔽设置。

    19个外部中断为:

    • 线 0-15:对应外部 IO 口的输入中断 (供 IO 口使用的中断线)
    • 线 16 :连接到PVD输出(Programmable Votage Detector,可编程电压监测器)
    • 线 17 :连接到RTC闹钟事件
    • 线 18 :连接到USB唤醒事件

    映射方式:

    映射关系
    每个中断线对应最多7个IO口,但每次只能连接到一个IO口上,利用选择器的配置来决定中断线配置到哪个IO口上去。



    库函数配置

    1. 映射关系配置 GPIO_EXTILineConfig()

    外部中断端口映射配置示例 (GPIOE_2 与 EXTI_2):

    GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource2);
    


    2. 中断初始化 EXTI_Init()

    void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct);
    //结构体函数参数
    

    查看一下结构体:

    typedef struct
    {
     	uint32_t EXTI_Line; 
     	EXTIMode_TypeDef EXTI_Mode; 
     	EXTITrigger_TypeDef EXTI_Trigger; 
     	FunctionalState EXTI_LineCmd; 
    }EXTI_InitTypeDef;
    

    有4个需要设置的参数:

    1. 中断线标号,EXTI_Line0~EXTI_Line15
    2. 中断模式,中断 EXTI_Mode_Interrupt 和事件 EXTI_Mode_Event
    3. 触发方式,下降沿触发 EXTI_Trigger_Falling,上升沿触发 EXTI_Trigger_Rising,任意电平(上升沿和下降沿)触发EXTI_Trigger_Rising_Falling
    4. 使能,ENABLE

    中断事件的区别


    简而言之,中断是需要经过芯片内部程序处理,然后跳转的中断程序
    事件是检测到某一动作(电平边沿)触发事件发生了,进而由提前设置好的相应的联动硬件自动完成产生的结果


    中断是红线
    事件是绿线中断和事件


    外部中断初始化配置示例:

    EXTI_InitTypeDef EXTI_InitStructure;
    //定义结构体
    EXTI_InitStructure.EXTI_Line=EXTI_Line4;
    //中断线4
    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
    //中断模式
    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
    //下降沿触发
    EXTI_InitStructure.EXTI_LineCmd = ENABLE;
    //使能
    EXTI_Init(&EXTI_InitStructure); 
    //根据 EXTI_InitStruct 中指定的参数初始化外设 EXTI 寄存器
    


    3. 设置中断线2的中断优先级

    优先级配置见第一部分NVIC的配置

    NVIC_InitTypeDef NVIC_InitStructure;
    //定义NVIC结构体
    NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn; 
    //使能按键外部中断通道
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; 
    //抢占优先级 2,
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02; 
    //响应优先级 2
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; 
    //使能外部中断通道
    NVIC_Init(&NVIC_InitStructure); 
    //中断优先级分组初始化
    


    4. 中断服务函数

    STM32一共15个IO口外部中断线,共有6个中断函数:

    EXPORT EXTI0_IRQHandler
    EXPORT EXTI1_IRQHandler
    EXPORT EXTI2_IRQHandler
    EXPORT EXTI3_IRQHandler
    EXPORT EXTI4_IRQHandler
    EXPORT EXTI9_5_IRQHandler
    EXPORT EXTI15_10_IRQHandler

    0-4每个中断线对应一个中断函数,5-9共用EXTI9_5_IRQHandler,10-15共用EXTI15_10_IRQHandler

    当多线共用一个处理函数的时候,就必须写EXTI_GetITStatus()判断到底是哪一线中断请求


    • 1. ITStatus EXTI_GetITStatus();

    用在中断服务函数的开头,判断中断是否发生

    EXTI_GetFlagStatus()与之的区别
    EXTI_GetITStatus() 函数中会先判断这种中断是否使能,使能了才去判断中断标志位
    而EXTI_GetFlagStatus() 直接用来判断状态标志位


    • 2. EXTI_ClearITPendingBit(EXTI_Line0);

    中断服务函数结束之前调用,清除某中断线上的中断标志位

    EXTI_ClearFlag(),与之功能相同


    常用的中断服务函数格式:

    void EXTI2_IRQHandler(void)
    {
    	if(EXTI_GetITStatus(EXTI_Line2)!=RESET)
    	//判断某个线上的中断是否发生 
    	{
    		中断逻辑…
    		
    		EXTI_ClearITPendingBit(EXTI_Line2); 
    		//清除 LINE 上的中断标志位 
    	} 
    }
    


    外部中断配置示例

    1. exit.c

    包含4个函数:

    • EXTI_Init()

      外部中断初始化,(以按键功能为例):

    void EXTIX_Init(void)
    {
     EXTI_InitTypeDef EXTI_InitStructure;
     NVIC_InitTypeDef NVIC_InitStructure;
     //调用结构体
    
    1. 调用 KEY_Init 函数,来初始化外部中断输入的 IO 口。
    KEY_Init();
    //初始化按键对应 io 模式
    
    1. 调用RCC_APB2PeriphClockCmd()函数来使能复用功能时钟。
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
    //外部中断,需要使能 AFIO 时钟
    
    1. 接着配置中断线和 GPIO 的映射关系。
    //GPIOC.5 与中断线5映射
      	GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource5);
    
    1. 然后初始化中断线。
    EXTI_InitStructure.EXTI_Line=EXTI_Line5;
    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;	
    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
    EXTI_InitStructure.EXTI_LineCmd = ENABLE;
    EXTI_Init(&EXTI_InitStructure);
    
    1. 中断初始化、配置优先级
     NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;			
     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;	
     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;					
     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;								
     NVIC_Init(&NVIC_InitStructure); 
    
    • EXTI0_IRQHandler()

    中断处理函数

    void EXTI0_IRQHandler(void)
    {
      delay_ms(10);   
    	if(WK_UP==1)//WK_UP在key.h文件中定义
    	{	  
    		LED0=!LED0;//LED0在led.h文件中定义
    		LED1=!LED1;	
    	}
    	EXTI_ClearITPendingBit(EXTI_Line0); 
    	//清除EXTI0线路挂起位
    }
    
    • EXTI9_5_IRQHandler()
    • EXTI15_10_IRQHandler()




    小结

    使用 IO 口外部中断的一般步骤:

    1. 初始化 IO 口为输入
    2. 开启 IO 口复用时钟,设置 IO 口与中断线的映射关系。
    3. 初始化线上中断(EXTI),设置触发条件等。
    4. 配置中断分组(NVIC),并使能中断。
    5. 编写中断服务函数。
    展开全文
  • STM32中断原理

    2021-11-05 12:30:29
    目录 一、中断介绍 1.1 什么是中断 1.2 中断的作用 1.3 中断的约束 二、STM32CubeMX中断方式点灯 ...1.介绍STM32中的中断系统。 2.采用中断进行点灯实验。 3.采用串口中断方式实现串口通信。 ...

    目录

    一、中断介绍

    1.1 什么是中断

    1.2 中断的作用

    1.3 中断的约束

    二、STM32CubeMX中断方式点灯

    2.1 项目内容

    2.2 工程设置

    2.3 代码实操

    2.4 硬件连接

    2.5 运行效果

    三、STM32CubeMX中断串口通信

    3.1 项目内容

    3.2 工程设置 

    3.3 代码实操

    3.4 效果展示

     四、参考文献


     

    本篇博客内容包括 :

    1.介绍STM32中的中断系统。

    2.采用中断进行点灯实验。

    3.采用串口中断方式实现串口通信。

    一、中断介绍

    1.1 什么是中断

    中断通常被定义为一个事件,该事件能够改变处理器执行指令的顺序。这样的事件与 CPU 芯片内外部硬件电路产生的电信号相对应。

    中断分为同步中断异步中断

    同步中断——同步中断是当指令执行时由 控制单元产生的,之所以称为同步,是因为只有在一条指令终止执行后 CPU 才会发出中断。

    异步中断——异步中断是由其他硬件设备依照 CPU 时钟信号随机产生的。

    通常我们所说的中断指的是异步中断,我们将同步中断称为异常。(异常是由程序的错误产生的,或者是由内核必须处理的异常条件产生的)

    1.2 中断的作用

    跟据中断的定义,我们可以通过中断使处理器转而去优先运行正常控制流之外的代码

    当一个中断信号达到时,CPU 必须停止它当前正在做的事情,并且切换到一个另一个活动。为了做到这就要在内核态堆钱保存程序计数器的当前值,并把与中断类型相关的地址放进程序计数量。

    1.3 中断的约束

    中断处理是由内核执行的最敏感的任务之一,因为它必须满足下列约束:

    1)中断应该被尽可能快地处理完
    2)中断处理程序必须编成使相应的内核控制路径能以嵌套的方式执行
    3)内核在处理一个中断时,可接受新的中断。但存在一个临界区,中断必须被禁止

    出于1)和3)的约束,中断的设计一般将中断处理程序分为两部分执行(即上半部和下半部函数)。上半部为中断被禁止的临界区,执行关键而紧急的任务,如把接收到的帧拷贝到输入队列,以便下半部函数执行时能进行处理。

    二、STM32CubeMX中断方式点灯

    2.1 项目内容

    用stm32F103芯片的GPIOA端一管脚接一个LED,GPIOB端口一引脚接一个开关(用杜邦线模拟代替)。采用中断模式编程,当开关接高电平时,LED亮灯;接低电平时,LED灭灯。

    这里我选用的芯片为正点原子的STM32F103RC迷你板。

    设置PA1端接开关,PB5接LED。

    对于按键电路,设置上拉式按键

    • 按键按下,引脚PA1读到低电平
    • 按键释放,引脚PA1读到高电平

    LED灯的触发方式

    • 按键按下瞬间,形成下降沿
    • 按键释放瞬间,形成上升沿

    在这里插入图片描述

     因此这里设置上升沿触发,即松开按键时灯亮,因为题目要求为开关接高高电平亮灯。

    2.2 工程设置

    • 新建工程

    新建工程的过程在这我就不赘述了,需要的朋友可以看看我的另一篇博客

    基于STM32 CubeMX+MDK5使用HAL库点亮流水灯,并使用逻辑分析仪观察管脚时序波形_歪比巴不的博客-CSDN博客

    • 时钟设置

    配置RCC使用外部时钟

    然后再来配置stm32的时钟树框图,将8改为72,回车确认 

    再按着顺序继续配置

    •  外设配置

     点击GPIO,选择自己用到的管脚,这里我的LED是连在PA8管脚,按键是连在PB8

    连接LED的管脚选择GPIO_Output

     对于LED对应的PA8管脚,默认设置即可,名字设为LED

    按键所连的管脚选择GPIO_EXIT

     

     对于按键对应的管脚,我这里让默认输入为0,选择pull down,选择上升沿触发

     使能对应的外部中断

     

    2.3 代码实操

    代码如下: 

    void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
    {
    		for(long i = 1;i<72000;i++){}; //消除抖动
    		if(HAL_GPIO_ReadPin(KEY_GPIO_Port,KEY_Pin)==1)
    		{
    			HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin);
    		}
    	__HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin);
    }
    

    在如图位置粘贴代码

    2.4 硬件连接

    LED短脚接地,长脚接PB8,按键一端接3.3V,一端接PB8

    LED短脚——GND

    LED长脚——PA8

    按键一端——3.3V

    按键另一端——PB8

    2.5 运行效果

     

    三、STM32CubeMX中断串口通信

    3.1 项目内容

    完成一个STM32的USART串口通讯程序,要求:
    1)设置波特率为115200,1位停止位,无校验位;
    2)STM32系统给上位机(win10)连续发送“hello windows!”。win10采用“串口助手”工具接收。

    3.2 工程设置 

    由于新工程配置大多如上方led灯示例,所以以下只讲述不同之处

    USART1中的Mode选择Asynchronous

     使能中断

    3.3 代码实操

    添加存放数据的数组 

    uint8_t a[]="Hello windows!\n";
    

     添加回转函数

    void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
    {
    		HAL_UART_Transmit_IT(&huart1, a, sizeof(a));
    }
    
    

    在主函数中添加中断调用 

    HAL_UART_Transmit_IT(&huart1, a, sizeof(a));
    

    3.4 效果展示

     

     四、参考文献

    中断详解(一)——基本概念_Windeal-CSDN博客_中断概述什么是中断    中断通常被定义为一个事件,该事件能够改变处理器执行指令的顺序。这样的事件与 CPU 芯片内外部硬件电路产生的电信号相对应。    中断分为同步中断和异步中断。    同步中断——同步中断是当指令执行时由 控制单元产生的,之所以称为同步,是因为只有在一条指令终止执行后 CPU 才会发出中断    异步中断——异步中 断是由其他硬件设备依照https://blog.csdn.net/windeal3203/article/details/44588205?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163608715316780262593935%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=163608715316780262593935&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-8-44588205.pc_search_result_cache&utm_term=%E4%B8%AD%E6%96%AD%E5%9F%BA%E7%A1%80%E4%BB%8B%E7%BB%8D&spm=1018.2226.3001.4187


    【STM32】HAL库 STM32CubeMX教程四---UART串口通信详解_Z小旋-CSDN博客_hal_uart_transmit前言:今天我们学习STM32CubeMX串口的操作,以及HAL库串口的配置,我们会详细的讲解各个模块的使用和具体功能,并且基于HAL库实现Printf函数功能重定向,UART中断接收,本系列教程将HAL库与STM32CubeMX结合在一起讲解,使您可以更快速的学会各个模块的使用所用工具:1、芯片:STM32F407ZET62、STM32CubeMx软件3、IDE: M...https://blog.csdn.net/as480133937/article/details/99073783

    展开全文
  • 改进系统的结构,开发系统的并行性 并行:包含同时性和并发性两方面。 同时性指两个或多个事件在同一时刻发生,并发性指两个或多个事件在同一时间段发生。 在同一时刻或同一时间段内完成两种或两种以上性质相同或...

    目录

    一、指令流水

    1、指令流水原理

    2、影响流水线性能的因素

    (1)结构相关

    (2)数据相关

    (3)控制相关

    3、流水线性能

    (1)吞吐率

    (2)加速比

    (3)效率

    4、流水线的多发技术

    (1)超标量技术

    (2)超流水线技术

    (3)超长指令字技术

    5、流水线结构

    (1)指令流水线结构

    (2)运算流水线

    二、中断系统

    一)中断系统概述

    1、引起中断的各种因素

    2、中断系统需要解决的问题

    二)中断请求标记和中断判优逻辑

    1、中断请求标记

    2、中断判优逻辑

    三)中断服务程序入口地址的寻找

    1、硬件向量法

    2、软件查询法

    四)中断响应

    1、响应中断的条件

    2、响应中断的时间

    3、中断隐指令

    五)保护现场和恢复现场

    六)中断屏蔽技术

    1、多重中断的概念

    2、实现多重中断的条件

    3、屏蔽技术

    4、多重中断的断点保护


    一、指令流水

    指令流水作用

    • 提高器件的性能
    • 改进系统的结构,开发系统的并行性

    并行:包含同时性并发性两方面。

    同时性指两个或多个事件在同一时刻发生,并发性指两个或多个事件在同一时间段发生。

    在同一时刻或同一时间段内完成两种或两种以上性质相同或不同的功能,只要在时间上互相重叠,就存在并行性。

    并行性体现在不同等级上。通常分为4个级别:作业级或程序级、任务级或进程级、指令之间级和指令内部级。前两级为粗粒度,又称为过程级;后两级为细粒度,又称为指令级

    粗粒度并行性一般用算法实现细粒度并行性一般用硬件实现

    粗粒度并行性是在多个处理机上分别运行多个进程,由多台处理机合作完成一个程序;

    细粒度并行性是指在处理机的操作级和指令级的并行性,其中指令的流水作业就是一项重要技术。

    1、指令流水原理

    把指令的处理过程分为取指令执行指令两个阶段,在不采用流水技术的计算机里,取指令和执行指令是周而复始地出现,各条指令按顺序串行执行的。

    指令的串行执行
     
     
    取指令 取指令部件 完成 总有一个部件 空闲
     
    指令的二级流水
     
     
    取指 执行 阶段时间上 完全重叠, 指令周期 减半 速度提高 1
     

    存在两个原因使得执行效率加倍是不可能的:

    • 指令的执行时间 > 取指时间,因此取指阶段可能要等待一段时间,也即存放在指令部件缓冲区的指令还不能立即传给执行部件,缓冲区不能空出。
    • 当遇到条件转移指令时,下一条指令是不可知的。因为必须等到执行阶段结束后,才能获知条件是否成立,从而决定下条指令的地址,造成时间损失。

    通常为了减少时间损失,采用猜测法,即当条件转移指令从取指阶段进入执行阶段时,指令部件仍按顺序预取下一条指令。

    这样如果条件不成立,转移没有发生,则没有时间损失;若条件成立,转移发生,则所取的指令必须丢掉,并再取新的指令。

    可将指令的处理过程分解为更细的几个阶段:

    1. 取指(FI):从存储器取出一条指令并暂时存入指令部件的缓冲区。
    2. 指令译码(DI):确定操作性质和操作数地址的形成方式。
    3. 计算操作数地址(CO):计算操作数的有效地址。
    4. 取操作数(FO):从存储器中取操作数。(若操作数在寄存器中则无须此阶段)
    5. 执行指令(EI):执行指令所需的操作,并将结果存于目的位置(寄存器中)。
    6. 写操作数(WO):将结果存入存储器

    指令的六级流水示例:

    2、影响流水线性能的因素

    在流水过程中会出现三种相关,使流水线不断流实现起来很困难,即结构相关、数据相关、控制相关

    结构相关:当多条指令进入流水线后,硬件资源满足不了指令重叠执行的要求时产生的。

    数据相关:指令在流水线中重叠执行时,当后继指令需要用到前面的执行结果时发生的。

    控制相关:当流水线遇到分支指令和其他改变PC值的指令时引起的。

    假设流水线由5段组成,它们分别是取指令(IF)、指令译码/读寄存器(ID)、执行/访存有效地址计算(EX)、存储器访问(MEM)、结果写回寄存器(WB)

    (1)结构相关

    结构相关是当指令在重叠执行过程中,不同指令争用同一功能部件产生资源冲突时产生的,故又有资源相关之称。

    解决冲突的方法

    1. 让流水线在完成前一条指令对数据的存储器访问时,暂停(一个时钟周期)取后一条指令的操作。
    2. 另一种方法是设置两个独立的存储器分别存放操作数和指令,以免取指令和取操作数同时进行时互相冲突,使取某条指令和去另一条指令的操作数实现时间上的重叠。

    (2)数据相关

    数据相关是流水线中的各条指令因重叠操作,可能改变对操作数的读写访问顺序,从而导致了数据相关冲突。

    解决数据相关的方法

    1. 采用后推法,即遇到数据相关时,就停顿后继指令的运行,直至前面指令的结果已经生成。
    2. 另一种解决方法是采用定向技术,又称为旁路技术相关专用通路技术。其主要思想是不必待某条指令的执行结果送回到寄存器后,再从寄存器中取出该结果,作为下一条指令的源操作数,而是直接将执行结果送到其他指令所需要的地方。

    根据指令间对同一寄存器读和写操作的先后次序关系,数据相关冲突可分为写后读相关(RAW)、读后写相关(WAR)、写后写相关(WAW)

    上述三种数据相关在按序流动的流水线中,只可能出现RAW相关。

    非按序流动的流水线中,由于允许后进入流水线的指令超过先进入流水线的指令而先流出流水线,则既可能发生RAW相关,还可能发生WAR和WAW相关。

    (3)控制相关

    控制相关主要是由转移指令引起的。

    当转移发生时,将使流水线的连续流动受到破坏。当执行转移指令时,根据是否发生转移,它可能将程序计数器PC内容改变成转移目标地址,也可能只是使PC加上一个增量,指向下一条指令地址。

    解决控制相关

    1. 可以采用尽早判别转移是否发生,尽早生成转移目标地址;
    2. 预取转移成功或不成功两个控制流方向上的目标指令;
    3. 加快和提前形成条件码;
    4. 提高转移方向的猜准率等方法。

    3、流水线性能

    流水线性能通常用吞吐率、加速比、效率3项指标来衡量。

    (1)吞吐率

    在指令级流水线中,吞吐率是指单位时间内流水线所完成指令或输出结果的数量。吞吐率又有最大吞吐率实际吞吐率之分。

    最大吞吐率是指流水线在连续流动达到稳定状态后所获得的吞吐率。对于m段的指令流水线而言,若各段的时间均为Δt,则最大吞吐率为

    流水线仅在连续流动时才可达到最大吞吐率。实际吞吐率总是小于最大吞吐率。

    实际吞吐率是指流水线完成n条指令的实际吞吐率。实际吞吐率为

    (2)加速比

    流水线的加速比是指m段流水线的速度与等功能的非流水线的速度之比。加速比Sp为

    (3)效率

    效率是指流水线中各功能段的利用率。通常用流水线各段处于工作时间的时空区与流水线中各段总的时空区之比来衡量流水线的效率。

    由于流水线有 建立时间 排空时间, 因此各功能段的 设备不可能一直 处于 工作 状态。
     

    4、流水线的多发技术

    (1)超标量技术

    超标量技术是指在每个时钟周期内可同时并发多条独立指令,即以并行操作方式将两条或两条以上指令编译并执行

    要实现超标量技术,要求处理机中配置多个功能部件和指令译码电路,以及多个寄存器端口,以便能实现同时执行多个操作。

    (2)超流水线技术

    超流水线技术是将一些流水线寄存器插入到流水线段中,好比将流水线再分段。

    (3)超长指令字技术

    超长指令字技术(VLIW)和超标量技术都是采用多条指令在多个处理部件中并行处理的体系结构,在一个时钟周期内能流出多条指令。

    当超标量的指令来自同标准的指令流,VLIW则是由编译程序在编译时挖掘出指令间潜在的并行性后,把多条能并行操作的指令组合成一条具有多个操作码字段的超长指令,由这条超长指令控制VLIW机中多个独立工作的功能部件,由每一个操作码字段控制一个功能部件,相当于同时执行多条指令。

    VLIW较超标量具有更高的并行处理能力,但对优化编译器的要求更高,对Cache的容量要求更大。

    5、流水线结构

    (1)指令流水线结构

    指令流水线是将指令的整个执行过程用流水线进行分段处理.

    典型的指令执行过程分为“取指令——指令译码——形成地址——取操作数——执行指令——回写结果——修改指令指针”这几个阶段。

    指令流水线对机器性能的改善程度取决于把处理过程分解为多少个相等的时间段数。

    (2)运算流水线

    流水线相邻两段在执行不同的操作,因此在相邻两段之间必须设置锁存器或寄存器,以保证在一个时钟周期内流水线的输入信号不变。这一指导思想也适用于指令流水。

    二、中断系统

    一)中断系统概述

    1、引起中断的各种因素

    (1)人为设置的中断

    这种中断一般称为自愿中断,因为它是程序中人为设置的,故一旦机器执行这种人为中断,便自愿停止现行程序而转入中断处理。

    (2)程序性事故

    如定点溢出、浮点溢出、操作码不能识别、除法中出现“非法”等,这些都属于由程序设计不周而引起的中断。

    (3)硬件故障

    (4)I/O设备

    I/O设备被启动以后,一旦准备就绪,便向CPU发出中断请求。

    (5)外部事件

    用户通过键盘来中断现行程序属于外部事件中断。

    通常将能引起中断的各个因素称为中断源

    中断源可分为两大类:

    一类为不可屏蔽中断,这类中断CPU不能禁止,如电源掉电;

    另一类为可屏蔽中断,对可屏蔽中断源的请求,CPU可根据该中断源是否被屏蔽来确定是否给予响应。若未屏蔽则能响应;若已被屏蔽,则CPU不能响应。

    2、中断系统需要解决的问题

    中断系统需解决的问题

    (1) 各中断源 如何 CPU 提出请求

    (2) 各中断源 同时 提出 请求 怎么办 ?

    (5) 如何 寻找入口地址

    (4) 如何 保护现场

    (3) CPU 什么 条件、什么 时间、以什么 方式响应中断

    (6) 如何 恢复现场,如何 返回

    (7) 处理中断的过程中又 出现新的中断 怎么办 ?

    二)中断请求标记和中断判优逻辑

    1、中断请求标记

    为了判断是哪个中断源提出的请求,在中断系统中必须设置中断请求标记触发器,简称中断请求触发器,记作INTR。当其状态为“1”时,表示中断源有请求。

    这种触发器可集中设在CPU内,组成一个中断请求标记寄存器。

    中断请求触发器越多,说明计算机处理中断的能力越强。这些触发器既可以集中在CPU的中断系统内, 也可以分散到各个中断源中。

    2、中断判优逻辑

    任何一个中断系统,在任一时刻,只能响应一个中断源的请求。当某一时刻多个中断源提出中断请求时,中断系统必须按其优先顺序予以响应,这称为中断判优

    各中断源的优先顺序是根据该中断源若得不到及时响应,致使机器工作出错的严重程度而定的。

    中断判优可用硬件实现,也可用软件实现。

    (1)硬件排队

    硬件排队又可分为两种。

    一种为链式排队器,对应中断请求触发器分散在各个接口电路中的情况,每一个接口电路中都设有一个非门和一个与非门,它们犹如链条一样串接起来。

    另一种排队器设在CPU内,当最高优先级的中断源有请求时INTR1=1,就可封住比它优先级低的中断源的请求。

    (2)软件排队

    软件排队是通过编写查询程序实现的。程序按中断源的优先等级,从高至低逐级查询各中断源是否有中断请求,这样就可以保证CPU首先响应级别高的中断源的请求。

    三)中断服务程序入口地址的寻找

    通常有两种方法寻找入口地址:硬件向量法软件查询法

    1、硬件向量法

    硬件向量法就是利用硬件产生向量地址,再由向量地址找到中断服务程序的入口地址。向量地址由中断向量地址形成部件产生,这个电路可分散设置在各个接口电路中,也可设置在CPU内。

    由向量地址寻找中断服务程序的入口地址通常采用两种办法。

    一种在向量地址内存放一条无条件转移指令,CPU响应中断时,只要将向量地址送至PC,执行这条指令,便可无条件转向打印机服务程序的入口地址200。

    另一种是设置向量地址表,该表设在存储器内,存储单元的地址为向量地址,存储单元的地址为入口地址。只要访问向量地址所指示的存储单元,便可获得入口地址。

    硬件向量法寻找入口地址速度快。

    2、软件查询法

    用软件寻找中断服务程序入口地址的方法称为软件查询法。当查到某一中断源有中断请求时,接着安排一条转移指令,直接指向此中断源的中断服务程序入口地址,机器便能自动进入中断处理。

    这种方法不涉及硬件设备,但查询时间较长

    四)中断响应

    1、响应中断的条件

    当EINT=1,且有中断请求(即中断请求标记触发器INTR=1)时,CPU可以响应中断。

    2、响应中断的时间

    之所以CPU在指令的执行周期后进入中断周期,是因为CPU在执行周期的结束时,统一向所有中断源发出中断查询信号,只有此时CPU才能获知哪个中断源有请求。

    可在指令执行过程中设置若干个查询断点,CPU在每个“查询断点”时刻均发中断查询信号,以便发现有中断请求,CPU便可及时响应。

    3、中断隐指令

    (1)保护程序断点

    保护程序断点就是要将当前程序程序计数器PC的内容保存到存储器中。它可以存在存储器的特定单元内,也可以存入堆栈。

    (2)寻找中断服务程序的入口地址

    由于中断周期结束后进入下条指令(即中断服务程序的第一条指令)的取指周期,因此在中断周期内必须设法找到中断服务程序的入口地址。

    两种方法寻找入口地址

    1. 在中断周期内,将向量地址送至PC(对应硬件向量法),使CPU执行下一条无条件转移执行,转至中断服务程序入口地址。
    2. 在中断周期内,将软件查询入口地址的程序(又称中断识别程序)首地址送至PC,使CPU执行中断识别程序,找到入口地址(对应软件查询法)。

    (3)关中断

    CPU进入中断周期,意味着CPU响应了某个中断源的请求,为了确保CPU响应后所需做的一系列操作不至于又受到新的中断请求的干扰,在中断周期内必须自动关中断,以禁止CPU再次响应中断请求。

    当进入中断周期时,INT为“1”状态,触发器原端输出有一个正跳变,经反相后产生一个负跳变,使EINT置“0”,即关中断

    保护断点寻找入口地址关中断这些操作都是在中断周期内由一条中断隐指令完成的。

    中断隐指令:即在机器指令系统中没有的指令,它是CPU 在中断周期内由硬件自动完成的一条指令。

    五)保护现场和恢复现场

    保护现场:应该包括保护程序断点保护CPU内部各寄存器内容的现场两个方面。程序断点的现场由中断隐指令完成,各寄存器内的现场可在中断服务程序中由用户(或系统)用机器指令编程实现。

    恢复现场:是指在中断返回前,必须将寄存器的内容回复到中断处理前的状态,这部分工作也由中断服务程序完成。

    六)中断屏蔽技术

    1、多重中断的概念

    当CPU正在执行某个中断服务程序时,另一个中断源又提出了新的中断请求,而CPU又响应了这个中断请求,暂时停止正在运行的服务程序,转去执行新的中断服务程序,这称为多重中断,又称为中断嵌套

    如果CPU对新的请求不予响应,待执行完当前的服务程序后再响应,即为单重中断

    2、实现多重中断的条件

    (1)提前设置“开中断”指令

    多重中断“开中断”指令的位置前于单重中断,从而保证了多重中断允许出现中断嵌套。

    (2)优先级别高 的中断源 有权中断优先级别低 的中断源

    为了保证级别低的中断源不干扰级别高的中断源的中断处理过程,可采用屏蔽技术。

    3、屏蔽技术

    (1)屏蔽触发器与屏蔽字

    对应每个中断请求触发器就有一个屏蔽触发器,将所有屏蔽触发器组合在一起,便构成一个屏蔽寄存器,屏蔽寄存器的内容称为屏蔽字

    屏蔽字与中断源的优先级别是一一对应的。

    在中断服务程序中设置适当的屏蔽字,能起到对优先级别不同的中断源的屏蔽作用

    (2)屏蔽技术可改变优先等级

    优先级包含响应优先级处理优先级

    响应优先级是指CPU响应各中断源请求的优先次序,这种次序往往是硬件线路已设置好的,不便于改动。

    处理优先级是指CPU实际对各中断源请求的处理优先次序。如果不采用屏蔽技术,响应的优先次序就是处理的优先次序。

    在不改变CPU响应中断的次序下,通过改变屏蔽字可以改变CPU处理中断的次序。

    (3)屏蔽技术的其他作用

    屏蔽技术还能给程序控制带来更大的灵活性。

    4、多重中断的断点保护

    中断系统对断点的保存都是在中断周期内由中断隐指令实现的,对用户是透明的。

    断点可以保存在堆栈中,由于堆栈先进后出的特点,出栈时按相反顺序便可准确返回到程序的间断处。

    断点也可保存在特定的存储单元内,例如约定一律将程序断点存至主存的0号地址单元内。在中断服务程序中的开中断指令之前,必须先将0地址单元的内容转存至其他地址单元中,才能真正保存每一个断点。

    展开全文
  • 一、实验目的和要求 ...实验原理及实验步骤 实验内容1: 串行通信原理: 串行端口的本质功能是作为CPU和串行设备间的编码转换器。当数据从CPU经过串行端口发送出去时,字节数据转换为串行的位。在接
  • 2、一个完整的微机系统由(硬件)和(软件)两大部分组成。3、程序状态寄存器的作用是用来保存程序运行过程中的各种状态信息。若累加器A中的数据为01110010B,则PSW中的P=(0)。4、若MCS-51单片机采用12MHz的晶振,它的...
  • 计算机组成原理中断实验实验五 深 圳 大 学 实 验 报 告 课程名称: 计算机组成与设计 实验项目名称: 中断实验 学院: 计算机与软件 专业: 软件工程 指导教师: 胡庆彬 报告人: 学号: 班级: 实验时间: 2012-6-...
  • 微机原理实验---中断控制实验深 圳 大 学 实 验 报 告课程名称: 微机计算机设计实验项目名称: 8259 中断控制实验学院: 信息工程学院专业: 电子信息工程指导教师:报告人: 学号: 2009100000班级: <...
  • 前言上篇 计算机组成原理第1章 计算机基础知识1.1 数制1.2 逻辑代数(布尔代数)1.3 逻辑电路1.4 二进制数的运算加法电路第2章 微型...微型计算机的基本工作原理3.1 微型计算机结构的简化模型3.2 模型机指令系统3...
  • 什么是操作系统,操作系统是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分配,以提供给用户和它软件方便的接口和环境,是计算机系统中最基本的系统软件,总结一下就是: ...
  • [题型]:单选[分数]:21.批处理最主要的一个缺点是( )。A.用户无法与程序交互B.没有实现并发处理C.CPU的利用率较低D.一次只能执行一个程序答案:A2.磁盘空闲块常用的组织...A.空闲块连续B.空闲块索引C....A....批处理系统中...
  • stm32最小系统原理及结构组成

    千次阅读 2020-12-20 14:03:15
    相关推荐单通道选择:有16个多路通道。...发表于 2018-04-10 09:15•12次阅读 本连载将以STM32F103为例为学习嵌入式系统开发搭建一个基础知识框架。 初识单片机系列将会介绍单...发表于 2018-04-08 10:00•30次阅读 ...
  • 串口通信的原理串口通信(SerialCommunicaTIons)的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。它很简单并且能够实现...
  • 嵌入式系统原理及应用课后习题答案

    千次阅读 多人点赞 2021-09-03 16:20:02
    嵌入式系统原理及应用-基于ARM Cortex-M3内核的STM32F103系列微控制器第1篇 系统篇第1章嵌入式系统概述第2章嵌入式系统开发第2篇 内核篇第3章ARMCortex-M3处理器第4章基于ARMCortex-M3的STM32微控制器第3篇 片内外设...
  • 第一章 TEC-XP计算机组成原理实验系统概述1.1 TEC-XP教学计算机系统系列和总体组成概述TEC-XP是适用于计算机组成原理系统结构的实验系统,主要用于计算机组成原理和计算机系统结构等课程的硬件教学实验,同时还...
  • 第一章计算机基础知识1.1概述一、计算机的发展过程二、计算机系统主要性能指标三、计算机的应用领域1.2计算机中数的表示一、进位计数制二、计算机为什么要使用二进制三、数制间的软件四、二进制编码五、带符号数的...
  • 《微型计算机原理及接口技术第七章部分习题答案林志贵主编》由会员分享,可在线阅读,更多相关《微型计算机原理及接口技术第七章部分习题答案林志贵主编(7页珍藏版)》请在人人文库网上搜索。1、7-1、I/O接口的信号有...
  • 内容简介本书是教育部高等学校自动化专业教学指导分委员会立项的“工程应用型自动...本书从介绍微型计算机的基本结构和工作原理入手,介绍单片微型计算机(单片机)的构成、各个模块的工作过程、接口原理、应用电路设...
  • 《计算机组成原理 中断实验 实验五》由会员分享,可在线阅读,更多相关《计算机组成原理 中断实验 实验五(6页珍藏版)》请在技术文库上搜索。1、深深 圳圳 大大 学学 实实 验验 报报 告告 课程名称:课程名称: ...
  • 文章目录第八章 中断系统8.1 中断的基本概念8.1.1 中断概念的引入描述中断方式示意(以输入中断为例)**中断**的定义8.1.2 中断及中断分类中断的分类8.1.3 中断类型码中断类型码中断向量中断向量表中断向量表的...
  • 32位微机原理及接口技术语音编辑锁定讨论...中文名32位微机原理及接口技术32位微机原理及接口技术图书简介编辑语音32位微机原理及接口技术[1]主 编:何苏勤、郭青副主编:马静 冯晓东 韩阳 金翠云书代号:487700I S ...
  • 第1章 单片机和嵌入式系统基础知识1.1 嵌入式系统的基本概念1.1.1 嵌入式系统的主要特点1.1.2 嵌入式技术的构成1.28 051微控制器的内部架构1.38 051单片机硬件开发平台1.4 运行第一个8051单片机程序1.58 051单片机...
  • TW-105A型计算机组成原理、微机接口及应用综合实验台一、概述本产品是计算机组成原理及微机接口及应用的综合实验台,规格:160×75×78cm。二者组合在一个实验台上,提高了规划化程度,管理水平,资源共享,节省资金...
  • 单片机原理及应用

    千次阅读 2021-05-24 05:53:56
    魏鸿磊主编的这本《单片机原理及应用》是根据 作者多年从事单片机软、硬件开发和教学实践经验, 为满足高等院校非信息类专业本科生“单片机原理及 应用”课程教学的需要而编写。本书在编写时力求通 俗易懂,全书共分...
  • 微机基本工作原理

    2021-06-23 10:58:00
    微机基本工作原理1、计算机系统的组成微型计算机由硬件系统和软件系统组成。硬件系统:指构成计算机的电子线路、电子元器件和机械装置等物理设备,它包括计算机的主机外部设备。软件系统:指程序有关程序的技术...
  • 《单片机原理及应用A实验报告-UART串口通信》由会员分享,可在线阅读,更多相关《单片机原理及应用A实验报告-UART串口通信(10页珍藏版)》请在人人文库网上搜索。1、UART串口通信一、实验目的1、学习实验系统的基本...
  • 软件平台:Keil 5 采用HAL库+FreeRTOS系统 初始化UART配置 void DEBUG_USART_Config(void) { GPIO_InitTypeDef GPIO_InitStruct; RCC_PeriphCLKInitTypeDef RCC_PeriphClkInit; /* 配置串口2时钟源*/ RCC_...
  • 微机原理接口技术 地点: 时间: 年 月 日学生姓名班级学号成绩组别同组姓名仪器编号实验项目系统认识实验指导教师实验目的程序的输入与修改实验要求掌握TDN86/51教学系统的基本操作实验环境TDN86/51教学实验系统...
  • 由图可以看到,两个信号的 DB9 接口,通过串口信号线连接在一起,信号线是使用的 RS-232 标准传输数据信号。但是 RS-232 标准信号不能直接被控制器识别使用,所以我们需要使用一个电平转换芯片转换成 TTL 标准信号,...
  • 本文所描述的为Cortex-A7中断系统 简述 中断是什么? 中断(Interrupt)是指处理器接收到来自硬件或软件的信号,提示发生了某个事件,应该被注意,这种情况就称为中断。 通常,在接收到来自外围硬件(相对于中央处理...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 35,045
精华内容 14,018
关键字:

中断系统原理及串口工作原理