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

📄 rda5800_serialcomm.c

📁 SI4702 FM收音机芯片应用在MTK手机上的
💻 C
字号:

#if (defined(RDA5800))    
#include "l1audio_def.h"

#define DURATION_INIT_1 	20//600ns 
#define DURATION_INIT_2		20//600ns 
#define DURATION_INIT_3 	20//600ns 

#define DURATION_START_1	20//600ns 
#define DURATION_START_2	24//600ns 
#define DURATION_START_3	24//800ns 

#define DURATION_STOP_1	24//800ns 
#define DURATION_STOP_2	20//600ns 
#define DURATION_STOP_3	50//1300ns

#define DURATION_HIGH		26//900ns 
#define DURATION_LOW		70//1600ns

#define POWER_SETTLING		5*1000*80//80ms//50~100ms

/* GPIO definition */
//#define CRYCLK  6				/// 32.768 kHz clock
//#define RST     3       ///  LE pin
//#define SDA   47  		  /// I2C data pin  
//#define SCL   48        ///  I2C clock pin

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);

#define DELAY(DURATION)		{unsigned int i; for(i = 1; i <= (DURATION); i++){}}

void SerialCommStart(void) /* start or re-start */
{
  // GPIO_WriteIO(0,SCL);
 //  DELAY(DURATION_LOW);
   GPIO_InitIO(1,SDA);
   GPIO_WriteIO(1,SDA);
   GPIO_WriteIO(1,SCL);
   DELAY(DURATION_START_1);
   GPIO_WriteIO(0,SDA);   
   DELAY(DURATION_START_2);
   GPIO_WriteIO(0,SCL);
   DELAY(DURATION_START_3);/* start condition */
}

void SerialCommStop(void)
{
   GPIO_WriteIO(0,SCL);
   DELAY(DURATION_LOW);
   GPIO_InitIO(1,SDA);
   GPIO_WriteIO(0,SDA);
   DELAY(DURATION_STOP_1);
   GPIO_WriteIO(1,SCL);
   DELAY(DURATION_STOP_2);
   GPIO_WriteIO(1,SDA); /* stop condition */
   DELAY(DURATION_STOP_3);
}

uint8 SerialCommTxByte(uint8 sdat) /* return 0 --> ack */
{
    int32 i;
    uint8 temp_value = 0;
    for(i=7; (i>=0)&&(i<=7); i--){
        GPIO_WriteIO( 0, SCL); /* low */
        DELAY(DURATION_LOW);
        if(i==7) GPIO_InitIO(1,SDA);
        DELAY(DURATION_LOW);
   
        GPIO_WriteIO(((sdat>>i)&0x01), SDA);
        DELAY(DURATION_LOW/2);
        GPIO_WriteIO( 1, SCL); /* high */
        DELAY(DURATION_HIGH);
    }
    GPIO_WriteIO(0, SCL); /* low */
    DELAY(DURATION_LOW);
    GPIO_InitIO(0,SDA);/* input  */
    DELAY(DURATION_LOW/2);
    GPIO_WriteIO(1, SCL); /* high */
    DELAY(DURATION_HIGH);
    temp_value = GPIO_ReadIO(SDA);
    //kal_prompt_trace(MOD_MED_V,"SerialCommTxByte()   temp_value =%d ,GPIO_DATA=%d ",temp_value,(SDA));  
    return temp_value;
}

void SerialCommRxByte(uint8 *data, uint8 ack)
{
     int32 i;
     uint32 dataCache;

     dataCache = 0;
     for(i=7; (i>=0)&&(i<=7); i--){
        GPIO_WriteIO(0, SCL);
        DELAY(DURATION_LOW);
        if(i==7)GPIO_InitIO(0,SDA);
        DELAY(DURATION_LOW);
        GPIO_WriteIO(1, SCL);
        DELAY(DURATION_HIGH);
        dataCache |= (GPIO_ReadIO(SDA)<<i);
        DELAY(DURATION_LOW/2);
    }
   
    GPIO_WriteIO(0, SCL);
    DELAY(DURATION_LOW);
    GPIO_InitIO(1,SDA);
    GPIO_WriteIO(ack, SDA);
    DELAY(DURATION_LOW/2);
    GPIO_WriteIO(1, SCL);
    DELAY(DURATION_HIGH);
    *data = (uint8)dataCache;
    //kal_prompt_trace(MOD_MED_V,"SerialCommRxByte()   dataCache =%d ",dataCache);
}

void SerialCommInit(void)
{

     GPIO_WriteIO(0,SDA);     //必须拉低,否则在测试模式
     DELAY(DURATION_LOW*30);   
// GPIO_WriteIO(0,SDA);
   GPIO_WriteIO(0,RST);
//    GPIO_WriteIO(1, SCL);
   DELAY(DURATION_INIT_1); 
    GPIO_WriteIO(1,RST);
   GPIO_WriteIO(1,SDA);
}

void SerialCommCryClkOn(void)
{
   
   GPIO_ModeSetup(CRYCLK,2); /* 32.768kHz reference frequency */
   
}

void SerialCommCryClkOff(void)
{
      GPIO_WriteIO(0,RST);               
      DELAY(DURATION_LOW);
      GPIO_ModeSetup(CRYCLK,0);
      GPIO_WriteIO(1,SDA);
      GPIO_WriteIO(1,SCL);
   //  GPIO_WriteIO(0,RST);
  //  GPIO_WriteIO(0,SDA);
  //  GPIO_WriteIO(0, SCL);
  
}

void InitRst(void)
{

   GPIO_ModeSetup(SCL,0);
   GPIO_ModeSetup(SDA,0);
   GPIO_ModeSetup(RST,0);

       
  GPIO_InitIO(1,SCL);
   GPIO_InitIO(1,SDA);
  GPIO_InitIO(1,RST);
   
 //  GPIO_ModeSetup(RST,0);
  // GPIO_InitIO(1,RST);
   GPIO_WriteIO(0,RST);
  
}

#endif

⌨️ 快捷键说明

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