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

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

?? spi.c

?? 2410TK測試代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
//====================================================================
// File Name : Spi.c
// Function  : S3C2410 SPI Test
// Program   : 
// Date      : 
// Version   : 0.0
// History
//   0.0 : 
//         12/19/2003 SOP
//====================================================================

#include <string.h>
#include "2410addr.h"
#include "2410lib.h"
#include "spi.h"
#include "def.h"

#define spi_count 0x80
#define SPI_BUFFER _NONCACHE_STARTADDRESS

void __irq Spi_Int(void);
//void __irq Spi_M_Rx_Int(void);
//void __irq Spi_S_Tx_Int(void);
void __irq Dma1Tx_Int(void);
void __irq Dma1Rx_Int(void);

volatile char *spiTxStr,*spiRxStr;
volatile int endSpiTx;
volatile int tx_dma1Done;
volatile int rx_dma1Done;
unsigned int spi_rGPECON,spi_rGPEDAT,spi_rGPEUP;
unsigned int spi_rGPGCON,spi_rGPGDAT,spi_rGPGUP;
/**********************************************************************
 *	             SMDK2400 SPI configuration                           *
 *  GPG2=nSS0, GPE11=SPIMISO0, GPE12=SPIMOSI0, GPE13=SPICLK0          *
 *  GPG3=nSS1, GPG5 =SPIMISO1, GPG6 =SPIMOSI1, GPG7 =SPICLK1          *
 *  SPI1 is tested by OS(WINCE). So, Only SPI0 is tested by this code *               
 **********************************************************************/

//========================================================================
void SPI_Port_Init(int MASorSLV)
{
    spi_rGPECON=rGPECON;
    spi_rGPEDAT=rGPEDAT;
    spi_rGPEUP=rGPEUP;
    rGPEUP&=~(0x3800);
    rGPEUP|=0x2000;
//    rGPEUP|=(0x3800);
    rGPECON=((rGPECON&0xf03fffff)|0xa800000);

    spi_rGPGCON=rGPGCON;
    spi_rGPGDAT=rGPGDAT;
    spi_rGPGUP=rGPGUP;
    rGPGUP|=0x4;
    if(MASorSLV==1)
    {
        rGPGCON=((rGPGCON&0xffffffcf)|0x10); // Master(GPIO_Output)
        rGPGDAT|=0x4; // Activate nSS 
    }
    else
    	rGPGCON=((rGPGCON&0xffffffcf)|0x30); // Slave(nSS)
}

//========================================================================
void SPI_Port_Return(void)
{
    rGPECON=spi_rGPECON;
    rGPEDAT=spi_rGPEDAT;
    rGPEUP=spi_rGPEUP;

    rGPGCON=spi_rGPGCON;
    rGPGDAT=spi_rGPGDAT;
    rGPGUP=spi_rGPGUP;
}

//========================================================================
void Test_Spi_MS_int(void)
{
    char *txStr,*rxStr;
    SPI_Port_Init(0); 
    Uart_Printf("[SPI0 Interrupt Tx/Rx Test]\n");
    Uart_Printf("Connection SPIMOSI (CON4 - 2 pin) into SPIMISO (CON4 - 3 pin)\n");   //12/19/2003 SOP

    pISR_SPI0=(unsigned)Spi_Int;
    endSpiTx=0;
//    spiTxStr="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    spiTxStr="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";    
    spiRxStr=(char *) SPI_BUFFER;
    txStr=(char *)spiTxStr;
    rxStr=(char *)spiRxStr;
    rSPPRE0=0x1;	//if PCLK=67.5Mhz,SPICLK=16.875Mhz
    rSPCON0=(1<<5)|(1<<4)|(1<<3)|(1<<2)|(0<<1)|(0<<0);//int,en-SCK,master,low,A,normal
    rSPPIN0=(0<<2)|(1<<1)|(0<<0);//dis-ENMUL,SBO,release
    rINTMSK=~(BIT_SPI0);

    while(endSpiTx==0);

    rSPCON0=(0<<5)|(0<<4)|(1<<3)|(1<<2)|(0<<1)|(0<<0);//Poll,dis-SCK,master,low,A,normal
    *spiRxStr='\0';//attach End of String(Null)
    Uart_Printf("Tx Strings: %s\n",txStr);
    Uart_Printf("Rx Strings: %s\n",rxStr+1);//remove first dummy data
    if(strcmp(rxStr+1,txStr)==0)
        Uart_Printf("\nSPI0 Interrupt Tx/Rx Test Passed.\n");
    else 
        Uart_Printf("\nFailed !!!\n");
    SPI_Port_Return();
}

