pc系列微机系统中,在进行DMA传送时,如何寻址存储单元及外设?

全部回答2
默认 最新
  • 4 数据传输的软件实现   由于PC机直接存取单片机数据存储区,整个传输过程无须单片机参与,通讯控制完全由PC机完成,因而软件编写非常方便简单,这是本方法的又一显著优点。传输软件可用任一种编程语言编写,框图如图2所示。下面是用C语言开发的PC机存取单片数据区的源程序:  #include   ……   int x;   unsigned int i,j;   FILE *fp;   Char s[10]   Printf(“请输入文件名:”);   Scanf(“%s”,s);   If((fp=fopen(s,“WB”))==NULL) exit (0);   /* 初始化 /   outportb (0x300,0x52);   /*传输数据循环*/   for(I=0x55;I<=0xff;I++)   { outportb(0x301,i);     for(j=0;j<=0xff;j++);   { outportb (0x302,j);      x=inportb(0x303);      fprintf(fp,”%d”,x);      }     } fclose(fp);   ……
    0 点赞
  • A/D转换设置为Ch0、Ch1、Ch2、Ch3连续转换模式,DMA通道1配置给A/D转换器。每次转换结束后,A/D转换器会发出中断并引发DMA请求。同时A/D转换器会提供PIA(外设间接地址)给DMA控制器以便和起始地址偏移量寄存器装配DPSRAM地址,确定相应缓冲区的地址位置。由于每个A/D通道的外设地址是不同的,因此在DPSRAM里每个A/D通道都有自己独立的缓冲区。 形象的说:A/D转换的结果被不断丢给(Scatter)DMA控制器,DMA控制器根据寄存器间接寻址机制,把相应A/D通道的数据收集(Gather)在DPSRAM里各个A/D通道独立的缓冲区里。 显而易见,这种方式提高了A/D转换的DMA传输效率。CPU可以很方便的利用简单的寻址方式直接利用这些数据。 DMA缓冲区间接地址的拼装过程 根据外设的特点,这个模式可以双向工作,因此DMA控制器需要作相应的配置以支持外设读或写操作。外设提供地址序列,用于访问DPSRAM里的数据。允许分散/集中(Scatter/Gather)寻址机制。比如:可以利用这个特点把收到的A/D数据投放到多个缓冲区里,归类来自不同通道的数据,大大减轻了CPU负担。 外设间接寻址方式时,DMA缓冲区间接地址的拼装过程。 低位地址来自于外设,称为外设间接地址(PIA),当外设中断产生DMA请求后会把PIA提供给DMA地址生成逻辑,外设会使用几个最低有效位作为寻址空间(不同外设占用的位数不同),运算的时候对于超过外设空间的位全部填“0”;另一方面,DMA地址寄存器会提供一个固定的基地址作为高位地址,用户在选择缓冲区基址(Base Address)地址偏移量的时候要注意,保证地址里有若干个(≥PIA的位数)最低有效位为“0”。这些为“0”的最低有效位是为PIA留出来的。最后,高位填“0”后的外设间接地址和DMA起始地址寄存器进行“或”逻辑,这样就合成了有效的指向DMA缓冲RAM的地址。
    0 点赞

没有更多内容了

返回顶部
产品求购 求购