亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? spi.cpp

?? CAN總線驅動程序
?? CPP
字號:
#include "stdafx.h"
#include "spi.h"
#include <pkfuncs.h>


SPI_CTRL_BLK_t SPI_CtrlBlk;


BOOL SPI_Init(UINT8 port)
{
	UINT32 irq = IRQ_SPI0;
	DWORD dwErr;
	PUCHAR  pVMem;
    BOOL    bMapReturn;

	SPI_CtrlBlk.port = port;
  
    // reserve space for SPI
    pVMem = (PUCHAR)VirtualAlloc(0, sizeof(S3C2440A_SPI_REG), MEM_RESERVE, PAGE_NOACCESS);     
	if (! pVMem) 
	{
        DEBUGMSG(1, (TEXT("Virtual Alloc ERROR: %d\r\n"), GetLastError()));
		return FALSE;
    }

    // map in SPI registers
    bMapReturn = VirtualCopy( pVMem,
                                  (LPVOID)(S3C2440A_BASE_REG_PA_SPI >> 8),
                                  sizeof(S3C2440A_SPI_REG),
                                  PAGE_READWRITE | PAGE_NOCACHE |PAGE_PHYSICAL);
    if (! bMapReturn) 
	{
        DEBUGMSG(1, (TEXT("Virtual Copy ERROR for SPI regs: %d\r\n"), GetLastError()));
        return FALSE;
    }
    SPI_CtrlBlk.pSPIReg = (volatile S3C2440A_SPI_REG*)(pVMem);

	// reserve space for GPIO
    pVMem = (PUCHAR)VirtualAlloc(0, sizeof(S3C2440A_IOPORT_REG), MEM_RESERVE, PAGE_NOACCESS);    
	if (! pVMem) 
	{
        DEBUGMSG(1, (TEXT("Virtual Alloc ERROR: %d\r\n"), GetLastError()));
		return FALSE;
    }
 
    // map in GPIO registers
    bMapReturn = VirtualCopy(pVMem,
                                 (LPVOID)(S3C2440A_BASE_REG_PA_IOPORT >> 8),
                                 sizeof(S3C2440A_IOPORT_REG),
                                 PAGE_READWRITE | PAGE_NOCACHE |PAGE_PHYSICAL);
    if (! bMapReturn) 
	{
        DEBUGMSG(1, (TEXT("Virtual Copy ERROR for IOP regs: %d\r\n"),  GetLastError()));
        return FALSE;
    }
    SPI_CtrlBlk.pIOPReg = (volatile S3C2440A_IOPORT_REG*)(pVMem);        

	if (SPI_PORT_0 == SPI_CtrlBlk.port)
	{
		// Baud rate=PCLK/2/(SPPRE+1) and PCLK=50M
		SPI_CtrlBlk.pSPIReg->SPPRE0 = 0x04; 
		// Control register
		SPI_CtrlBlk.pSPIReg->SPCON0 = (0x01 << 5) // SMOD:interrupt
							| (0x01 << 4) // ENSCK
							| (0x01 << 3) // MSTR
							| (0x00 << 1) // CPOL/CPHA format A
							| (0x00 << 0); // NO TAGD
		// Master out keep
		SPI_CtrlBlk.pSPIReg->SPPIN0 = 0x01; 

        // Create rx event
        SPI_CtrlBlk.hRxEvent = CreateEvent(NULL, FALSE, FALSE, NULL);

		// Enable interrupt
		if (! KernelIoControl(IOCTL_HAL_REQUEST_SYSINTR, 
				&irq, sizeof(UINT32), &SPI_CtrlBlk.SPI_Intr, sizeof(UINT32), NULL))
		{
			DEBUGMSG(1, (TEXT("ERROR: Failed to request the IIC sysintr.\r\n")));
            return FALSE;
		}

        // Initialize the interrupt
        if( !InterruptInitialize(SPI_CtrlBlk.SPI_Intr, SPI_CtrlBlk.hRxEvent, NULL, 0) ) 
        {
            dwErr = GetLastError();
            DEBUGMSG(1,(TEXT("I2C_Init ERROR: Unable to initialize interrupt: %u\r\n"), dwErr));
            return FALSE;
        }

/*        // Create the IST
        if (! (SPI_CtrlBlk.htSPIThread = CreateThread(NULL, 
											0, 
											(LPTHREAD_START_ROUTINE)SPI_IntrThread, 
											(LPVOID)&SPI_CtrlBlk, 
											0, 
											NULL)))
        {
            dwErr = GetLastError();
            DEBUGMSG(ZONE_ERR,(TEXT("I2C_Init ERROR: Unable to create IST: %u\r\n"), dwErr));
            goto _init_error;
        }
*/

	}

	return TRUE;
}

/*
static DWORD WINAPI SPI_IntrThread(LPVOID pContext)
{
	DWORD dwRet;
	return 0;
}
*/

