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

📄 iis.c

📁 s3c44b0平台初始化及其iis驱动程序
💻 C
字号:
/*
;************************************************************************************************************
;*									  北京精仪达盛科技有限公司
;*                                     	    研    发    部
;*
;*                                 	    http://www.techshine.com
;*
;*--------------------------------------------- 文件信息 ----------------------------------------------------                                      
;*
;* 文件名称 : IIS.c	
;* 文件功能 : 该文件为S3C44B0硬件平台配置具体函数的初始化。
;* 补充说明 : 
;*-------------------------------------------- 最新版本信息 -------------------------------------------------
;* 修改作者 : ARM7开发小组
;* 修改日期 : 2004/04/25
;* 版本声明 : V1.0.1
;*-------------------------------------------- 历史版本信息 -------------------------------------------------
;* 文件作者 : ARM7开发小组
;* 创建日期 : 2004/04/20
;* 版本声明 : v1.0.0
;*-----------------------------------------------------------------------------------------------------------
;*-----------------------------------------------------------------------------------------------------------
;************************************************************************************************************
;*/
#include "..\..\startup44b0\inc\44b.h"
#include "..\..\startup44b0\inc\44blib.h"
#include "..\..\startup44b0\inc\def.h"
#include "..\inc\iis.h"

void _WrL3Addr(U8 data);
void _WrL3Data(U8 data,int halt);

void __irq TR_Done(void);

unsigned char 	*Buf, *_temp;
volatile unsigned int size=0;
volatile int Tx_Done;
volatile int Rx_Done;

/*
*************************************************************************************************************
- 函数名称 : void Init1341(void)
- 函数说明 : 初始化UDA1341的程序
- 输入参数 : 无
- 输出参数 : 无
*************************************************************************************************************
*/
void Init1341(void)
{
    /****** Port Initialize ******/
    rPCONE  = 0x29968;	  	//L3D PE3; L3M PE6; L3C PE4 (out)
    rPUPE  |= 0X00;			//0x58;	      	//disable(pull-up)

    setL3M;
    setL3C;					//L3M=H(start condition)
    						//L3C=H(start condition)

    /****** L3 Interface ******/
    _WrL3Addr(0x14 + 2);	//status (000101xx+10)
    
#ifdef FS2205KHZ
    _WrL3Data(0x60,0); 		//0,1,10,000,0 reset,256fs,no DCfilter,iisBUS //256fs
#else
    _WrL3Data(0x50,0); 		//0,1,01,000,0 reset,384fs,no DCfilter,iisBUS
#endif

    _WrL3Addr(0x14 + 2); 	//status (000101xx+10)
    
#ifdef FS2205KHZ
    _WrL3Data(0x20,0); 		//0,0,10,000,0 no reset,256fs,no DCfilter,iis //256fs
#else
    _WrL3Data(0x10,0); 		//0,0,01,000,0 no reset,384fs,no DCfilter,iis
#endif
    
    _WrL3Addr(0x14+2); 		//status (000101xx+10)
    _WrL3Data(0x83,0);  	//1,0,0,0,0,0,11 OGS=0,IGS=0,ADC_NI,DAC_NI,sngl speed,AonDon
    

}

/*
*************************************************************************************************************
- 函数名称 : void _WrL3Addr(U8 data)
- 函数说明 : L3地址写程序
- 输入参数 : data
- 输出参数 : 无
*************************************************************************************************************
*/
void _WrL3Addr(U8 data)
{	
    S32 i,j;

    clrL3M;						//L3M=L
    setL3C;						//L3C=H

    for(j=0;j<4;j++);			//tsu(L3) > 190ns

    for(i=0;i<8;i++)		
    {
		if(data&0x1)			//if data bit is 'H'
		{
	    	clrL3C;				//L3C=L
	    	setL3D;				//L3D=H		    
	    	for(j=0;j<8;j++);	//tcy(L3) > 500ns
	    	setL3C;				//L3C=H
	    	setL3D;				//L3D=H
	    	for(j=0;j<8;j++);	//tcy(L3) > 500ns
		}
		else					//if data bit is 'L'
		{
	    	clrL3C;				//L3C=L
	    	clrL3D;				//L3D=L
	    	for(j=0;j<8;j++);	//tcy(L3) > 500ns
	    	setL3C;				//L3C=H
	    	clrL3D;				//L3D=L
	    	for(j=0;j<8;j++);	//tcy(L3) > 500ns
		}
		data >>=1;
    }
    setL3C;
    setL3M;						//L3M=H,L3C=H
}

/*
*************************************************************************************************************
- 函数名称 : void _WrL3Data(U8 data,int halt)
- 函数说明 : L3数据写程序
- 输入参数 : data,halt
- 输出参数 : 无
*************************************************************************************************************
*/
void _WrL3Data(U8 data,int halt)
{
    S32 i,j;
    
    if(halt)
    {
        setL3C;	    			//L3C=H(while tstp, L3 interface halt condition)
        for(j=0;j<4;j++);   	//tstp(L3) > 190ns
    }
    setL3M;	    				//L3M=H(in data transfer mode)	
    for(j=0;j<4;j++);	    	//tsu(L3)D > 190ns

    
    for(i=0;i<8;i++)
    {
        if(data&0x1)			//if data bit is 'H'
        {
	    	clrL3C;				//L3C=L
            setL3D;				//L3D=H
            for(j=0;j<8;j++);	//tcy(L3) > 500ns
            setL3C;				//L3C=H,L3D=H
	    	setL3D;
            for(j=0;j<8;j++);	//tcy(L3) > 500ns
        }
        else					//if data bit is 'L'
        {
            clrL3C;				//L3C=L
	    	clrL3D;				//L3D=L
            for(j=0;j<8;j++);	//tcy(L3) > 500ns
            setL3C;				//L3C=H
	    	clrL3D;				//L3D=L
            for(j=0;j<8;j++);	//tcy(L3) > 500ns
        }
        data>>=1;
    }
    setL3C;
    setL3M;						//L3M=H,L3C=H
}

