⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pingpongdma.h

📁 EP9315开发板的Wince6.0的BSP包文件
💻 H
字号:
//**********************************************************************
//                                                                      
// Filename: pingpongdma.h
//                                                                      
// Description: Ping Pong DMA class
//
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
// PARTICULAR PURPOSE.
//
// Use of this source code is subject to the terms of the Cirrus end-user
// license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
// If you did not accept the terms of the EULA, you are not authorized to 
// use this source code. For a copy of the EULA, please see the 
// EULA.RTF on your install media.
//
// Copyright(c) Cirrus Logic Corporation 2005, All Rights Reserved                       
//                                                                      
//**********************************************************************
#ifndef _H_DMA_DRIVER
#define _H_DMA_DRIVER

typedef  void DMA_PINGPONG_CALLBACK(HANDLE, BOOL);       

class PingPongDma
{
    public:
        PingPongDma(void): m_ulBufferSize(0),
                           m_pBuffer(0),
                           m_bPlaying(0),
                           m_hCallBackHandle(0),
                           m_pfnCallBack(0),
						   m_bPowerOff(0),
						   m_ulSysIntr(0)
                           
        {
        };
        virtual             ~PingPongDma(void) {};
        virtual MMRESULT    Start(void) = 0;
        virtual MMRESULT    Stop(void)  = 0;
        virtual MMRESULT    Pause(void) = 0;
        virtual void        Flush(void) = 0;
        virtual ULONG       CurrentPosition(void) = 0;

        void                SetCallBack(DMA_PINGPONG_CALLBACK *pfn, HANDLE hCallBackHandle)
        {
            m_pfnCallBack        = pfn;      
            m_hCallBackHandle    = hCallBackHandle;
        }

        void *              GetVirtBuffAddress(void)        {return m_pBuffer;}
        BOOL                IsDmaOn(void)                   {return m_bPlaying;}

		void * m_pWaveDevice;

		BOOL m_bPowerOff;

		void SetPowerOffStatus( void ){m_bPowerOff=TRUE;}

		ULONG	GetInterruptNum( void ){ return m_ulSysIntr; }

    protected:
        ULONG               m_ulSysIntr;
        ULONG               m_ulBufferSize;
        void    *           m_pBuffer;
        BOOL                m_bPlaying;
        HANDLE              m_hCallBackHandle;
        DMA_PINGPONG_CALLBACK  *     m_pfnCallBack;      

};



class PingPongHwDma : public PingPongDma
{
    public:
        PingPongHwDma(void);
        virtual             ~PingPongHwDma(void);


        MMRESULT    Initialize
        (
			void *			pWaveDevice,
            volatile ULONG *pulDmaChannel, 
            ULONG           ulPeripheral,
            ULONG           ulBufferSize,
			BOOL			bDMANotStop
        );

        virtual MMRESULT    Start(void);
        virtual MMRESULT    Stop(void);
        virtual MMRESULT    Pause(void);
        virtual void        Flush(void);
        virtual ULONG       CurrentPosition(void);

    protected:

        static  DWORD WINAPI IST(LPVOID lpParam);
        volatile ULONG *    m_pulDma;
        ULONG               m_ulPeriph;
        ULONG               m_ulCurrentPos;
        BOOL                m_bExitThread;
        HANDLE              m_hEvent;
        HANDLE              m_hThread;
        BOOL                m_bOrder;
        ULONG               m_ulPhysBuff;
		BOOL				m_bDMANotStop;
};


#define     NUM_DMA_CHANNELS        10




#endif // _H_DMA_DRIVER

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -