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

📄 simd.c

📁 8032底层驱动部分。因为可以移植 所以单独来拿出来
💻 C
📖 第 1 页 / 共 5 页
字号:
/*****************************************************************************
*  Copyright Statement:
*  --------------------
*  This software is protected by Copyright and the information contained
*  herein is confidential. The software may not be copied and the information
*  contained herein may not be used or disclosed except with the written
*  permission of MediaTek Inc. (C) 2005
*
*  BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
*  THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
*  RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
*  AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
*  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
*  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
*  NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
*  SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
*  SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
*  THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
*  NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
*  SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
*
*  BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
*  LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
*  AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
*  OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
*  MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. 
*
*  THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
*  WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
*  LAWS PRINCIPLES.  ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
*  RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
*  THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
*
*****************************************************************************/

/*****************************************************************************
 *
 * Filename:
 * ---------
 *    simd.c
 *
 * Project:
 * --------
 *   Maui_Software
 *
 * Description:
 * ------------
 *   This Module defines the SIM driver.
 *
 * Author:
 * -------
 * -------
 *
 *============================================================================
 *             HISTORY
 * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
 *------------------------------------------------------------------------------
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 *
 *------------------------------------------------------------------------------
 * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
 *============================================================================
 ****************************************************************************/
#if ( (!defined(MT6208)) && (!defined(FPGA)) )
#include  	"drv_comm.h"
#include 	"reg_base.h"
#include 	"intrCtrl.h"
#include    "sim_hw.h"
#include    "sim_al.h"
#include    "sim_sw.h"
#include    "drvpdn.h"
#include    "drv_hisr.h"
#ifdef MT6318
#include 	"pmic6318_sw.h"
#endif   /*MT6318*/
#include    "init.h"

#ifdef SIM_ADDDMA
#include    "dma_hw.h"
#include    "dma_sw.h"
#endif   /*SIM_ADDDMA*/
#include		"usim_drv.h"

#define SIM_DEFAULT_TOUT_VALUE      0x983
#define SIM_CMD_TOUT_VALUE          0x1400
kal_uint32 TOUTValue = SIM_DEFAULT_TOUT_VALUE;
static kal_uint8  TOUT_Factor=1;
/*Maybe changed when the unit of the HW TOUT counter is changed!!*/
const kal_uint8  ClkStopTimeTable[3][2]={  {0,5},
                                           {3,11},
                                           {6,19}
                                    };

Sim_Card SimCard;
kal_uint8 reset_index;
kal_uint8 PTS_data[4];
kal_bool  TS_HSK_ENABLE;
kal_char sim_dbg_str[100];

#ifdef MT6205B
   #ifdef __SIM_ENHANCED_SPEED__
      static kal_bool PTS_check = KAL_TRUE;
   #else
      static kal_bool PTS_check = KAL_FALSE;
   #endif
#else /*!MT6205B*/
   static kal_bool PTS_check = KAL_TRUE;
#endif   /*!MT6205B*/

void SIM_Initialize(kal_uint8 format, kal_uint8 power);

#if ( (!defined(MT6205)) && (!defined(MT6205B)) )
   kal_uint8                        sim_dmaport;
#ifdef SIM_ADDDMA
   static DMA_INPUT                 sim_input;
   #ifdef MT6218B
      #pragma arm section rwdata = "INTERNRW", zidata = "INTERNZI"
      static kal_uint8          baud_data[640];
      #pragma arm section rwdata , zidata
      static DMA_FULLSIZE_HWMENU    sim_menu;
      extern void dma_ch1_stop(void);
      extern void dma_ch1_init(kal_uint32 dstaddr, kal_uint16 len, kal_uint8 limiter);
      extern void dma_ch1_start(kal_uint32 srcaddr);
   #else /*!MT6218B*/
      static DMA_HWMENU             sim_menu;
   #endif   /*MT6218B*/
#endif   /*SIM_ADDDMA*/
#endif   /*MT6218,MT6218B*/