/*
*************************************************************************************************************
- 函数名称 : void Test_Iis(void)
- 函数说明 : 检测IIS的程序
- 输入参数 : 无
- 输出参数 : 无
*************************************************************************************************************
*/  
void __irq TR_Done(void)
{
    rI_ISPC=BIT_BDMA0;	//clear pending bit
    Rx_Done=1;
    Tx_Done=1;
}
/*
*************************************************************************************************************
- 函数名称 : void Test_Iis(void)
- 函数说明 : IIS的接收程序
- 输入参数 : 无
- 输出参数 : 无
*************************************************************************************************************
*/
void Iis_Rx(void)
{
    unsigned int i;
    unsigned short *rxdata;

    Rx_Done=0;
    Tx_Done = 0;
    ChangePllValue(0x47,0x5,0x1);			//改换主频为MCLK=45.1584MHz <-- Fin 8MHz -->45.142857Mhz

    pISR_BDMA0=(unsigned)TR_Done;
    rINTMSK=~(BIT_GLOBAL|BIT_BDMA0);

    /****** Rx Buf initialize ******/
    rxdata = (unsigned short *)malloc(0x70000); //128KB
    
    for(i=0;i<0x70000;i++)
	*(rxdata+i)=0;

    rNCACHBE0= ((int)rxdata>>12) + ( (((int)rxdata>>12) +0x20)<<16 );//non-cachable 65KB*2
   
    /****** BDMA0 Initialize ******/
    rBDISRC0 = (1<<30)+(3<<28)+((int)rIISFIF);	                    //Half word,fix,IISFIF
    rBDIDES0 = (2<<30)+(1<<28)+(int)(rxdata);	                    //IO2M,increment,rxdata
    rBDICNT0 = (1<<30)+(1<<26)+(3<<22)+(0<<21)+(0<<20) + 0x70000*2;
  
    rBDICNT0 |= (1<<20);		//enable
    rBDCON0 = 0x0<<2;   											//iis,reserved,end_int,1_tx,DMA disable,COUNT
    
        /****** IIS Initialize ******/
    rIISCON=0x012;				//Rx DMA enable,Tx idle,prescaler enable
    rIISMOD=0x049;				// 0 01 0 0 1 1 01 Master,Rx,L-ch=low,iis,16bit ch.,codeclk=256fs,lrck=32fs 
   // rIISPSR=0x11;				//Prescaler_A/B enable, value=3
    rIISPSR=0x0;				//Prescaler_A/B enable, value=0
    rIISFCON=0x500;				//Tx/Rx DMA,Tx/Rx FIFO --> start piling....
 
    /****** Rx start ******/
    rIISCON |=0x1;

    while(!Rx_Done);
    Rx_Done = 0;

    /****** Rx Stop(Master) ******/
    rIISCON  = 0x0;    //IIS stop
    rIISFCON = 0x0;    //for FIFO flush
    rBDICNT0 = 0x0;    //BDMA stop

    rBDISRC0 = (1<<30)+(1<<28)+(int)(rxdata);	//Half word,inc,Buf
    rBDIDES0 = (1<<30)+(3<<28)+((int)rIISFIF);	//M2IO,fix,IISFIF
    rBDICNT0 = (1<<30)+(1<<26)+(3<<22)+(1<<21)+(0<<20) + 0x70000*2;
    //iis,reserve,done_int,auto-reload/start,DMA enable,COUNT
    rBDICNT0 |= (1<<20);					//enable
    rBDCON0 = 0x0<<2;
    
  
    /****** IIS Initialize ******/
    rIISCON =0x22;						//Tx DMA enable,Rx idle,prescaler enable
    rIISMOD =0x89;						//Master,Tx,L-ch=low,iis,16bit ch.,codeclk=384fs,lrck=32fs
   //rIISPSR=0x11;						//Prescaler_A/B enable, value=3 MCLK=45.1584MHz/8 = 5.6448MHz 
    rIISPSR =0x0;						//Prescaler_A/B enable, value=0 MCLK=45.1584MHz/2 = 5.6448*4MHz
    
    rIISFCON =0xa00;							//Tx DMA,Tx FIFO --> start piling....
    rIISCON |= 0x1;							/****** IIS Tx Start ******/

//    while(!Tx_Done);
 //   Tx_Done=0;
 // }  
 //   free(rxdata);
//    Cache_Flush();
    rNCACHBE0=0x0;

//    rINTMSK=BIT_GLOBAL;
    ChangePllValue(0x43,0x3,0x1);		//Fin=8MHz, Fout=60MHz
//    Uart_Init(0,115200,0);
}

⌨️ 快捷键说明

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