//========================================================================
void __irq Spi_Int(void)
{
    unsigned int status;
    ClearPending(BIT_SPI0); 
    status=rSPSTA0;
    if(rSPSTA0&0x6) 
    	Uart_Printf("Data Collision or Multi Master Error(0x%x)!!!\n", status);
    while(!(rSPSTA0&0x1));   //Check ready state
    *spiRxStr++=rSPRDAT0;    //First Rx data is garbage data
    if(*spiTxStr!='\0') 
    	rSPTDAT0=*spiTxStr++;
    else
    {
		rINTMSK|=BIT_SPI0;
	    endSpiTx=1;
    }
}

//========================================================================
void Test_Spi_MS_poll(void)
{
    int i;
    char *txStr,*rxStr;
    SPI_Port_Init(0); 
    Uart_Printf("[SPI Polling Tx/Rx Test]\n");
    Uart_Printf("Connection SPIMOSI (CON4 - 2 pin) into SPIMISO (CON4 - 3 pin)\n");  //12/19/2003 SOP
    endSpiTx=0;
    spiTxStr="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
    spiRxStr=(char *) SPI_BUFFER;
    txStr=(char *)spiTxStr;
    rxStr=(char *)spiRxStr;

    rSPPRE0=0x1;	//if PCLK=67.5Mhz,SPICLK=16.875Mhz
    rSPCON0=(0<<5)|(1<<4)|(1<<3)|(1<<2)|(0<<1)|(0<<0);//Polling,en-SCK,master,low,A,normal
    rSPPIN0=(0<<2)|(1<<1)|(0<<0);//dis-ENMUL,SBO,release
    
    while(endSpiTx==0)
    {
		if(rSPSTA0&0x1)   //Check Tx ready state    
		{
	    	if(*spiTxStr!='\0')
				rSPTDAT0=*spiTxStr++;
	    	else
				endSpiTx=1;
	    	while(!(rSPSTA0&0x1));   //Check Rx ready state 
			*spiRxStr++=rSPRDAT0;
		}
    }

    rSPCON0=(0<<5)|(0<<4)|(1<<3)|(1<<2)|(0<<1)|(0<<0);//Polling,dis-SCK,master,low,A,normal
    *(spiRxStr-1)='\0';//remove last dummy data & attach End of String(Null)
    
    Uart_Printf("Tx Strings: %s\n",txStr);
    Uart_Printf("Rx Strings: %s\n",rxStr);
    
    if(strcmp(rxStr,txStr)==0)
        Uart_Printf("\nSPI Polling Tx/Rx Test Passed.\n");
    else 
        Uart_Printf("\nFailed !!!\n");
        
    SPI_Port_Return();
}

