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

📄 lv23002m.c

📁 三洋tuner的资料
💻 C
字号:
#include "LV23002M.h"
// add nop() after every set or get if need

unsigned int ctl_data;

void cl_delay(int delay)
{
	while(delay--);
}


void lv23002_in_hi(unsigned char addr, int data)
{
	unsigned long in_data = (addr << 24) | data;
	int n;

	// Start
	SET_CE_LOW();
	SET_CL_HIGH();

	for(n = 0; n < 32; ++n)
	{
		// One bit
		SET_CL_LOW();
		if((in_data >> (31 - n)) & 0x1) SET_DI_HIGH();
		else SET_DI_LOW();
		SET_CL_HIGH();

		if(n == 7) SET_CE_HIGH();
	}

	SET_CE_LOW();
}

void lv23002_in_low(unsigned char addr, unsigned char *data)
{
	unsigned long in_data = (addr << 24) | (data[0] << 16) |
		(data[1] << 8) | data[2];
	int n;
	
	// Start
	SET_CE_LOW();
	SET_CL_LOW();
	
	for(n = 0; n < 32; ++n)
	{
		// One bit
		SET_CL_LOW();

		if(n == 8) SET_CE_HIGH();

		if((in_data >> (31 - n)) & 0x1) SET_DI_HIGH();
		else SET_DI_LOW();

		SET_CL_HIGH();
	}
	
	SET_CE_LOW();
}

void lv23002_out_hi(unsigned char addr, unsigned char *out_pdata)
{
	int n;
	unsigned long out_data = 0;
	unsigned long temp = 0;

	SET_CE_LOW();
	SET_CL_HIGH();
	for(n = 0; n < 8; ++n)
	{
		SET_CL_LOW();
		if((addr >> (7 - n)) & 0x1) SET_DI_HIGH();
		else SET_DI_LOW();

		SET_CL_HIGH();
	}

	SET_CE_HIGH();
	cl_delay(1);
	for(n = 0; n < 24; n++)
	{
		out_data <<= 1;
		SET_CL_LOW();
		out_data |= GET_DO();
		
		SET_CL_HIGH();
	}

	SET_CE_LOW();

	out_pdata[0] = out_data >> 16;
	out_pdata[1] = out_data >> 8;
	out_pdata[2] = out_data;
}

void lv23002_out_low(unsigned char addr, unsigned char *out_pdata)
{
	int n;
	unsigned long out_data = 0;
	
	SET_CE_LOW();
	SET_CL_LOW();
	for(n = 0; n < 8; ++n)
	{
		SET_CL_LOW();
		if((out_data >> (7 - n)) & 0x1) SET_DI_HIGH();
		else SET_DI_LOW();
		
		SET_CL_HIGH();
	}
	
	SET_CL_LOW();
	SET_CE_HIGH();
	for(n = 0; n < 24; ++n)
	{
		out_data <<= 1;
		SET_CL_LOW();
		out_data |= GET_DO();
		SET_CL_HIGH();
	}

	SET_CL_LOW();
	SET_CE_LOW();
	
	out_pdata[0] = out_data >> 16;
	out_pdata[1] = out_data >> 8;
	out_pdata[2] = out_data;
}

int Calculate(unsigned int nFre)
{
	unsigned int  val;
	int  return_Fre = 0;
	unsigned int  i;
	
	val = (nFre + 10700) / 50;
	for(i = 0; i < 24; i++)
	{
		return_Fre = return_Fre << 1;
		return_Fre |= val & 1;
		val = val >> 1;
	}
	
	return_Fre = return_Fre + 0xC0;
	return return_Fre;
}

void Tuner_init(unsigned long frequency)
{
	unsigned int nFrequency = Calculate(frequency);
	ctl_data = 0x530000;//0x4A0000 for MUTE, 0x420000 for receive
   	lv23002_in_hi(0x14, nFrequency);
	lv23002_in_hi(0x94, ctl_data);
}

⌨️ 快捷键说明

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