BOOL SPI_Open(UINT8 dev)
{
	if (SPI_DEVICE_00 == dev)
	{
		// nSS for enable slave
		SPI_CtrlBlk.pIOPReg->GPBDAT &= ~SPI_nSS_0;
		SPI_CtrlBlk.pIOPReg->GPBDAT |= SPI_nSS_1;
	}
	else if (SPI_DEVICE_01 == dev)
	{
		SPI_CtrlBlk.pIOPReg->GPBDAT &= ~SPI_nSS_1;
		SPI_CtrlBlk.pIOPReg->GPBDAT |= SPI_nSS_0;
	}

	return TRUE;		
}

BOOL SPI_Close(UINT8 dev)
{
	if (SPI_DEVICE_00 == dev)
	{
		// nSS for enable slave
		SPI_CtrlBlk.pIOPReg->GPBDAT |= SPI_nSS_0;
	}
	else if (SPI_DEVICE_01 == dev)
	{
		SPI_CtrlBlk.pIOPReg->GPBDAT |= SPI_nSS_1;
	}
	else
	{
		SPI_CtrlBlk.pIOPReg->GPBDAT |= SPI_nSS_0;
		SPI_CtrlBlk.pIOPReg->GPBDAT |= SPI_nSS_1;
	}

	return TRUE;		
}

BOOL SPI_Deinit(UINT8 port)
{
	if (SPI_CtrlBlk.pSPIReg)
		VirtualFree((PVOID)SPI_CtrlBlk.pSPIReg, 0, MEM_RELEASE);
	if (SPI_CtrlBlk.pIOPReg) 
		VirtualFree((PVOID)SPI_CtrlBlk.pIOPReg, 0, MEM_RELEASE);

	CloseHandle(SPI_CtrlBlk.hRxEvent);
	CloseHandle(SPI_CtrlBlk.hSPIThread);

	return TRUE;
}

