dma模式

2019 8 10 STM32F407ADC1M采样频率相关设置

て烟熏妆下的殇ゞ 提交于 2019-11-27 16:17:23
GPIO_InitTypeDef GPIO_InitStructure; ADC_CommonInitTypeDef ADC_CommonInitStructure; ADC_InitTypeDef ADC_InitStructure; ADC_DeInit(); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);//ʹÄÜGPIOAʱÖÓ RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); //ʹÄÜADC1ʱÖÓ //Ïȳõʼ»¯ADC1ͨµÀ5 IO¿Ú GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;//PA5 ͨµÀ5 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;//Ä£ÄâÊäÈë GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;//²»´øÉÏÏÂÀ­ GPIO_Init(GPIOA, &GPIO_InitStructure);//³õʼ»¯ RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1,ENABLE); //ADC1¸´Î» RCC_APB2PeriphResetCmd

反射内存 RFM5565 分散/集聚的 DMA 操作示例

送分小仙女□ 提交于 2019-11-27 08:08:44
反射内存RFM5565分散/集聚的DMA 操作示例 注:scatter/gather 方式是与block dma 方式相对应的一种dma 方 式。 连续的。但在有的计算机体系中,如IA,连续的存储器地址在物理 在dma 传输数据的过程中,要求源物理地址和目标物理地址必须是 上不一定是连续的,则dma 传输要分成多次完成。 如果传输完一块物理连续的数据后发起一次中断,同时主机进行下一 块物理连续的传输,则这种方式即为block dma 方式。 scatter/gather 方式则不同,他是用一个链表描述物理不连续的存储器, 然后把链表首地址告诉dma master。dma master 传输完一块物理连续 的数据后,就不用再发中断了,而是根据链表传输下一块物理连续的 数据,最后发起一次中断。 很显然scatter/gather 方式比block dma 方式效率高。 分散/集聚DMA 传输是一种用于执行分割成不同小块的大型数 据的传输的模式。注意:在一个数据页不能跨越4 GB 的地址边界。 该DMA 描述符指针是链表页描述地址。 每个页面描述符定义一个地址和数据块大小加上下一个描述符 块的指针。当数据被读取/写入到相应的页面,自动获取描述符。描 述链处理直到数据传输完成或达到的描述链的末端,以先到者为准。 页面描述符块不能被映射在64 位寻址空间。第一个描述符必须 是一个16

关于启用DMA的方法

☆樱花仙子☆ 提交于 2019-11-27 01:43:05
这是一个老问题……希望对那些不幸遇到的朋友有点帮助 当然,这里的前提是:主板、硬盘(光驱)都支持DMA,驱动程序安装正确,启用了DMA模式但是仍然在低速DMA或PIO下运行的情况。 问题的产生:在Windows 2000/XP/2003中有这样一个设定: Windows IDE/ATAPI 端口驱动程序 (Atapi.sys) 累积收到总共6个超时或循环冗余检验(CRC)错误后,驱动程序将把通信速度(传送模式)从最快的直接内存访问(DMA)模式分步骤降为较慢的 DMA 模式。如果驱动程序继续收到超时或 CRC 错误,则驱动程序最终将把传送模式降为最慢的模式(PIO 模式)。问题就在这里!一般来说一个正常的硬盘很少会有超时或CRC错误,但是当我们使用这些系统里的挂起(或休眠)并恢复计算机后就很容易造成超时或CRC错误。因为系统设定的超时值为4秒,当系统向 ATA 磁盘发出读取请求时如果硬盘回应时间超过 4 秒的超时值时才会产生超时或CRC错误,但因为系统在挂起(也有叫休眠)时硬盘是在停转状态中,恢复计算机时硬盘有个从停止到运动的过程,这就很容易造成大部分硬盘回应时间超过 4 秒的超时值。也就是说当我们使用计算机挂起6次后系统就会把通信速度(传送模式)从最快的DMA模式分步骤降为较慢的DMA模式。如果挂起6次以上则驱动程序最终将把传送模式降为最慢的模式(PIO 模式)。 解决办法

意念控制四旋翼 学习笔记

帅比萌擦擦* 提交于 2019-11-26 19:59:50
第一部分:模块原始数据 拿到模块,在网上查了一圈,发现基本没什么有用的资料,很多都是一些相关但是没有实际价值的东西。许多论文都是再谈怎么去做,而没有实实在在的去完成这么一个过程。 废话不多说,直接步入正题。 昨天在网上才发现这个软件,据评论说是这款串口软件很好用。 RealTerm的下载地址 https://realterm.sourceforge.io/ 这是通过单片机的232通信例程直接接收得到的原始数据,也就是参考手册中的数据流。其中小包数据,是每秒512个大概,大包数据是每秒1个。 小包的格式是AA AA 04 80 02 xxHigh xxLow xxCheckSum前面的AA AA 04 80 02 是不变的,后三个字节是一只变化的,xxHigh和xxLow组成了原始数据rawdata,xxCheckSum就是校验和。所以一个小包里面只包含了一个对开发者来说有用的数据,那就是rawdata,可以说一个小包就是一个原始数据,大约每秒钟会有512个原始数据。 从小包中解析出原始数据: rawdata = (xxHigh << 8) | xxLow; if(rawdata > 32768){ rawdata ­=65536; } 根据手册,在计算原始数据之前,要先检查检验和: sum = ((0x80 + 0x02 + xxHigh + xxLow)^ 0xFFFFFFFF)