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

📄 cspiclass.h

📁 freescale i.mx31 BSP CE5.0全部源码
💻 H
字号:
//------------------------------------------------------------------------------
//
//  Copyright (C) 2004, Motorola Inc. All Rights Reserved
//
//------------------------------------------------------------------------------
//
//  Copyright (C) 2004, Freescale Semiconductor, Inc. All Rights Reserved
//  THIS SOURCE CODE IS CONFIDENTIAL AND PROPRIETARY AND MAY NOT
//  BE USED OR DISTRIBUTED WITHOUT THE WRITTEN PERMISSION OF
//  FREESCALE SEMICONDUCTOR, INC.
//
//------------------------------------------------------------------------------

//------------------------------------------------------------------------------
//
//  File:  cspiclass.h
//
//   Header file for cspi bus driver.
//
//------------------------------------------------------------------------------
#ifndef __CSPICLASS_H__
#define __CSPICLASS_H__

#ifdef __cplusplus
extern "C" {
#endif

//------------------------------------------------------------------------------
// Defines

#ifdef DEBUG
#define ZONE_INIT		DEBUGZONE(0)
#define ZONE_DEINIT		DEBUGZONE(1)
#define ZONE_OPEN		DEBUGZONE(2)
#define ZONE_CLOSE		DEBUGZONE(3)
#define ZONE_IOCTL		DEBUGZONE(4)
#define ZONE_THREAD     DEBUGZONE(5)
#define ZONE_DMA        DEBUGZONE(10)
#define ZONE_FUNCTION	DEBUGZONE(13)
#define ZONE_WARN		DEBUGZONE(14)
#define ZONE_ERROR		DEBUGZONE(15)
#endif // DEBUG

#define CSPI_SDMA_BUFFER_SIZE  0x2800
#define CSPI_MAX_DESC_COUNT_RX 1
#define CSPI_DMA_WATERMARK_RX  (16)
#define CSPI_DMA_WATERMARK_TX  (32)
#define CSPI_MAX_DESC_COUNT_TX 1
#define CSPI_TXMT_OFFSET       0x0
#define CSPI_RECV_OFFSET       0x1400

//------------------------------------------------------------------------------
// Types

typedef struct
{
    LIST_ENTRY  link;           // supports linked list of queue data
    CSPI_XCH_PKT_T xchPkt;      // client exchange packet with mapped pointers
} CSPI_XCH_LIST_ENTRY_T, *PCSPI_XCH_LIST_ENTRY_T;

class cspiClass
{
public:
    cspiClass();
    ~cspiClass(void);
    BOOL CspiInitialize(DWORD Index);
    void CspiRelease(void);
    BOOL CspiEnqueue(PCSPI_XCH_PKT_T pXchPkt);

    BOOL m_bUsePolling;
    CEDEVICE_POWER_STATE m_dxCurrent;

    // DMA specific
    BOOL InitCspiDMA(UINT32 Index);
    BOOL DeInitCspiDMA(void);
    BOOL InitChannelDMA(UINT32 Index);
    BOOL DeinitChannelDMA(void);
    BOOL UnmapDMABuffers(void);
    BOOL MapDMABuffers(void);
    VOID MoveDMABuffer(LPVOID pBuf, DWORD dwLen, BOOL bReceive);

private:
    PCSP_CSPI_REG m_pCSPI;
    LIST_ENTRY m_ListHead;
    CRITICAL_SECTION m_cspiCs;
    CRITICAL_SECTION m_cspiDataXchCs;
    UINT32 m_cspiOpenCount;
    HANDLE m_hIntrEvent;
    HANDLE m_hEnQEvent;
    HANDLE m_hThread;
    HANDLE m_hHeap;
    DWORD m_dwSysIntr;
    BOOL m_bTerminate;
    UINT m_Index;

    PHYSICAL_ADDRESS PhysDMABufferAddr;
    PBYTE 		    pVirtDMABufferAddr;
    UINT8 		    m_dmaChanCspiRx, m_dmaChanCspiTx; 
    DDK_DMA_REQ		m_dmaReqTx, m_dmaReqRx ; 
    BOOL m_isDMADone;
    UINT32 m_dmaTransferCount;
    UINT32 m_nondmaTransferCount;
    BOOL m_bUseDMA;
private:
    static DWORD WINAPI CspiProcessQueue(LPVOID lpParameter);
    UINT32 CspiDataExchange(PCSPI_XCH_PKT_T pXchPkt);
    static UINT32 CspiBufRd8(LPVOID pBuf);
    static UINT32 CspiBufRd16(LPVOID pBuf);
    static UINT32 CspiBufRd32(LPVOID pBuf);
    static void CspiBufWrt8(LPVOID pBuf, UINT32 data);
    static void CspiBufWrt16(LPVOID pBuf, UINT32 data);
    static void CspiBufWrt32(LPVOID pBuf, UINT32 data);
};

//------------------------------------------------------------------------------
// Functions

#ifdef __cplusplus
}
#endif

#endif // __CSPICLASS_H__

⌨️ 快捷键说明

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