DSP DMA 直接内存访问
上图表示XZCS6来自DSP28335 去CPLD
上面的两个图表示 XA[4:0] 如果是01001 而且 XZCS6等于0 则片选有效
上面两个图的正确理解是
参照C和指针这本书的指针常量章节
综上两张图 明白
#define PORT_AD (signed int * ) 0x100009
该语句 表示 把整型数 0x100009 强制转换为 指向整型有符号数 的 指针
宏定义 PORD_AD就代表这个指针
而 temp_a =((* PORT_AD)<<4); 就是把片外AD7658 数据总线上的数据通过XD15—XD0 数据总线读取上来了以后 ,放进了片内的地址 0X100009
实际上DSP28335 的地址0x100009 映射的是片外的存储器
当用指针访问片外的AD的时候, 外部扩展存储器区域6
地址范围是0x10 0000 ~ 0x20 0000 是1M X 16 位 空间
当访问0x10 0009 0x10 0009 是外部扩展存储器区域 6 的同时 。XZCS6 也会同时变为0 这是由DMA 接口决定的。
上面说明白了直接用 28335 的外部扩展接口 访问片外 AD 的方法 。。
第2部分
下面说明一下 DMA DIRECT MEMORY ACCESS
将外部RAM里面的数据 直接 通过 DMA 的方式 赋值到 内部RAM的方法。
第2部分 我想只说一些概念性的观点吧
DMA模块
数字信号处理器中需要大量的带宽来移动数据
例如 从片外存储器到片内存储器
从一个外设(例如模数转换器到RAM) 例如AD7658到DSP28335 的外部扩展存储器区域6 。
问题1 DSP为什么需要DMA操作?
例如 当控制器读写AD采集数据时或者读取外部扩展存储器内容时,内存与外设之间将会有大量数据交换,这种交换是经常性的,对于这样的交换,若采用中断方式响应,则每传送一次数据,都要经历中断处理的全部步骤,CPU会不断地进行中断方式的响应,如中断现场寄存器的压入堆栈,以及中断结束恢复现场等
直接存储器访问DMA (Direct Memory access) 模块就是用硬件实现存储器与存储器之间,存储器与IO设备之间 直接进行高速数据传送, 不需要CPU的干预,减小了中间环节,而且存储器地址的修改和传送均由硬件自动完成。
实现DMA传送的关键部件是 DMA控制器 ,系统总线分别受CPU和DMAC 这两个部件的控制 即CPU可以向地址总线,数据总线,和控制总线发送消息。(非DMA方式)
DMAC也可以向地址总线 数据总线 和控制总线发送消息(DMA方式)