📄 lv23002m.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 + -