ok6410的DMA裸机总结

发布时间:2024-07-19  

1.为何使用DMA:为了提高CPU的工作效率,避免多余的等待时间


2.关于DMA控制器:

(1)通道数:2440有4个通道,6410有4个DMA控制器(初始化的时候要选择),32个通道。210有两种DMA一种是内存与内存之间,另外则是普通的内存与外设之间。

(2)请求源:

(3)基本时序

  nXDREQ请求生效并经过2CLK周期同步后,nXDACK响应并开始生效,但至少还要经过3CLK的周期延迟,DMA控制器才可获得总线的控制权,并开始数据传输

(4)工作模式:

•Demond模式:

如果DMA完成一次请求后如果Request仍然有效,那么DMA就认为这是下一次DMA请求,并立即开始下一次的传输


•Handshake模式:

DMA完成一次请求后等待Request信号无效,如果Request无效,DMA会无效ACK两个时钟周期,再等待下一次Request。


3.初始化

(1)源地址寄存器初始化(总线模式以及地址是否增加,还有选择通道,指定地址)

(2)目的地址寄存器初始化

(3)控制寄存器初始化(选择DMA请求源,选择源是软件还是硬件,是否重加载以及计数值决定发送多少数据)


范例代码:


/*

S3C6410中DMA操作步骤:

1、决定使用安全DMAC(SDMAC)还是通用DMAC(DMAC);

2、开启DMAC控制,设置DMAC_Configuration寄存器;

3、清除传输结束中断寄存器和错误中断寄存器;

4、选择合适的优先级通道;

5、设置通道的源数据地址和目的数据地址(设置DMACC_SrcAddr和DMACC_DestAddr);

6、设置通道控制寄存器0(设置DMACC_Control0);

7、设置通道控制寄存器1,(传输大小,设置DMACC_Control1);

8、设置通道配置寄存器;(设置DMACC_Configuration)

9、使能相应通道(设置DMACC_Configuratoin);

*/



#define SDMA_SEL                  (*((volatile unsigned long *)0x7E00F110))

#define DMACIntTCClear          (*((volatile unsigned long *)0x7DB00008))

#define DMACIntErrClr              (*((volatile unsigned long *)0x7DB00010))

#define DMACConfiguration          (*((volatile unsigned long *)0x7DB00030))

#define DMACSync                 (*((volatile unsigned long *)0x7DB00034))

#define DMACC0SrcAddr             (*((volatile unsigned long *)0x7DB00100))

#define DMACC0DestAddr             (*((volatile unsigned long *)0x7DB00104))

#define DMACC0Control0          (*((volatile unsigned long *)0x7DB0010c))

#define DMACC0Control1          (*((volatile unsigned long *)0x7DB00110))

#define DMACC0Configuration     (*((volatile unsigned long *)0x7DB00114))



#define UTXH0              (volatile unsigned long *)0x7F005020


char src[100] = "nrHello World-> This is a test!nr";



void dma_init()

{

    //DMA控制器的选择(SDMAC0)

    SDMA_SEL = 0;

    

    //DMA控制器使能

    DMACConfiguration = 1;

    

    

    //初始化源地址

    DMACC0SrcAddr = (unsigned int)src;

    

    

    //初始化目的地址

    DMACC0DestAddr = (unsigned int)UTXH0;


    //对控制寄存器进行配置

    /*

    源地址自增

    目的地址固定、

    目标主机选择AHB主机2

    源主机选择AHB主机1

    */


    DMACC0Control0 =(1<<25) | (1 << 26)| (1<<31);  /* 25选择目的地址 26源地址增长  31中断允许位  */

    DMACC0Control1 = 0x64;     //传输的大小

    

    

    

    /*

    流控制和传输类型:MTP 为 001

    目标外设:DMA_UART0_1,源外设:DMA_MEM

    通道有效: 1

    */


    DMACC0Configuration = (1<<6) | (1<<11) | (1<<14) | (1<<15); /* 6选择目的地址是否为外设   11流控位 memory to peripheral 14and15 中断屏蔽 */


                

}


void dma_start()

{

    //开启channel0 DMA

    DMACC0Configuration  = 1;    

}


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>