INT32 SPI_Tranceive(UINT8 * send, UINT8 * recv, UINT8 len)
{
    RETAILMSG (1, (TEXT("+ ")TEXT(__FUNCTION__)TEXT("\r\n")));

	UINT8 i;
	DWORD dwRet;

	for (i = 0; i < len; i++)
	{
		if (SPI_CtrlBlk.pSPIReg->SPSTA0 & SPSTA_REDY)
		{
			if (send)
				SPI_CtrlBlk.pSPIReg->SPTDAT0 = send[i];
			else
				SPI_CtrlBlk.pSPIReg->SPTDAT0 = 0xff;

			dwRet = WaitForSingleObject(SPI_CtrlBlk.hRxEvent, SPI_RX_DELAY);
			
			InterruptDone(SPI_CtrlBlk.SPI_Intr);

			if (dwRet == WAIT_TIMEOUT)
			{
				RETAILMSG (1, (TEXT("- ")TEXT(__FUNCTION__)TEXT(" %d \r\n"),  GetLastError() ));
				return 0;
			}

			if (! recv)
				recv[i] = SPI_CtrlBlk.pSPIReg->SPRDAT0;
		}
	}

    RETAILMSG (1, (TEXT("- ")TEXT(__FUNCTION__)TEXT("\r\n")));

	return len;
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲男人的天堂在线观看| 日韩不卡一区二区三区 | 国产午夜三级一区二区三| 国产日韩欧美不卡| xnxx国产精品| 精品第一国产综合精品aⅴ| 日韩片之四级片| 欧美日韩大陆一区二区| 欧美吞精做爰啪啪高潮| 欧美日韩综合在线| 欧美年轻男男videosbes| 欧美日韩精品一区二区三区四区 | 三级不卡在线观看| 无吗不卡中文字幕| 免费人成在线不卡| 免费在线看成人av| 国产麻豆视频精品| 国产99久久久国产精品| 成人av电影在线| 91传媒视频在线播放| 欧美日韩精品电影| 日韩手机在线导航| wwwwxxxxx欧美| 欧美激情自拍偷拍| 亚洲视频综合在线| 亚洲国产视频直播| 美女高潮久久久| 国产一区二区三区四区五区美女| 国产精品1区2区| 97国产一区二区| 欧美日韩高清一区二区三区| 欧美精品v日韩精品v韩国精品v| 欧美欧美欧美欧美| 久久综合色鬼综合色| 久久久另类综合| 椎名由奈av一区二区三区| 亚洲一卡二卡三卡四卡 | 欧美自拍偷拍午夜视频| 欧美精品色一区二区三区| 精品久久久久一区二区国产| 国产精品久久一级| 亚洲成人资源在线| 国产乱子轮精品视频| 色综合咪咪久久| 日韩亚洲欧美高清| 久久99精品国产麻豆婷婷| 国产精品资源网站| 在线观看www91| 日韩一区二区三| 国产精品日日摸夜夜摸av| 亚洲一二三四久久| 国产高清久久久| 欧美日韩一本到| 久久综合色婷婷| 亚洲成人综合视频| 不卡av在线网| 日韩亚洲欧美在线观看| 亚洲视频1区2区| 久久9热精品视频| 一本色道综合亚洲| 精品国产电影一区二区| 一区二区三区免费观看| 国产综合色在线| 欧美精品自拍偷拍动漫精品| 国产日韩三级在线| 日韩专区在线视频| 不卡的av网站| xf在线a精品一区二区视频网站| 亚洲精品第1页| 国产乱子伦视频一区二区三区| 色就色 综合激情| 中文字幕成人av| 久久精品国产一区二区三| 91国产丝袜在线播放| 久久久99久久| 欧美bbbbb| 色婷婷香蕉在线一区二区| 久久久国产精华| 麻豆国产一区二区| 欧美在线观看视频一区二区| 国产三级欧美三级日产三级99| 五月婷婷综合网| 色婷婷激情综合| 中文字幕在线免费不卡| 国产激情精品久久久第一区二区 | 91麻豆精品国产自产在线观看一区| 国产精品久久久久久久久晋中| 久久99精品国产麻豆婷婷 | 亚洲午夜精品17c| 色综合天天综合色综合av| 国产免费成人在线视频| 理论电影国产精品| 69p69国产精品| 亚洲成人你懂的| 欧美亚洲国产怡红院影院| 国产精品每日更新| 国产91精品在线观看| 久久综合色天天久久综合图片| 久久99精品久久只有精品| 91精品国产综合久久精品麻豆| 亚洲第一福利一区| 日本黄色一区二区| 亚洲免费观看高清完整| 91影院在线观看| 亚洲品质自拍视频| 99精品视频一区| 综合av第一页| 欧美亚洲精品一区| 性欧美大战久久久久久久久| 欧美性生活久久| 五月天一区二区三区| 欧美日本韩国一区| 日韩黄色小视频| 欧美mv和日韩mv的网站| 欧美日韩精品综合在线| 亚洲国产成人porn| 欧美精品第1页| 蜜臀av国产精品久久久久| 精品日本一线二线三线不卡| 久88久久88久久久| 国产亚洲欧美一区在线观看| 国产福利一区二区三区| 国产欧美精品一区二区色综合朱莉| 国产精品一二一区| 亚洲欧洲精品一区二区三区 | 在线观看日产精品| 午夜精品久久久久久不卡8050| 91精品国产综合久久蜜臀| 久久99精品国产麻豆不卡| 久久久久久久性| 99久久99久久精品国产片果冻| 亚洲精品成人在线| 欧美一二三区在线| 国产精品自拍三区| 亚洲免费观看高清在线观看| 欧美精品日韩综合在线| 狠狠色综合日日| 中文字幕在线视频一区| 欧美亚洲高清一区| 久久成人18免费观看| 中文字幕成人在线观看| 在线观看日产精品| 精品写真视频在线观看 | 国产精品一区二区黑丝| 亚洲欧洲韩国日本视频| 欧美精品丝袜中出| 成人午夜在线播放| 午夜视频在线观看一区二区三区| 精品盗摄一区二区三区| 色视频成人在线观看免| 美女mm1313爽爽久久久蜜臀| 国产精品美女www爽爽爽| 欧美巨大另类极品videosbest | 国产亚洲自拍一区| 一本大道久久a久久综合婷婷| 天天综合天天做天天综合| 亚洲成人激情社区| 久久综合色天天久久综合图片| 91免费看`日韩一区二区| 免费观看日韩电影| 中文字幕av资源一区| 欧美中文字幕一区二区三区| 九九**精品视频免费播放| 亚洲视频一区在线观看| 日韩欧美国产午夜精品| 91色porny蝌蚪| 久久国产精品99精品国产| 亚洲欧美日韩久久精品| 精品国产青草久久久久福利| 91麻豆国产香蕉久久精品| 极品美女销魂一区二区三区 | 亚洲精品成a人| 久久在线免费观看| 欧美色图一区二区三区| 国产成人99久久亚洲综合精品| 午夜成人在线视频| 中文字幕欧美一| 亚洲精品一区二区三区福利| 欧美在线观看一二区| 不卡电影一区二区三区| 久久国产成人午夜av影院| 亚洲观看高清完整版在线观看| 国产精品婷婷午夜在线观看| 精品免费视频.| 欧美精品v国产精品v日韩精品| 91麻豆自制传媒国产之光| 国产精品小仙女| 开心九九激情九九欧美日韩精美视频电影 | 欧美一区二区三区视频在线观看 | 精品国精品国产尤物美女| 欧美三级电影一区| 播五月开心婷婷综合| 国产高清不卡二三区| 国产在线精品不卡| 免费成人小视频| 亚洲综合自拍偷拍| 1024成人网色www| 国产女人aaa级久久久级| 国产丝袜在线精品| 欧美精品一区视频|