精华内容
下载资源
问答
  • (1)程序查询、程序中断方式的数据传送主要依赖软件,DMA 主要依赖硬件。 (2)程序查询、程序中断传送数据的基本单位为字或字节,DMA 为数据块。 (3)程序查询方式传送时,CPU 与 I/O 设备串行工作;程序中断方式...

    (1)程序查询、程序中断方式的数据传送主要依赖软件,DMA 主要依赖硬件。
    (2)程序查询、程序中断传送数据的基本单位为字或字节,DMA 为数据块。
    (3)程序查询方式传送时,CPU 与 I/O 设备串行工作;程序中断方式时,CPU 与 I/O设备并行工作,现行程序与 I/O 传送串行进行;DMA 方式时,CPU 与 I/O 设备并行工作, 现行程序与 I/O 传送并行进行。
    (4)程序查询方式时,CPU 主动查询 I/O 设备状态;程序中断及 DMA 方式时CPU被动接受 I/O 中断请求或 DMA 请求。
    (5)程序中断方式由于软件额外开销时间比较大,因此传输速度最慢;程序查询方式软件额外开销时间基本没有,因此传输速度比中断快;DMA 方式基本由硬件实现传送,因此速度最快;
    注意:程序中断方式虽然 CPU 运行效率比程序查询高,但传输速度却比程序查询慢。
    (6)程序查询接口硬件结构最简单,因此最经济;程序中断接口硬件结构稍微复杂一些,因此较经济;DMA 控制器硬件结构最复杂,因此成本最高;
    (7)程序中断方式适用于中、低速设备的 I/O 交换;程序查询方式适用于中、低速实时处理过程;DMA 方式适用于高速设备的 I/O 交换;

    展开全文
  • 中断和DMA方式可以用于特殊场景,比如其它外设占据DMA负担比较重而CPU又比较清闲的时候。 1. STM32F429的AD转换最高12bit 12位分辨率意味着我们采集电压的精度可以达到:Vref /4096。 采集电压 = Vref * ADC_DR ...

    非中断和非DMA方式可以用于特殊场景,比如其它外设占据DMA负担比较重而CPU又比较清闲的时候。
    1. STM32F429的AD转换最高12bit
    12位分辨率意味着我们采集电压的精度可以达到:Vref /4096。
    采集电压 = Vref * ADC_DR / 4096;
    Vref:参考电压
    ADC_DR:读取到ADC数据寄存器的值
    一般使用3.3V为参考电压,则采集到的电压 = ADC_DR*3.3/4096 。
    2. STM32F4的ADC转换不需要做程序校准。
    这在HAL库里也可以看出来,官方没有HAL_ADCEx_Calibration_Start();这个校准函数。
    3. STM32F4的ADC时钟最大36M。
    STM32F1为14M,STM32F4快了2倍多。
    4. 两个以上通道必须开启scan扫描模式。
    ADC_ScanConvMode = ENABLE。
    因为转换结果都在同一个寄存器里,所以单个通道转换完成后必须读走数据再启动转换下一个通道。
    5. 不使用DMA不需要开连续方式。
    ADC_ContinuousConvMode = DISABLE。
    连续转换ENABLE后,也就是只需要启动(触发)转换一次,后面就不用再次启动(触发)就可以连续工作了。
    单次转换DISABLE:也就是根据一次转换完后需要再次启动(触发)才能工作。
    6. 触发方式一般选用软件触发。
    7. 对齐方式一般选右对齐。
    8. 通道数就是你要转换的通道数量
    通道数要和后面的规格组相符合。
    9. 设置规则组通道
    下面例子是设置 channel5 和 channel8连个通道,开启触发AD转换后,通道5是首先转换的,转换完成后,再次触发转换,就会自动转换通道8。一轮完成后,不需要STOP ADC,可以直接再次触发转换,此时又回到了转换通道5,开始新的循环。

       /**Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time.
       */
     sConfig.Channel = ADC_CHANNEL_5;
     sConfig.Rank = 1;
     sConfig.SamplingTime = ADC_SAMPLETIME_15CYCLES;
     if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
     {
       _Error_Handler(__FILE__, __LINE__);
     }
    
       /**Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time.
       */
     sConfig.Channel = ADC_CHANNEL_8;
     sConfig.Rank = 2;
     if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
     {
       _Error_Handler(__FILE__, __LINE__);
     }
    

    10. 规则组间断模式配置。
    如果不使用DMA,这里必须要配置为1,也就是说每触发一次转换一条通道。否则,结果寄存器里只会是本组最后一次转换的通道电压值。具体可以看下图: 在这里插入图片描述11. 其他ADC的基础配置见下面程序代码。
    例子中单片机型号为STM32F429VIT6,代码全部经过实测,通过算法滤波,转换精度足够平常使用。而且有人提出多个通道之间会有干扰,此例未发现。选用的未PA5(ADC channel5)和PB0(ADC channel8)两个通道。

    一、ADC配置

    /* ADC1 init function */
    void MX_ADC1_Init(void)
    {
      ADC_ChannelConfTypeDef sConfig;
    
        /**Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion)
        */
      hadc1.Instance = ADC1;
      hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV2;
      hadc1.Init.Resolution = ADC_RESOLUTION_12B;
      hadc1.Init.ScanConvMode = ENABLE;
      hadc1.Init.ContinuousConvMode = DISABLE;
      hadc1.Init.DiscontinuousConvMode = ENABLE;
      hadc1.Init.NbrOfDiscConversion = 1;
      hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
      hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
      hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
      hadc1.Init.NbrOfConversion = 2;
      hadc1.Init.DMAContinuousRequests = DISABLE;
      hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
      if (HAL_ADC_Init(&hadc1) != HAL_OK)
      {
        _Error_Handler(__FILE__, __LINE__);
      }
    
        /**Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time.
        */
      sConfig.Channel = ADC_CHANNEL_5;
      sConfig.Rank = 1;
      sConfig.SamplingTime = ADC_SAMPLETIME_15CYCLES;
      if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
      {
        _Error_Handler(__FILE__, __LINE__);
      }
    
        /**Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time.
        */
      sConfig.Channel = ADC_CHANNEL_8;
      sConfig.Rank = 2;
      if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
      {
        _Error_Handler(__FILE__, __LINE__);
      }
    
    }
    
    void HAL_ADC_MspInit(ADC_HandleTypeDef* adcHandle)
    {
    
      GPIO_InitTypeDef GPIO_InitStruct;
      if(adcHandle->Instance==ADC1)
      {
      /* USER CODE BEGIN ADC1_MspInit 0 */
    
      /* USER CODE END ADC1_MspInit 0 */
        /* ADC1 clock enable */
        __HAL_RCC_ADC1_CLK_ENABLE();
    
        /**ADC1 GPIO Configuration
        PA5     ------> ADC1_IN5
        PB0     ------> ADC1_IN8
        */
        GPIO_InitStruct.Pin = GPIO_PIN_5;
        GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
        GPIO_InitStruct.Pull = GPIO_NOPULL;
        HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
    
        GPIO_InitStruct.Pin = GPIO_PIN_0;
        GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
        GPIO_InitStruct.Pull = GPIO_NOPULL;
        HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
    
      /* USER CODE BEGIN ADC1_MspInit 1 */
    
      /* USER CODE END ADC1_MspInit 1 */
      }
    }
    

    二、滤波算法处理

    uint16_t adc_values_ch5[14] = {0};
    uint16_t adc_values_ch8[14] = {0};
    
    /*进行单次AD转换,50ms超时*/
    uint32_t Perform_single_AD_conversion(void)
    {
    	HAL_ADC_Start(&hadc1);
    	HAL_ADC_PollForConversion(&hadc1, 50);
    	uint8_t i=255;
    	while (!HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc1), HAL_ADC_STATE_REG_EOC))
    	{
    		i--;
    		if (i ==0)
    		{
    			break;   //防止AD死循环
    		}
    	}
    	uint32_t ad_Temp = HAL_ADC_GetValue(&hadc1);
    	return ad_Temp;
    }
    
    /*对14次采样的电压按照从小到大进行排序*/
    void Sort_ADC_Values(uint16_t *adc_nums)
    {
    	int i, j, temp, isSorted;  
    	//优化算法:最多进行 n-1 轮比较
    	for(i=0; i<14-1; i++)
    	{
    		isSorted = 1;  //假设剩下的元素已经排序好了
    		for(j=0; j<14-1-i; j++)
    		{
    			if(adc_nums[j] > adc_nums[j+1])
    			{
    				temp = adc_nums[j];
    				adc_nums[j] = adc_nums[j+1];
    				adc_nums[j+1] = temp;
    				isSorted = 0;  //一旦需要交换数组元素,就说明剩下的元素没有排序好
    			}
    		}
    		if(isSorted) break; //如果没有发生交换,说明剩下的元素已经排序好了
    	}	
    }
    /*去掉2个最大值,2个最小值,剩余10个值求平均数*/
    uint16_t Find_Average_ADC_Values(uint16_t *adc_nums)
    {
    	uint16_t sum = 0;
    	for(uint8_t i=2; i<12; i++)
    	{
    		sum = sum + adc_nums[i];
    	}
    	return sum/10;
    }
    
    /*软件滤波求出ADC转换平均值*/
    uint16_t Software_filtering_ADC(uint16_t *adc_nums)
    {
    	uint16_t adc_avg = 0;
    	Sort_ADC_Values(adc_nums);
    	adc_avg = Find_Average_ADC_Values(adc_nums);
    	return adc_avg;
    }
    
    void Get_Two_Channel_ADC_Votage(void)  
    {  
    	float votage = 0.0;
    	for(uint8_t i=0; i<14; i++)
    	{
    		adc_values_ch5[i] = Perform_single_AD_conversion();
    		printf("\r\nadc_values_ch5[%d] = %d\r\n", i,adc_values_ch5[i]);
    		adc_values_ch8[i] = Perform_single_AD_conversion();
    		printf("\r\nadc_values_ch8[%d] = %d\r\n", i,adc_values_ch8[i]);
    	}
    	HAL_ADC_Stop(&hadc1);
    
    	votage = Software_filtering_ADC(adc_values_ch5)*3.3/4096;
    	printf("\r\nPA5采集电压: %f \r\n",votage);
    	
    	votage = Software_filtering_ADC(adc_values_ch8)*3.3/4096;
    	printf("\r\nPB0采集电压: %f \r\n",votage);	  
    }
    
    
    

    三、打印输出结果
    在main函数的主循环while里调用Get_Two_Channel_ADC_Votage(),即可输出打印结果。

    int main(void)
    {
      /* USER CODE BEGIN 1 */
    
      /* USER CODE END 1 */
    
      /* MCU Configuration----------------------------------------------------------*/
    
      /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
      HAL_Init();
    
      /* USER CODE BEGIN Init */
    
      /* USER CODE END Init */
    
      /* Configure the system clock */
      SystemClock_Config();
    
      /* USER CODE BEGIN SysInit */
    
      /* USER CODE END SysInit */
    
      /* Initialize all configured peripherals */
      MX_GPIO_Init();
      MX_DMA_Init();  
      MX_IWDG_Init();
      MX_ADC1_Init();
      MX_USART1_UART_Init();
      /* Infinite loop */
      /* USER CODE BEGIN WHILE */
      while (1)
      {
    	Get_Two_Channel_ADC_Votage();   
    	HAL_Delay(2000);	
      /* USER CODE END WHILE */
    
      /* USER CODE BEGIN 3 */	  
    	 HAL_IWDG_Refresh(&hiwdg);   //看门狗喂狗
      }
      /* USER CODE END 3 */
    }
    

    在这里插入图片描述

    展开全文
  • 一、DMA和程序中断两种方式的数据通路 二、DMA与主存交换数据的三种方式 1、停止CPU访问主存 只要外部设备要和内存进行数据交换,则在数据交换的过程中,从第一个数据开始,cpu就放弃了总线的控制权和内存的...

    1.1 DMA方式的特点

    一、DMA和程序中断两种方式的数据通路

     

    二、DMA与主存交换数据的三种方式

    1、停止CPU访问主存

    • 只要外部设备要和内存进行数据交换,则在数据交换的过程中,从第一个数据开始,cpu就放弃了总线的控制权和内存的访问,总线的控制权和内存访问权交给了DMA接口,从控制上说比较简单,适合大量数据传输。
    • 若传输过程中cpu内部指令缓冲器中有指令,或者指令已经被取到了cache,cpu还可以继续工作执行指令,如果没有指令可以执行,cpu就保持状态,所以未发挥cpu对主存的利用率

    2、周期挪用(周期窃取)

    如果DMA接口准备好了数据传输,那么通过申请建立总线使用权,占用一个或者几个内存访问周期,完成数据传输,在数据传输间隔或者数据准备阶段,DMA接口放弃总线占用和内存使用权

    DMA访问主存有三种可能

    • cpu此时不访存
    • cpu正在访存 cpu继续访问
    • cpu与DMA同时请求访存 DMA优先

    3、DMA和CPU交替访问

    • c1专供DMA访存
    • c2专供cpu访存
    • 不需要申请建立和归还总线的使用权

     

    1.2 DMA接口的功能和组成

    一、DMA接口功能

     

    1. 向CPU申请DMA传送
    2. 处理总线控制权的转交
    3. 管理系统总线、控制数据传送
    4. 确定数据传送的首地址和长度 修正传送过程中的数据地址和长度
    5. DMA传送结束时,给出操作完成信号

    二、DMA接口组成

    • 假设使用单总线结构
    • 要进行数据传输,cpu要告诉DMA接口传输地址是什么。也就是从内存那个地址进行存放和传输,所以需要一个地址寄存器
    • 要知道传输的数据量所以需要计数器,进行数据量计数,假设数据传入内存或输出,从低地址开始,而且编址单位相同,每完成一个输入输出,要对地址计算器进行修改,要给地址+1
    • WC(字数计数)假设采用补码方式,WC中保存的是-n,n是要传输数据数量,每传输一个,就+1
    • BR数据缓冲器,外部设备数据,要暂存在数据缓冲器当中
    • DAR设备地址寄存器,供设备选择电路使用,查看此次访问设备是不是接口当前连接的设备,是否由该DMA进行管理,将设备地址保存在寄存器当中;还可以保存柱面号,磁道号,扇区号。
    • AR通过地址线把要访问的内存地址送给主存,DMA接口接管了主存和总线
    • 数据线要给AR寄存器置值,传输的内存单元的厨师地址通过数据线进行设置,数据数量也通过数据线进行设置,设备地址也通过它进行设置
    • 外部设备和数据缓冲器直接相连
    • 输入输出过程需要通过DMA控制逻辑,控制在给定的时序发出给定的信号,例如DMA请求,DMA读写控制信号
    • 外部设备要进行DMA传输,要向DMA控制逻辑发出请求信号DREQ
    • DMA向CPU发出控制信号,DMA控制器要对设备给出应答信号
    • DMA控制器若要总线,通过总线向cpu发出总线使用请求信号,cpu发出应答信号由DMA控制器进行接收
    • 中断机构用于数据传输完后对后续的工作进行处理
    • 中断机构向cpu发出中断请求,cpu做中断传输后的处理

    1.3 DMA工作过程

    一、DMA传送过程

    1、预处理

    通过几条输入输出指令预置信息

    • 同志DMA控制逻辑传送方向(入/出)
    • 设备地址 DMA的DAR
    • 主存地址 DMA的AR
    • 传送字数 DMA的WC

    2、DMA传送过程示意

    3、数据的传送过程

    4、后处理

    • 检验送入主存的数是否正确
    • 是否继续使用DMA
    • 测试传送过程是否正确,错则转诊断程序
    • 中断服务程序完成

    二、DMA接口与系统的连接方式

    1、既有公共请求线的DMA请求

    总线进行仲裁采用串型连接的方法

    所有DMA接口共享一条请求线,请求线是送给cpu的,越靠近cpu的优先级越高

    2、独立的DMA请求

    排队工作在cpu内部进行

    三、DMA方式与程序中断方式的比较

    1.4 DMA接口的类型

    一、选择型

    从物理上,一个接口连接了多个设备,但在数据准备和数据传输过程中,实际上接口只能连接一个设备

    寄存器时序电路只有一套,某一个设备使用接口进行数据传输,cpu通过运行一条输入输出指令,对寄存器进行设置,设置成某一个设备要与主存进行数据交换所需要的值,那么其他设备就不能和主存之间再提出DMA请求不能进行数据交换了

    二、多路型

    在物理上连接多个设备,在逻辑上也可以连接多个设备,在真正进行数据传输时也只能有一个设备和内存之间进行数据传输,但是数据准备阶段,可以有多个设备同时进行数据准备

    通道是一种小型DMA处理器,也是一种DMA接口,一个通道下面包含若干子通道,每个子通道都有主存地址寄存器、设备地址寄存器、字计数器,这些子通道可以控制多个设备,设备进行数据传输时,cpu要控制设备进行输入输出,要对相应子通道当中的寄存器进行设置,设置后,继续执行程序,碰到下一条输入输出指令,若两设备使用不同子通道,那对其他的子通道中寄存器进行设置,外部设备再之后的时间中进行数据准备,多个设备并行进行数据准备。

    外部设备准备好后,通过子通道向通道提出数据传输请求,此时不同设备数据传输为串型

    三、多路型DMA接口工作原理

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    展开全文
  • 【建议收藏】 计算机组成原理—DMA、...既然I/O与主存有这么多种方式,那么DMA -----中断方式–通道方式各自有什么区别之处呢? I/O设备与主机交换信息的几种控制方式 程序查询方式 DMA方式 I/O通道方式 中断查询方式

    【建议收藏】 计算机组成原理—DMA、中断控制、I/O之间的联系与区别

    本篇文章主要是记录我对于计算机组成原理中所遇到的一些疑问和疑惑的记录-----主要用于考研的记录

    本章一共有几个知识点比较懵:

    ​ 1.为什么要引入这些东西?

    ​ 1.DMA到底是什么东西–书上大概能看懂,但是还是比较模糊

    ​ 2.既然I/O与主存有这么多种方式,那么DMA -----中断方式–通道方式各自有什么区别之处呢?

    I/O设备与主机交换信息的几种控制方式

    1. 程序查询方式
    2. DMA方式
    3. I/O通道方式
    4. 中断查询方式

    为什么要引入DMA,中断,I.O通道

    原因:

    早期计算机的I/O种类比较少,通常与主存交换信息都是通过CPU,而现代计算机的I/O种类较多,如果使用这种方式会使CPU的效率大大降低,如果想要提高资源利用率,那么我们就必须引入一些机制,来让整个机器工作效率变高。而不同的机制对于cpu资源利用率的效率也不同,而且适用的机型也不太一样,比如:通道结构的适合大型机,接口,DMA,适合小型和微小型机。

    通道、DMA、中断三种基本I/O方式均为外围设备和内存之间的输入/输出控制方式
    

    程序查询方式

    程序查询方式:查询查询,很明显就是通过一种机制取查询i/o设备是否需要进行与主机进行交换信息,那么这时候就需要我们的<font color="#ddd000>CPU通过程序不断的去进行查询,看I/O是否做好准备,从而控制I/O与主机交换信息。

    了解了基本的机制以后,那么我们就需要探讨他是如何具体工作的呢
    其实就分为单 I/O 和多个 I/O 的查询流程,多 I/O 的就是多个单 I/O 的组合、在结合优先级

    程序查询方式主要分三步来完成:
    1.查询状态标记
    2.准备就绪?
    3.交换数据

    在这里插入图片描述

    上述的三步是查询的流程,而下面是讲的程序的流程

    • 1.首先,这种方式在传输数据的时候会占用 CPU 寄存器,所以需要保存其寄存器的值
    • 2.然后由于传输往往是一批数据,所以需要设置 I/O 与主机交换的计数值
    • 3.设置预传输数据在主存缓冲区的首地址
    • 4.启动 I/O
    • 5.进行传输数据,由于当前主存有值了,所以主存地址也要进行修改,同时计数器的值每传一个值就减 1,直至 0,表明传输完成

    **⚠️注意:**CPU 一般不采用高程查询方式与磁盘交换信息

    DMA的概念

    **DMA(直接寄存器存储)😗*DMA是存储器直接访问,这是指一种高速的数据传输操作,允许在外部设备和存储器之间直接读写数据。DMA直接通过一个通路把数据传送到主存储器,无需cpu的参与.

    主要特点:

    • 直接通过一条数据通路直接与主存进行交换信息
    • 无需CPU的直接参与,大大提高了cpu资源利用率
    • I/O与CPU并行工作
    • 适合于高速 I/O 或辅存与主存之间交换信息

    工作机制:DMA由专门的硬件(DMA)控制下,实现高速外设和主存储器之间自动成批交换数据尽量减少CPU干预的输入/输出操作方式。
    相关名词:
    周期挪用:当 CPU 与 i/O 同时访问主存,CPU 必须把总线占有权让给 DMA 接口使用,即 DMA 采用周期挪用占用一个
    存储周期

    注意事项:

    • DMA传送虽然脱离CPU的控制,但并不是说DMA传送不需要进行控制和管理。通常是采用DMA控制器来取代CPU,负责DMA传送的全过程控制。
      -DMA 中的程序中断部件的作用是向 CPU 提出传输结束
    • DMA是必须利用中断的,否则CPU无法得到数据已经传输结束,当数据传输开始结束的时候,需要给CPU一个中断信号,CPU进行处理.这个就大大的节约了CPU的 资源。

    DMA接口的功能和组成

    1. 向CPU申请DMA传送
    2. 在CPU允许DMA工作时,处理总线控制权的转交
    3. 在DMA期间管理系统总线,控制数据传送
    4. 确定传送数据的起始地址和数据长队,修正数据传输过程中的数据地址和数据长度
    5. 在数据块传送结束后,给出DMA操作完成信号

    DMA接口的类型

    1. 选择型 DMA 接口:物理上连接多个设备,逻辑上只允许连接一个设备。适用于传输效率很高的设备
    2. 多路型 DMA 接口:物理上连接多个设备,逻辑上也允许连接多个设备同时工作,各个设备采用字节交叉方式通过 DMA 接口传输数据,适合于同时为多个 数据传输效率不高的设备服务

    DMA 工作流程

    • 1.预处理:
    1. cpu 给 dma 指明传送方向是输入还是输出
    2. 给 DMA 地址寄存送入设备号,启动设备
    3. 向 DMA 主存地址寄存器送入交换数据的主存起始地址
    4. 对计数器赋予交换数据的个数

    简单化理解就是,需要知道输入还是输出数据,需要知道给哪一个设备写入 or 写出,写入写出的数据在主存的说明地方,需要写出写出多少数据

    • 2.数据传送:
      为单位

    • 3.后处理
      中断服务程序,做 DMA 结束处理(包括,检验送入主存的数是否正确,决定是否使用 DMA 传送其他数据块,,测试传送过程是否正确

    在这里插入图片描述

    DMA 接口与系统连接方式

    • 具有公共请求线 的 DMA 请求方式
    • 独立的 DMA 请求 方式

    中断

    中断:中断方式是程序切换,每次操作需要保护和恢复现场中断次数多,CPU需要花较多的时间处理中断,中断次数多也会导致数据丢失

    引入中断的原因:
    1.适应 I/O 设备工作速度低问题
    2.将有用信息送至不受电源控制的存储系统中,带电源恢复后接着使用

    **中断方式的接口电路:

    • 中断请求触发器
    • 段屏蔽触发器
    • 排队器
    • 中断向量形成部件:由于 我们知道 cpu 响应了 I/O 中断以后,需要跳到中断服务程序里,那么此时,我们就需要知道服务程序的入口地址,而入口地址又是通过中断向量找到的,而中断向量又是由中断向量形成部件形成的

    中断处理程序的流程:

    • 1.中断请求
    • 2.中断判优:可能会有多个部件同时请求中断,此时需要判优
    • 3.中断响应:判优完成之后,就需要对 CPU 进行中断了
    • 4.中断服务:此次响应完以后,就需要跳到中断服务程序里,求执行某些操作
    • 5.中断返回:服务程序执行完成之后,就要返回原来的地方,继续执行原本的程序

    中断服务程序流程:

    • 1.保护现场。 (保护程序断点,保护通用寄存器和状态寄存器)
    • 2.中断服务程序:不同的 I/O 设备具有不同的中断服务程序
    • 3.恢复现场:将原程序中断时现场恢复到原来的寄存器中(采用取数指令或出栈指令)
    • 4:中断返回: 中断服务程序的最后一条指令通常是返回指令,时原程序的断点处,以便继续执行原程序。
    • ⚠️注意:计算机在执行中断的时候,可能会出现新的中断,这时候有两种方:一种对于新的中断不理睬,叫做*单重中断,另一种暂停现在执行的中断,转向新的中断,叫做多重中断*。
      这两种中断最大的区别就是开中断的位置的区别

    在这里插入图片描述

    I/O通道

    **概念:**I/O通道设备的引入实际上,I/O通道是一种特殊的处理机。它具:有执行I/O指令的能力,并通过执行通道(I/O)程序来控制I/O操作。但I/O通道又与一般的处理机不同,主要表现在以下两个方面:一是其指令类型单一,这是由于通道硬件比较简单,其所能执行的命令,主要局限于与I/O操作有关的指令;再就是通道没有自己的内存,通道所执行的通道程序是放在主机的内存中的,换言之,是通道与CPU共享内存。------摘自《百度百科》

    **通道:**就是来负责管理I/O设备以及实现主存与I/O设备之间交换信息的部件,他有自己的指令和程序,专门负责数据输入输出的传输控制(相当于cpu把传输控制下放给了通道),具有一些专用的通道指令,它受CPU的I/O指令启动I/O设备,执行通道指令,*组织I/O设备和主存交换信息向CPU报告中断

    通道控制方式:

    所需的CPU干预更少,并且一个通道可以控制多个设备-------进一步CPU的负担

    有专门的指令来改变通道程序

    DMA 与中断的比较

    在这里插入图片描述

    DMA、中断、通道的区别和联系

    DMA 中断 通道
    驱动方式 直接存储器存取方式的基本思想是在I/O设备和内存之间开辟直接的数据交换通路,彻底“解放” CPU 允许I/O设备主动打断CPU的运行并请求服务 DMA方式的发展,它可以进一步减少CPU的干预,即把对一个数据块的读(或写)为单位的干预,减少为对一组数据块的读(或写)及有关的控制和管理为单位的干预。
    适用场景 不需要CPU干预介入的控制器来控制内存与外设之间的数据交流的场合 I/O通道方式:适用于以字节为单位的干预,同时实现CPU、通道和I/O设备三者并行操作的场合 适用于高效场合
    处理方法 获取总线的3种方式分别为:暂停方式、周期窃取方式和共享方式 在系统中具有多个中断源的情况下,常用的处理方法有,多中断信号线法.中断软件查询法.雏菊链法、总线仲裁法和中断向量表法。 通道是一种通过执行通道程序管理I/O操作的控制器,它使主机与1/0操作之间达到更高的并行程度。
    展开全文
  • DMA技术介绍

    千次阅读 2020-06-02 16:15:42
    具有程序中断方式的优点,即在数据准备阶段,CPU与外设并行工作。DMA方式在外设与内存之间开辟一条“直接数据通路”,信息传送不再经过CPU,也就不需要保护、恢复CPU现场等繁琐操作。 这种方式适用于磁盘机、磁带机...
  • 由于串口通信速率一般比较低(典型值不超过115 200 bps),大多数嵌入式系统都采用中断方式来传输串口数据。然而,中断服务程序需要占用CPU的时间,而串口速度的提升也必将导致CPU更频繁地响应UART中断,这势必会造成...
  • 由于串口通信速率一般比较低(典型值不超过115 200 bps),大多数嵌入式系统都采用中断方式来传输串口数据。然而,中断服务程序需要占用CPU的时间,而串口速度的提升也必将导致CPU更频繁地响应UART中断,这势必会造成...
  • (2)程序中断方式 (3)DMA方式 答: (1)直接程序传送方式用于系统调试或对速度要求不高的系统。 这种方式CPU通过执行I/O指令控制外设工作,查询外设状态并外设交换数据, 优点:接口结构简单,实现容易。 ...
  • 8237A DMA控制器简答

    千次阅读 2019-11-30 19:04:55
    (1)、比较中断和DMA两种传输方式的特点。 在中断模式下,外设需与主机传送数据时要请求主机给与中断服务,中断当前主程序的执行,自动转向对应的中断处理程序,控制数据的传输,过程始终是在所执行的指令控制之下。...
  • 输入输出控制方式

    千次阅读 热门讨论 2015-04-12 11:22:34
    程序查询方式和程序中断方式适用于数据传输率比较低的外围设备,而DMA方式、通道方式和外围处理机方式则适用于数据传输率比较高的外围设备。
  • 程序中断工作方式:CPU不再定期查询I/O系统状态,而是当需要I/O处理时再通知CPU,从而解决了CPU低效等待的缺陷 DMA工作方式:它是通过使用DMA控制器来控制管理数据传送,CPU的利用率大大提高 I/O通道技术:将CPU...
  • Linux OS--中断

    2014-11-07 13:10:18
    进程上下文:应用程序通过系统调用请求执行的一段内核代码; 终端上下文:应用程序通过终端请求执行的一段内核代码;...中断和轮询的比较 • 轮询: 优点: 1. 相比较中断而言,轮询程序的实现很简单。 2.
  • 利用stm32串口中断进行数码管显示

    千次阅读 2017-05-04 23:09:13
    串口通信一般有三种形式,即查询方式、中断方式和DMA方式。查询方式(也有人称为轮询法)效率不高,在需要查询时CPU的占用很高,在程序上的体现就是用循环不断 查询标志位状态,在查询时CPU不做其他事,因此效率是...
  • 编程基础-第1天

    2019-10-06 04:50:15
    作者:axiqia链接:...在比较DMA和Channel I/O之前,我们不妨回顾一下IO数据传输的四种方式,循环IO测试、程序中断IO、DMA方式和通道方式。 循环IO测试:计算机的IO测试指...
  • 2020年1月16日学习记录

    2020-01-16 21:13:52
    今天学习内容: 1.C#7.0本质论—第五章方法参数内容 2.计算机网络自顶向下—TCP/DUP套接字编程实例简介 3.计算机组成设计—集成电路...4.DMA接口与系统的连接方式、与程序中断方式比较DMA接口类型的内容 ...
  • 高速串口驱动技术

    千次阅读 2013-04-01 14:43:15
    关键字:散列DMA 高速串口  1 概 述 ... 中断方式是在接收到数据或需要发送数据时产生中断,在中断服务程序中读写UART的缓冲区(FIFO)实现数据传输。由于串口通信速率一般比较低(典型值不超过115 200 bp
  • 例如:试以打印机工作为例说明中断方式的几个过程,试比较中断方式DMA方式的异同等。 对于设计性内容,应能掌握设计方法,正确完成设计。例如:拟出某条指令的指令流程。主存逻辑设计,编制汇编语言程序段等。 ...
  • INTERRUPT CONTROLLER

    2016-03-18 14:25:00
     CPU与外设之间传输数据的控制方式通常有3种:查询方式,中断方式和DMA方式。查询方式的优点是硬件开销小不需要额外的硬件支持只是通过软件不断的轮询,使用起来也就比较简单,但在此方式下,CPU要不断地查询外设的...
  • 2020年1月14日学习记录

    2020-01-14 21:34:46
    今天学习了: ...3 计算机组成原理课程中 IO中断处理、中断服务程序内容、DMA方式的两个特点 4 数据库技术中关于DBAS生命周期模型的系统设计、实现与部署、运行管理与维护的内容 5 看了计算机组成与设...
  • 微型计算机讲稿

    2004-10-15 18:46:45
    4. I/O传送方式及特点:程序中断DMA、IOP 第七章 中断 1. 中断的基本概念:中断、开中断、关中断中断优先级、中断嵌套、中断响应条件、中断过程 2. 8086中断系统 。中断矢量表及存放位置,如何填写 ...
  • 4.8 如何仿真外部中断和测试程序的执行时间196 4.8.1 仿真外部中断196 4.8.2 测试一段程序的执行时间196 4.9 如何利用图形窗口观察分析数据197 4.9.1 CCS的画图功能197 4.9.2 CCS图形功能应用举例199 4.10 通用...
  • 基本输入输出方法 程序控制方法 无条件传送 查询式传送 中断方法传送 直接存储器存取(DMA) 无条件传送 要求外设总是处于准备好的状态 优点:软件及接口硬件简单 ...中断控制方式 特点:外设在需要时向CP
  • 4.网络设备驱动.zip

    2019-09-04 16:10:12
    另外采用 NAPI 所造成的另外一个问题是对于大的数据包处理比较困难,原因是大的数据包传送到网络层上的时候耗费的时间比短数据包长很多(即使是采用 DMA 方式),所以正如前面所说的那样,NAPI 技术适用于对高速率的...
  • STM32F10xxx参考手册

    2012-10-17 11:38:40
    10.3.4 可编程的数据传输宽度、对齐方式和数据大小端 145 10.3.5 错误管理 146 10.3.6 中断 146 10.3.7 DMA请求映像 147 10.4 DMA寄存器 149 10.4.1 DMA中断状态寄存器(DMA_ISR) 149 10.4.2 DMA中断标志清除...
  • Linux内核源码+电子书

    热门讨论 2011-02-21 15:13:10
    4.1 进程和程序(Process and Program) 4.2 Linux中的进程概述 4.3 task_struct结构描述 4.4 task_struct结构在内存中的存放 4.4.1 进程内核栈 4.4.2 当前进程(current宏) 4.5 进程组织的方式 4.5.1哈希表...
  • 4.1 进程和程序(Process and Program) 4.2 Linux中的进程概述 4.3 task_struct结构描述 4.4 task_struct结构在内存中的存放 4.4.1 进程内核栈 4.4.2 当前进程(current宏) 4.5 进程组织的方式 4.5.1哈希表...

空空如也

空空如也

1 2 3
收藏数 55
精华内容 22
关键字:

dma方式和程序中断方式比较