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

📄 cs1100.c

📁 MTK cresilicon FM IC
💻 C
字号:

#include "l1audio_def.h"

#if defined(CS1100)

// The following GPIO should be customized according to different platforms
   extern const char gpio_fm_i2c_sda_pin;
   extern const char gpio_fm_i2c_scl_pin;


   #define SDA    gpio_fm_i2c_sda_pin        /// I2C data pin
   #define SCL    gpio_fm_i2c_scl_pin        /// I2C clock pin

#define CRYCLK  		2 
#define CLKMOD 			5        

#define I2C_DELAY 	    32  
#define OUTPUT		    1
#define INPUT		    0

#define SET_FM_I2C_DATA_OUTPUT		GPIO_InitIO(OUTPUT, SDA);
#define SET_FM_I2C_DATA_INPUT		GPIO_InitIO(INPUT,SDA);
#define SET_FM_I2C_CLK_OUTPUT		GPIO_InitIO(OUTPUT, SCL);
#define SET_FM_I2C_DATA_HIGH		GPIO_WriteIO(1,SDA);
#define SET_FM_I2C_DATA_LOW		    GPIO_WriteIO(0,SDA);
#define SET_FM_I2C_CLK_HIGH			GPIO_WriteIO(1,SCL);
#define SET_FM_I2C_CLK_LOW			GPIO_WriteIO(0,SCL);
#define GET_FM_I2C_DATA				GPIO_ReadIO(SDA)

void GPIO_ModeSetup(kal_uint16 pin, kal_uint16 conf_dada);
void GPO_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);


uint8 const FM_RADIO_INPUT_LEVEL_THRESHOLD = 3;


void SerialCommStart(void) /* start or re-start */
{
	volatile kal_uint32 j; 
	SET_FM_I2C_CLK_OUTPUT; 
	SET_FM_I2C_DATA_OUTPUT; 
	
	SET_FM_I2C_CLK_HIGH; 
	SET_FM_I2C_DATA_HIGH; 
	
	for(j=0;j<I2C_DELAY;j++);
	SET_FM_I2C_DATA_LOW; 
	
	for(j=0;j<I2C_DELAY;j++);
	SET_FM_I2C_CLK_LOW; 
}

void SerialCommStop(void)
{
	volatile kal_uint32 j; 
	SET_FM_I2C_CLK_OUTPUT; 
	SET_FM_I2C_DATA_OUTPUT; 
	
	SET_FM_I2C_CLK_LOW; 
	SET_FM_I2C_DATA_LOW; 
	
	for(j=0;j<I2C_DELAY;j++);
	SET_FM_I2C_CLK_HIGH; 
	
	for(j=0;j<I2C_DELAY;j++);
	SET_FM_I2C_DATA_HIGH; 
}


uint8 SerialCommTxByte(uint8 data) /* return 0 --> ack */
{
	volatile signed char i;
	volatile kal_uint32 j;
	uint8 ack;

	for (i=7;i>=0;i--)
	{	
		if (data & (1<<i))
		{
			SET_FM_I2C_DATA_HIGH;
		}
		else
		{
			SET_FM_I2C_DATA_LOW;
		}
		for(j=0;j<I2C_DELAY;j++);
		SET_FM_I2C_CLK_HIGH;
		
		for(j=0;j<I2C_DELAY;j++);
		SET_FM_I2C_CLK_LOW;
		
		for(j=0;j<I2C_DELAY;j++);
	}
	/* don't care bit, 9th bit */
	
	SET_FM_I2C_DATA_LOW;	
	SET_FM_I2C_DATA_INPUT;
	SET_FM_I2C_CLK_HIGH;
	ack = GET_FM_I2C_DATA;
	for(j=0;j<I2C_DELAY;j++);
	SET_FM_I2C_CLK_LOW;
	SET_FM_I2C_DATA_OUTPUT;

	return ack;
}

void SerialCommRxByte(uint8 *data, uint8 ack)
{
	volatile signed char i;
	volatile kal_uint32 j;
	kal_uint8 get_byte=0;

	SET_FM_I2C_DATA_INPUT;

	for (i=7;i>=0;i--)
	{	/* data bit 7~0 */
		SET_FM_I2C_CLK_HIGH;
		for(j=0;j<I2C_DELAY;j++);
		if (GET_FM_I2C_DATA)
			get_byte |= (1<<i);
		for(j=0;j<I2C_DELAY;j++);
		SET_FM_I2C_CLK_LOW;
		for(j=0;j<I2C_DELAY;j++);
	}
	/* don't care bit, 9th bit */
	SET_FM_I2C_DATA_OUTPUT;
	
	if(ack)
	{
		SET_FM_I2C_DATA_HIGH;
	}
	else
	{
		SET_FM_I2C_DATA_LOW;
	}
	
	for(j=0;j<I2C_DELAY;j++);
	SET_FM_I2C_CLK_HIGH;
	for(j=0;j<I2C_DELAY;j++);
	SET_FM_I2C_CLK_LOW;

	*data=get_byte;
}

void SerialCommInit(void)
{
   GPIO_ModeSetup(SCL,0);
   GPIO_ModeSetup(SDA,0);
  
   SET_FM_I2C_CLK_OUTPUT;
}

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

void SerialCommCryClkOn(void)
{
    extern const char gpio_fm_srclkena_pin;
   GPIO_ModeSetup(gpio_fm_srclkena_pin,2); // set clock mode 
   GPIO_SetClkOut(CLKMOD,4); //set to clock 32.768KHz 
   
	//GPO_ModeSetup(CRYCLK,2); // 32.768kHz reference frequency 
 
}

void SerialCommCryClkOff(void)
{
  //	GPO_ModeSetup(CRYCLK,0);   
        extern const char gpio_fm_srclkena_pin;
      GPO_ModeSetup(gpio_fm_srclkena_pin, 1);
}



#endif

⌨️ 快捷键说明

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