S3C2440-DMA

发布者:DataExplorer最新更新时间:2015-04-08 来源: eechina关键字:S3C2440  DMA  控制器 手机看文章 扫描二维码
随时随地手机看文章
S3c2440A 支持位于系统总线和外设总线之间的4 个通道的控制器。每个DMA 控制器通道
无限制地执行系统总线上的设备或外设总线上的设备之间数据搬移。换句话说,就是每个
通道都操作一下四种情况:
(1)源和目的设备都在系统总线上
(2)源设备在系统总线上,目的设备在外设总线上
(3)源设备在外设总线上,目的设备在系统总线上
(4)源设备和目的设备都在外设总线上
DMA 的主要有点就是其传输数据不需要CPU 的干涉。DMA 操作可由软件或来自内设或外
部请求引脚来初始化。
DMA每次传送2个字节,放到FIFO中,IIS就播放,FIFO空,导致DMA被再次触发,直到传输计数器为0,产生DMA中断,CPU进入中断处理程序。在DMA传送的时候,CPU可以处理其他事情。提高了系统效率。
 
下面的程序使用IIS播放声音同时跑流水灯。如果不用DMA,直接用上一篇的IIS程序,会发现声音断断续续,因为IIS和流水灯一起分CPU的时间。如果使用DMA,则IIS需要的数据由DMA负责传送,而CPU可以执行流水灯程序,互相不耽误。当传输计数器为0时,产生DMA中断,CPU进入中断处理程序。其他时候,CPU可以执行流水灯。这样就实现了流水灯和IIS放音同时执行。
 
 
#include "2440addr.h"     
#include "music.h"     
#define L3MODE 1<<2     
#define L3DATA 1<<3     
#define L3CLOCK 1<<4    
#define _ISR_STARTADDRESS 0x33ffff00  
#define U32 unsigned int   
U32 flag, result, remain;   
 
void Delay(){
        int i, j, k;
        for(i = 0; i < 0xff; i++)
                for(j = 0; j < 0xff; j++)
                        for(k = 0; k < 0xff; k++)
                                ;
}
 
void Led(){
        int i;
        for(i = 3; i < 7; i++){
                rGPFDAT &= "(1<<i);
                Delay();
                rGPFDAT = 0xff;
        }
}
 