#ifdef SIM_ADDDMA
   #if ( (defined(MT6205)) || (defined(MT6205B)) )
      kal_bool SIM_DMAIni(kal_bool Tx)	/*(KAL_TRUE ==> transmit, KAL_FALSE ==> receive)*/
      {
         if (DMA2_CheckRunStat())
      			DMA2_Stop();
      
         if (DMA2_CheckITStat())
      			DMA2_Stop();
      			
      	if (Tx == KAL_TRUE)
      	{
      		/* Size = 8bit, sinc en, dinc disable, hw management, 1 trans/dma cycle, USB master,Interrupt disable */
      		DRV_WriteReg(DMA2_CONTRL,DMA_CON_SimTxNormal);
      	}
      	else
      	{
      		/* Size = 8bit, sinc disable, dinc enable, hw management, 1 trans/dma cycle, USB master,Interrupt disable */
      		DRV_WriteReg(DMA2_CONTRL,DMA_CON_SimRxNormal);
      	}
      	return KAL_TRUE;
      }
   #endif   /*MT6205,MT6205B*/
#endif /*SIM_ADDDMA*/

#if ( (!defined(MT6205)) && (!defined(MT6205B)) )
void SIM_L1Reset(void)
{
   SIM_DisAllIntr();
   
#ifdef SIM_ADDDMA
   if (sim_dmaport != 0)
      DMA_Stop(sim_dmaport);
#endif   /*SIM_ADDDMA*/
   
   SIM_FIFO_Flush();
   //De-activate SIM card
   if (DRV_Reg(SIM_CTRL)&SIM_CTRL_SIMON)
   {
      SimCard.State = SIM_WaitRejectDone;
      DRV_WriteReg(SIM_IRQEN,(SIM_IRQEN_SIMOFF|SIM_IRQEN_NATR));
      DRV_Reg(SIM_CTRL) &= ~SIM_CTRL_SIMON;
   }
   else
   {
      SIM_Initialize(SimCard.Data_format,SimCard.Power);
   }
}
#endif   /*! MT6205,MT6205B*/
kal_uint32 SIM_GetCurrentTime(void)
{
	return (DRV_Reg32(0x80200230));	
}
kal_uint32 SIM_GetDurationTick(kal_uint32 previous_time, kal_uint32 current_time)
{
	kal_uint32 result;
#if ( defined(MT6218B) || defined(MT6205B) )
   ASSERT(0);
#endif   /*MT6218B, MT6205B*/

	if (previous_time > current_time)
	{
#if ( defined(MT6219) || defined(MT6228) )
		result = 0x80000 - previous_time + current_time;
#else /*MT6229, MT6227, MT6226, MT6217, MT6226M*/
      result = 0x1000000 - previous_time + current_time;
#endif   /*MT6228, MT6229, MT6227, MT6226, MT6226M*/
	}
	else
	{
		result = current_time - previous_time;
	}
	return result;
}

void SIM_SetRXTIDE(kal_uint16 RXTIDE)
{
	kal_uint16 TIDE;
	TIDE = DRV_Reg(SIM_TIDE);
	TIDE &= ~SIM_TIDE_RXMASK;
	TIDE |= (RXTIDE-1);
	DRV_WriteReg(SIM_TIDE,TIDE);
}

void SIM_SetTXTIDE(kal_uint16 _TXTIDE)
{
	kal_uint16 TIDE;
	TIDE = DRV_Reg(SIM_TIDE);
	TIDE &= ~SIM_TIDE_TXMASK;
	TIDE |= ((_TXTIDE+1) <<8);
	DRV_WriteReg(SIM_TIDE,TIDE);
}

#ifdef NoT0CTRL
kal_uint8 SIM_CheckSW(kal_uint16 ACK)
{
   if ((ACK & 0x00f0) == 0x0060)
			return KAL_TRUE;
	if ((ACK & 0x00f0) == 0x0090)
		return KAL_TRUE;
   
   return KAL_FALSE;
}
#endif   /*NoT0CTRL*/

kal_bool SIM_ResetNoATR(kal_uint8 pow)	//For normal case reset
{
	//Only enable SIM interrupt
	
	SimCard.State = SIM_WAIT_FOR_ATR;
	reset_index = 0;
	SimCard.Power = pow;

	//Deactivate the SIM card
	SIM_L1Reset();
	
	SIM_WaitEvent(SimCard,RST_READY);
	if (SimCard.result == SIM_SUCCESS)
	{
	   return KAL_TRUE;
	}
	else
	{
	   return KAL_FALSE;
	}
}

void SIM_Initialize(kal_uint8 format, kal_uint8 power)
{
	kal_uint16 tmp;
	kal_uint16 Conf;
	
	//tmp = *(volatile kal_uint16 *)0x80140070;
	//if (tmp != 1)
	   //while(1);
	SimCard.Data_format = format;
	SimCard.Power = power;
	dbg_print("SIM_Initialize power: %d, format: %d, TS_HSK_ENABLE: %d", power, format, TS_HSK_ENABLE);
	//Setup the SIM control module, SIM_BRR, SIM_CONF
	//Set SIMCLK = 13M/4, and BAUD RATE = default value(F=372,D=1);
	DRV_WriteReg(SIM_BRR,(SIM_BRR_CLK_Div4 | SIM_BRR_BAUD_Div372));
   
	if (format != SIM_direct)
	{	
	   Conf = SIM_CONF_InDirect;
	}
	else
	{
	   Conf = SIM_CONF_Direct;
	}
	
//#ifndef PMIC_PRESENT
#ifdef MT6318
   if (power == SIM_30V)
      pmic_vsim_sel(VSIM_3);
   else
      pmic_vsim_sel(VSIM_1_8);
#elif( (!defined(MT6318))&& (!defined(MT6305)) )   //No any PMIC
	if (power != SIM_30V)
	{
		Conf |= SIM_CONF_SIMSEL;
	}
	#else /*Phone setting*/
	if (power == SIM_30V)
	{
		Conf |= SIM_CONF_SIMSEL;
	}
	#endif   /*Phone setting*/
	if (TS_HSK_ENABLE == KAL_TRUE)
	   Conf |= (SIM_CONF_TXHSK | SIM_CONF_RXHSK);

   DRV_WriteReg(SIM_CONF,Conf);
   
   if (TS_HSK_ENABLE == KAL_TRUE)
   {
      SIM_SetRXRetry(1);
	   SIM_SetTXRetry(1);
   }
   else
   {
      SIM_SetRXRetry(0);
	   SIM_SetTXRetry(0);
   }

	//Set the ATRTout as 9600etu
	SIM_SetTOUT(TOUTValue);
   
   // reset interrupts, flush rx, tx fifo
	SIM_FIFO_Flush();
		
	//Set the txfifo and rxfifo tide mark
	SIM_SetRXTIDE(1);
	
	//Read Interrupt Status
	tmp = DRV_Reg(SIM_STS);
	
	SimCard.State = SIM_WAIT_FOR_ATR;
	
	//Enable Interrupt
	DRV_WriteReg(SIM_IRQEN,(SIM_IRQEN_Normal & ~SIM_IRQEN_RXERR));
   SimCard.recDataErr = KAL_FALSE;
	//activate the SIM card, and activate the SIMCLK
	
	SIM_Active();
	////dbg_print("SIM ACtive\r\n");
}

kal_bool SIM_PTSProcess(kal_uint8 *TxBuffaddr, kal_uint8 Txlength)	//Bool lalasun
{
	kal_uint8    index;
	kal_uint8    tmp;

	#if defined(__USIM_DRV__)
	if(DRV_Reg(SIM_COUNT))
		USIM_CLR_FIFO();
	#endif
	
	for (index = 0; index < Txlength; index++)
	{

⌨️ 快捷键说明

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