//========================================================================
void Test_Spi_M_Tx_DMA1(void)
{

    int i,first,second;
    unsigned char *tx_ptr;
    SPI_Port_Init(1); // Master(GPIO) 
    Uart_Printf("[SPI DMA1 Master Tx test]\n");
    Uart_Printf("This test should be configured two boards\nStart Rx first.\n");

    tx_ptr=(unsigned char *) SPI_BUFFER;
    for(i=0; i<spi_count; i++)
		*(tx_ptr+i)=i; 

    tx_dma1Done=0;

    pISR_DMA1 = (unsigned)Dma1Tx_Int;
    rINTMSK=~(BIT_DMA1);

    //Step1. SPI init
    rSPPRE0=0x1;	//if PCLK=67.5Mhz,SPICLK=16.875Mhz
//    rSPCON0=(2<<5)|(1<<4)|(1<<3)|(1<<2)|(0<<1)|(0<<0);//DMA1,en-SCK,master,low,A,normal
    rSPCON0=(2<<5)|(1<<4)|(1<<3)|(1<<2)|(1<<1)|(0<<0);//DMA1,en-SCK,master,low,B,normal    
    rSPPIN0=(0<<2)|(1<<1)|(0<<0);//dis-ENMUL,SBO,release

    //Step2. DMA1 init 
    rDISRC1=(unsigned)tx_ptr;	//Address of Memory
    rDISRCC1=(0<<1)|(0);		//AHB(Memory), inc
    rDIDST1=(unsigned)0x59000010;//Address of SPTDAT Register
    rDIDSTC1=(1<<1)|(1);		//APB(SPI), fix
    rDCON1=(1<<31)|(0<<30)|(1<<29)|(0<<28)|(0<<27)|(3<<24)|(1<<23)|(1<<22)|(0<<20)|(spi_count);
    //handshake, sync PCLK, TC int, single tx, single service, SPI, H/W request, 
    //off-reload, byte, 128Bytes

    rGPGDAT&=0xfffffffb; // Activate nSS 
    rDMASKTRIG1=(0<<2)|(1<<1)|(0);    //run, DMA1 channel on, no-sw trigger 

    while(tx_dma1Done==0);

    while(!(rSPSTA0&0x1)); // Tx is done

    rGPGDAT|=0x4; // Deactivate nSS 
//    rSPCON0=(0<<5)|(0<<4)|(1<<3)|(1<<2)|(0<<1)|(0<<0);//poll,dis-SCK,master,low,A,normal
    rSPCON0=(0<<5)|(0<<4)|(1<<3)|(1<<2)|(1<<1)|(0<<0);//poll,dis-SCK,master,low,B,normal
    Uart_Printf("\nDMA1 transfer end\n");
    for(i=0; i<spi_count; i++)
		Uart_Printf("0x%02x,",*tx_ptr++);
    SPI_Port_Return();
}