void WriteL3(unsigned char data, unsigned int mode){      
    //mode = 0,地址模式;mode = 1,数据传输模式      
    int i, k;      
    if(mode == 0){      
        rGPBDAT = rGPBDAT & "(L3MODE|L3DATA|L3CLOCK )|L3CLOCK;      
    }      
    else{      
        rGPBDAT = rGPBDAT & "(L3MODE|L3DATA|L3CLOCK)|(L3CLOCK|L3MODE);         
    }      
    for(k = 0; k < 5; k++)      
        ;      
    for(i = 0; i < 8; i++){      
        if(data & 0x1){      
            rGPBDAT &= "L3CLOCK;      
            rGPBDAT |= L3DATA;      
            for(k = 0; k < 5; k++)      
                ;         
            rGPBDAT |= L3CLOCK;      
            rGPBDAT |= L3DATA;      
            for(k = 0; k < 5; k++)      
                ;      
        }      
        else{      
            rGPBDAT &= "L3CLOCK;      
            rGPBDAT &= "L3DATA;      
            for(k = 0; k < 5; k++)      
                ;      
            rGPBDAT |= L3CLOCK;      
            rGPBDAT &= "L3DATA;      
            for(k = 0; k < 5; k++)      
                ;      
        }      
        data >>= 1;      
    }      
    rGPBDAT = rGPBDAT & "(L3MODE|L3DATA|L3CLOCK)|(L3CLOCK|L3MODE);      
}     [page]
void PlayMusic(unsigned char buffer[], unsigned int length){      
    result = (length>>1)/0x100000;   
    remain = (length>>1)&0xfffff;      
    //UDA1341      
    //STATUS模式      
    rGPBDAT = rGPBDAT & "(L3MODE|L3DATA|L3CLOCK)|(L3CLOCK|L3MODE);      
    WriteL3(0x14+2,0);      
    //复位      
    WriteL3(0x60,1);      
    WriteL3(0x14+2,0);      
    //00010000 系统时钟频率384fs      
    WriteL3(0x10,1);      
    WriteL3(0x14+2,0);      
    //11000001 输出增益,ADC关,DAC开      
    WriteL3(0xc1,1);         
    //IIS      
    //DMA开启,在接受空闲状态,不产生IISLRCK信号,IIS预分频使能      
    rIISCON = (1<<5)|(0<<4)|(0<<3)|(1<<2)|(1<<1);       
    //主设备时钟PCLK,主设备模式,发送模式,串行数据16位,主时钟是384fs,串行位时钟32fs      
    rIISMOD = (0<<9)|(0<<8)|(2<<6)|(0<<5)|(0<<4)|(1<<3)|(1<<2)|(1<<0);      
    //预分频都是N=3        
    rIISPSR = (3<<5)|3;      
    //发送FIFO用DMA模式,发送FIFO使能      
    rIISFCON = (1<<15)|(1<<13);    
       
    //DMA    
    rDISRC2 =  (U32)buffer;                //DMA2初始源地址   
    rDISRCC2 = (0<<1)|(0<<0);              //源在系统总线上,地址增加   
    rDIDST2 = (U32)IISFIFO;                //DMA2初始目的地址   
    rDIDSTC2 = (0<<2)|(1<<1)|(1<<0);       //当TC为0时,中断发生,源在外围总线上,地址固定,一直为IISFIFO的0x55000010(小端)    
    if(result == 0){   
        flag = 0;   
        //握手模式,与APB时钟同步,当所有的传输结束,中断请求生成,单元传送,单服务模式,当传输计数器为0时,DMA通道关闭   
        rDCON2 = (1<<31)|(0<<30)|(1<<29)|(0<<28)|(0<<27)|(0<<24)|(1<<23)|(1<<22)|(1<<20)|(remain<<0);   
    }   
    else{   
        flag = 1;   
        rDCON2 = (1<<31)|(0<<30)|(1<<29)|(0<<28)|(0<<27)|(0<<24)|(1<<23)|(1<<22)|(1<<20)|(0xfffff<<0);   
    }   
    rDMASKTRIG2 = (0<<2)|(1<<1)|(0<<0);    //DMA通道开启   
    rIISCON |= 0x1;                        //IIS开启     
}     
void __irq DMA2_ISR(void){   
    rSRCPND |= 1<<19;   
    rINTPND |= 1<<19;   
    if(flag == 0){   
        rIISCON = 0x0;                  //关闭IIS                
        rIISFCON = 0x0;                 //关闭IISFIFO的DMA模式   
        rDMASKTRIG2 = 1<<2;             //关闭DMA   
    }   
    else{   
        result--;   
        rDISRC2 += 0x200000;            //因为是半字     
        if(result == 0){   
            flag = 0;    
            rDCON2 = (rDCON2 & ("0xfffff)) | (remain);   
        }   
        rDMASKTRIG2 = (0<<2)|(1<<1)|(0<<0);          
    }   
}   
int Main(){      
    rGPBUP  = rGPBUP  & "(0x7<<2) | (0x7<<2);   //The pull up function is disabled GPB[4:2] 1 1100         
    rGPBCON = rGPBCON & "(0x3f<<4) | (0x15<<4); //GPB[4:2]=Output(L3CLOCK):Output(L3DATA):Output(L3MODE)      
    rGPBDAT = 0x1ec;      
    rGPEUP  = rGPEUP  & "(0x1f)  | 0x1f;    //The pull up function is disabled GPE[4:0] 1 1111      
    rGPECON = rGPECON & "(0x3ff) | 0x2aa;   //GPE[4:0]=I2SSDO:I2SSDI:CDCLK:I2SSCLK:I2SLRCK      
    rMPLLCON = (150<<12)|(5<<4)|(0<<0);     
    rSRCPND |= 1<<19;   
    rINTPND |= 1<<19;   
    rINTMSK &= "(1<<19);  
    rGPFCON = 0xd57f;
    rGPFUP = 0x87;     
    pISR_DMA2 = (U32)DMA2_ISR;   
    PlayMusic(music, sizeof(music));      
    while(1){
            Led();                              //占用CPU
    }      
    return 0;      
}
关键字:S3C2440  DMA  控制器 引用地址:S3C2440-DMA

上一篇:S3C2440-IIC
下一篇:讨论s3c2440的时钟与DMA

推荐阅读最新更新时间:2024-03-16 13:57

LPC2478中断控制器以及串口详解
LPC2478的中断系统 LPC2478使用的是ARM PrimeCell向量中断控制器,一共支持32个中断向量,处于AHB空间便于系统快速访问,在中断向量的硬件优先级上还有一层可以用户自己设计的软件优先级, 由于是ARM7内核,所以,2478的中断有两种,分别是FIQ中断和IRQ中断,IRQ有多个中断通道,FIQ的中断通道却只有一个,中断系统框图如下 当FIQ中断进入时,会经历多个中断想或的过程,得到的中断状态不管是不是使能了中断,都会存放至RAWINT里面,然后判断中断使能,被使能的中断写入到FIQSTATUS,并向系统发出快速中断请求,系统响应中断的模式则是自动读取FIQSTATUS判断哪个中断发生,并直接跳转到
[单片机]
LPC2478中断<font color='red'>控制器</font>以及串口详解
瑞萨电子推出第四代V850微控制器系列产品
74款面向汽车车体、仪表盘、底盘和安全应用的器件 高级半导体解决方案领导厂商瑞萨电子株式会社(TSE:6723,以下简称瑞萨电子)于2010年11月4日正式宣布开发第四代(X4代)面向汽车应用的V850系列微控制器(MCU)。它由4个产品系列组成:面向底盘和安全应用的P系列、面向仪表盘应用的D系列、面向车体应用的F系列和面向汽车音响系统的S系列。V850系列产品预计将于2011财年第2季度开始批量生产。 瑞萨电子第四代MCU系列基于90nm MONOS(金属-氧化物-氮化物-氧化物-硅)Flash技术,采用性能比高达2.5DMIPS/MHz(Dhrystone MIPS /MHz)的32位V850E2 CPU内核,
[单片机]
赛普拉斯推出Gen4 系列TrueTouch 触摸屏控制器
全新器件系列实现了业界最佳噪声性能、最快刷新率、最低功耗、最高精确度以及众多独特功能 2011 年 9 月 26 日,北京讯,加州圣何塞讯——赛普拉斯半导体公司(纳斯达克股票代码:CY)日前宣布推出全新 Gen4 系列 TrueTouch® 触摸屏控制器。Gen4 的各方面性能均处行业领先水平,包括全球最佳的信噪比 (SNR) 以及在各种噪声源(触摸屏设计面临的最大挑战)存在情况下仍可实现的无与伦比的性能。 噪声消除的新突破 该全新 Gen4 系列经过彻底全新设计,能够在现实应用中提供全球最高的 SNR。它是第一款、也是唯一一款能够提供内置 10V Tx 并以 10V 驱动触摸显示屏的触摸屏 IC。由于 SNR 与驱动显示
[单片机]
凸轮控制器控制原理
一、凸轮控制器的结构 二、凸轮控制器的电路
[模拟电子]
凸轮<font color='red'>控制器</font>控制原理
非接触式IC卡节水控制器的设计与实现
  1.引言   非接触式IC卡节水控制器(简称水控器或水控机),就是采用非接触式IC卡读写器控制出水,对用水实行无人收费管理]。它是一种集计量功能及控制功能为一体的装置,是一种利用现代微电子技术、现代传感技术、非接触式IC卡技术对用水量进行计量并能进行用水数据传递及结算交易的新型装置。有水龙头流水的场所都可以利用控制器达到节水的目的。如:浴室、集体和个人公寓、开水房等场所。该装置采用国内最常见的Philips公司生产的Mifare1 S50非接触式IC卡作为通讯卡,具有体积小、携带方便、防水防潮、坚固耐磨等优点,并且能方便的配合售饭机、门禁系统、考勤系统等一起使用,构成校园一卡通、企业一卡通系统。   2.基于非接触式IC卡
[单片机]
非接触式IC卡节水<font color='red'>控制器</font>的设计与实现
基于智能通信控制器的串行通信系统的抗干扰设计
电力系统运行的安全与否与系统当时的运行状态有密切的关系,对于电力调度部门来说,如果能实时地全面掌握电力系统各部分的运行状态,进行远程监测,对保证系统的安全、稳定、经济运行无疑具有十分重要的意义。电力远程监测一般采用串行方式进行通信,保证数据的可靠传输是其最重要的技术指标之一。由于工业现场的恶劣环境以及配电系统的远距离传输,干扰是产生偶然性错误和影响整个系统可靠运行的主要原因。提高系统的抗干扰能力是电力远程监控的一个重要的研究方向。 系统概述 本系统是一个上下位机形式的工业配电测控系统,根据功能需要,下位机选用了控制功能比较强大的研华IPC-610工业控制计算机(IPC: Industrial Personal Computer
[应用]
利用P87LPC767单片机和LM317实现24V/5A太阳能控制器电路的设计
引言 能源是人类社会存在和发展的重要物质基础。目前的世界能源以煤炭、石油和天然气等化石能源为主体。而化石能源是不可再生的资源,并且在生产和消费过程中产生大量污染物,破坏生态环境。 通过太阳能电池将资源无限、清洁干净的太阳辐射能转化为电能的太阳能光伏发电,是新能源和可再生能源家族中的重要成员之一 1、太阳能电池的基本原理及伏安特性 当物体受到光照时,物体内的电荷分布状态发生变化而产生电动势和电流,这种现象称为光生伏打效应。该效应在液态和固态物质中都会发生。但只有在固体中,尤其是在半导体中,才会有较高的转换效率。 太阳能电池是一种利用光生伏打效应把光能转换为电能的器件,当太阳光照射到半导体P-N结时,就会在P-N 结两边产
[单片机]
利用P87LPC767单片机和LM317实现24V/5A太阳能<font color='red'>控制器</font>电路的设计
控制器管理电源排序和控制
随着双电压体系结构和多处理器板的迅速普及,连简单的应用都可能需要几条处理器电压干线。由于每个处理器都有自己的加电和断电要求,电源干线排序和控制就变成一项复杂的任务。电源设计人员所面临的挑战就是要考虑每个处理器的定时和电压要求,并将这些要求吸纳到总系统中,以确保最终设计满足所有处理器的要求。   给处理器供电不当,会导致种种问题,有的不大严重,如MTBF(平均无故障间隔时间)缩短,有的则是灾难性的,如闭锁。鉴于可用微处理器的多样性和你在提出电源排序和控制方案时预计到的应用挑战,使用微控制器是可取的,因为它具有可编程能力。MSP430非常适合这种应用 (图 1)。这种高性能、低成本的16位RISC处理器具有几个高质量的模拟外设和一个JT
[应用]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved