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

📄 mt6189.c

📁 最新MTK手机软件源码
💻 C
字号:
/*******************************************************************************
 *
 * Filename:
 * ---------
 * MT6189.c
 *
 * Project:
 * --------
 *   MAUI
 *
 * Description:
 * ------------
 *
 *      MT6189 I2C/3-wire Interface
 *
 * Author:
 * -------
 * -------
 *
 *******************************************************************************/
#include "l1audio_def.h"

#if (defined(MT6189A1) || defined(MT6189A2))

void GPIO_ModeSetup(kal_uint16 pin, kal_uint16 conf_dada);
void GPIO_InitIO(char direction, char port);
void GPIO_WriteIO(char data,char port);
char GPIO_ReadIO(char port);
void GPO_ModeSetup(kal_uint16 pin, kal_uint16 conf_dada);
void GPO_WriteIO(char data, char port);

#define USE_I2C

/* GPIO definition */
/// The following GPIO should be customized according to different platforms.
#define CRYCLK 41       /// GPIO #41:  32.768 kHz clock
#ifdef __CUST_NEW__
   #ifdef USE_3_WIRE
      extern const char gpio_fm_3wire_le_pin;
   #endif
   extern const char gpio_fm_i2c_sda_pin;
   extern const char gpio_fm_i2c_scl_pin;

   #ifdef USE_3_WIRE
      #define LE     gpio_fm_3wire_le_pin       /// LE pin
   #endif
   #define SDA    gpio_fm_i2c_sda_pin        /// I2C data pin
   #define SCL    gpio_fm_i2c_scl_pin        /// I2C clock pin
#else /* __CUST_NEW__ */
   #define LE     4        /// GPIO #4:  LE pin
   #define SDA   53        /// GPIO #53: I2C data pin
   #define SCL   24        /// GPIO #24: I2C clock pin
#endif /* __CUST_NEW__ */

#if defined(MT6205B) || defined(MT6208)
   #ifdef __CUST_NEW__
      extern const char gpio_fm_ext_switch_pin;
      #define FM_SWITCH   gpio_fm_ext_switch_pin   /// external switch for FM/speech
   #else /* __CUST_NEW__ */
      #define FM_SWITCH   3   /// GPIO #3:  external switch for FM/speech
   #endif /* __CUST_NEW__ */
#define FM_PATH     0
#define SPEECH_PATH 1

void ExtSwitchInit(void) {
   #ifndef __CUST_NEW__
   GPIO_ModeSetup(FM_SWITCH, 0);
   GPIO_InitIO(1, FM_SWITCH);
   #endif /* __CUST_NEW__ */
   GPIO_WriteIO(FM_SWITCH, SPEECH_PATH);
}

void SwitchExtFMPath(uint8 if_on) {
   if (if_on) GPIO_WriteIO(FM_SWITCH, FM_PATH);
   else GPIO_WriteIO(FM_SWITCH, SPEECH_PATH);
}

#endif

uint16  i2c_dummy_cnt;
#define I2C_DUMMY_DELAY(_delay) for (i2c_dummy_cnt = _delay; i2c_dummy_cnt!=0; i2c_dummy_cnt--)

uint8 const FM_RADIO_INPUT_LEVEL_THRESHOLD = 3;

void SerialCommCryClkOn(void)
{
#if !defined( MT6205B ) && !defined( MT6208 )
   GPIO_ModeSetup(CRYCLK,3); /* 32.768kHz reference frequency */
#else
   #ifdef __CUST_NEW__
      extern const char gpio_fm_srclkena_pin;
      GPO_ModeSetup(gpio_fm_srclkena_pin, 0);
      GPO_WriteIO(1, gpio_fm_srclkena_pin);
   #else /* __CUST_NEW__ */
      /// Config SRCLKENA as GPO2 and set the output to 1 to keep 26M clock alive.
      GPO_ModeSetup(2, 0);
      GPO_WriteIO(1, 2);
   #endif /* __CUST_NEW__ */
#endif
}

void SerialCommCryClkOff(void)
{
#if !defined( MT6205B ) && !defined( MT6208 )
   GPIO_ModeSetup(CRYCLK,0);
#else
   #ifdef __CUST_NEW__
      extern const char gpio_fm_srclkena_pin;
      GPO_ModeSetup(gpio_fm_srclkena_pin, 1);
   #else /* __CUST_NEW__ */
      /// Config GPO2 as SRCLKENA.
      GPO_ModeSetup(2, 1);
   #endif /* __CUST_NEW__ */
#endif
}


#ifdef USE_3_WIRE
void SerialCommInit(void)
{
   #ifndef __CUST_NEW__
   GPIO_ModeSetup(SCL,0);
   GPIO_ModeSetup(SDA,0);
   GPIO_ModeSetup(LE,0);
   #endif /* __CUST_NEW__ */
   GPIO_InitIO(1,SCL);
   GPIO_InitIO(1,LE);
   GPIO_WriteIO(1,SCL);
   GPIO_InitIO(0,SDA);
   GPIO_WriteIO(0,LE);
}

void SerialCommRelease(void)
{
   GPIO_WriteIO(0,SCL);
   GPIO_WriteIO(0,SDA);
   GPIO_WriteIO(0,LE);
}

uint8 SerialCommTxByte(uint8 addr, uint8 data)
{
   int16 i;
   GPIO_WriteIO(1, LE);
   GPIO_InitIO(1,SDA);
   for(i=8; --i>=0;){
      GPIO_WriteIO( 0, SCL);
      GPIO_WriteIO(data&0x01, SDA);
      data >>= 1;
#if defined( MT6228 )
      I2C_DUMMY_DELAY(5);
#endif
      GPIO_WriteIO( 1, SCL);
#if defined( MT6228 )
      I2C_DUMMY_DELAY(5);
#endif
   }
   for(i=8; --i>=0;){
      GPIO_WriteIO( 0, SCL);
      GPIO_WriteIO(addr&0x01, SDA);
      addr >>= 1;
#if defined( MT6228 )
      I2C_DUMMY_DELAY(5);
#endif
      GPIO_WriteIO( 1, SCL);
#if defined( MT6228 )
      I2C_DUMMY_DELAY(5);
#endif
   }
   GPIO_InitIO(0,SDA);
   GPIO_WriteIO(0, LE);
   I2C_DUMMY_DELAY(10);
}

uint8 SerialCommRxByte(uint8 addr, uint8 *data)
{
   int16 i;
   uint16 dataRead=0;
   *data = 0;
   GPIO_WriteIO(1, LE);
   GPIO_InitIO(1,SDA);
   for(i=8; --i>=0;){
      GPIO_WriteIO( 0, SCL);
      GPIO_WriteIO(addr&0x01, SDA);
      GPIO_WriteIO(1, SCL);
      addr >>= 1;
#if defined( MT6228 )
      I2C_DUMMY_DELAY(5);
#endif
   }
   GPIO_InitIO(0,SDA);
   GPIO_WriteIO(0, LE);
   for(i=0; i<8; i++){
      GPIO_WriteIO( 0, SCL);
#if defined( MT6228 )
      I2C_DUMMY_DELAY(5);
#endif
      GPIO_WriteIO( 1, SCL);
      dataRead = GPIO_ReadIO(SDA);
      *data |= (dataRead << i);
   }
   I2C_DUMMY_DELAY(10);
}

#elif defined USE_I2C

void SerialCommInit(void)
{
   #ifndef __CUST_NEW__
   GPIO_ModeSetup(SCL,0);
   GPIO_ModeSetup(SDA,0);
   #endif /* __CUST_NEW__ */
   GPIO_InitIO(1,SCL);
}

void SerialCommRelease(void)
{
   GPIO_WriteIO(1,SCL);
   GPIO_WriteIO(1,SDA);
}

/* Start sequence of I2C

   SDA 

⌨️ 快捷键说明

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