//========================================================================
void __irq Dma1Tx_Int(void)
{

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美在线一区二区三区| 国产一区999| 欧美精品久久久久久久久老牛影院 | 成人午夜精品一区二区三区| 久久夜色精品国产噜噜av| 国产精品系列在线播放| 国产精品国产三级国产| 日韩精品在线一区二区| 久久精品二区亚洲w码| 精品三级av在线| 国产传媒久久文化传媒| 亚洲精品乱码久久久久久| 精品视频在线看| 精品亚洲国内自在自线福利| 国产欧美日韩不卡| 91成人免费在线| 久久精品国产成人一区二区三区| 久久色视频免费观看| 一本到一区二区三区| 日韩高清不卡一区二区| 久久综合久久鬼色中文字| 9久草视频在线视频精品| 亚洲1区2区3区视频| 久久久亚洲欧洲日产国码αv| 91免费看视频| 久久精品国产精品亚洲红杏| 中文字幕日韩精品一区| 日韩欧美久久久| 972aa.com艺术欧美| 精品在线免费视频| 一区二区三区日韩欧美| 欧美xxxxxxxx| 欧美性色综合网| 成人午夜免费视频| 美美哒免费高清在线观看视频一区二区 | 奇米色一区二区三区四区| 欧美韩国一区二区| 91精品国产欧美一区二区18 | 日韩午夜精品视频| 色菇凉天天综合网| 国内一区二区在线| 亚洲黄色录像片| 国产午夜亚洲精品理论片色戒 | 老司机精品视频导航| 亚洲人被黑人高潮完整版| 精品日韩在线一区| 欧美日本韩国一区| 91久久一区二区| 成人性视频网站| 精品一区二区三区免费播放| 五月综合激情网| 一区二区在线观看视频| 国产欧美日韩不卡免费| 精品粉嫩超白一线天av| 制服丝袜国产精品| 欧美自拍偷拍午夜视频| 91原创在线视频| 成人手机电影网| 国产精品18久久久久久久久| 久久精品久久综合| 丝袜诱惑制服诱惑色一区在线观看 | 亚洲不卡在线观看| 一区二区三区四区中文字幕| 中文字幕一区二区三区不卡在线| 久久久综合视频| 日韩欧美不卡一区| 日韩一区二区三区免费观看| 91精品国产综合久久国产大片| 欧美系列日韩一区| 欧美专区日韩专区| 欧洲亚洲精品在线| 555www色欧美视频| 欧美精品xxxxbbbb| 337p亚洲精品色噜噜| 欧美一区二区在线不卡| 91精品国产91综合久久蜜臀| 91精品国产麻豆| 欧美一区日本一区韩国一区| 69堂精品视频| 欧美电影免费观看高清完整版在线| 欧美一卡2卡三卡4卡5免费| 欧美精品乱人伦久久久久久| 911国产精品| 精品国产一区二区精华 | 国产亚洲欧美激情| 国产欧美精品一区aⅴ影院| 欧美韩国日本一区| 亚洲视频每日更新| 亚洲一区在线观看免费| 日本视频免费一区| 狠狠狠色丁香婷婷综合激情| 国产精品一区二区久久精品爱涩| 国产精品99久久久| 99re这里只有精品视频首页| 欧美亚洲国产怡红院影院| 91精品国产综合久久国产大片| 精品国产99国产精品| 欧美激情一区二区三区全黄| 亚洲男帅同性gay1069| 亚洲一区二区三区不卡国产欧美| 日韩激情一二三区| 国产一区二区精品久久| 91麻豆自制传媒国产之光| 欧美日韩中文字幕精品| 精品国产污网站| 国产精品久久久爽爽爽麻豆色哟哟| 亚洲影视在线播放| 久久99蜜桃精品| 91在线免费播放| 91精品国产一区二区| 国产精品欧美极品| 日韩精品亚洲一区二区三区免费| 国产一区亚洲一区| 在线观看国产精品网站| 日韩欧美高清dvd碟片| 亚洲天天做日日做天天谢日日欢| 午夜精品久久久久久久蜜桃app| 国产河南妇女毛片精品久久久 | 99精品视频在线观看| 欧美嫩在线观看| 日本一区免费视频| 日韩精品一级二级 | 8x8x8国产精品| 国产精品久久久久国产精品日日| 日本午夜一本久久久综合| 99免费精品视频| 欧美精品一区二区高清在线观看| 亚洲综合色区另类av| 国产自产视频一区二区三区| 欧美三级蜜桃2在线观看| 国产精品看片你懂得| 久久精品国产免费| 欧美日韩另类国产亚洲欧美一级| 欧美激情在线一区二区三区| 蜜桃视频一区二区三区在线观看 | 成人午夜电影网站| 欧美一区二区三区人| 亚洲精品视频在线看| 国产一区久久久| 3d成人h动漫网站入口| 一区二区三区在线视频观看| 国产a区久久久| 久久久久久毛片| 美女一区二区久久| 欧美韩国日本综合| 奇米影视在线99精品| 欧美精品久久久久久久多人混战 | 99re在线精品| 国产精品日日摸夜夜摸av| 精品一区二区精品| 日韩一区二区三区在线| 婷婷久久综合九色综合绿巨人| 91老司机福利 在线| 1024成人网| eeuss鲁片一区二区三区| 久久精品免视看| 国产一区二区三区免费播放| 日韩欧美综合一区| 日本怡春院一区二区| 欧美一区二区三区视频免费播放| 午夜视频在线观看一区| 欧美日韩一区在线| 亚洲va国产天堂va久久en| 欧美午夜视频网站| 亚洲丶国产丶欧美一区二区三区| 欧美午夜精品电影| 首页国产欧美久久| 欧美高清dvd| 久久不见久久见免费视频1| 欧美一级理论性理论a| 免费人成黄页网站在线一区二区| 日韩亚洲欧美高清| 精品一区二区三区香蕉蜜桃| 久久日韩粉嫩一区二区三区| 国产一区二区按摩在线观看| 久久精品日产第一区二区三区高清版| 国产制服丝袜一区| 国产日韩精品久久久| 97se亚洲国产综合自在线观| 亚洲激情综合网| 欧美视频完全免费看| 免费精品视频在线| 久久精品夜色噜噜亚洲a∨| 成人美女视频在线观看18| 亚洲乱码中文字幕| 欧美日韩日日夜夜| 极品美女销魂一区二区三区| 欧美国产精品专区| 在线看一区二区| 美日韩一区二区| 中文字幕第一区| 欧美亚洲日本国产| 麻豆精品视频在线| 中文字幕中文乱码欧美一区二区| 91国产视频在线观看| 激情五月婷婷综合网| 亚洲日本韩国一区| 91精品一区二区三区在线观看| 国产黄色91视频| 亚洲第一精品在线|