📄 tea5767.c
字号:
#include <iom8.h>
#include "TEA5767.h"
#include "global.h"
void Init_Tea5767(unsigned long freq)
{
//初始化IO端口
DDRC |= (CLK|READ_WRITE|DATA);
DDRC &= ~MPX;
Set_Freq(freq);
}
void Write_5767(unsigned char * senddata)
{
Send_START(); //发送开始
// PORTC &= ~CLK;
// delay_us(10);
PORTC |= READ_WRITE ;
Send_Byte(*senddata); //load 95.5M pll 0x2d7e 0b01101111 0b01111110
Send_Byte(*(senddata+1));
Send_Byte(*(senddata+2));
Send_Byte(*(senddata+3));
Send_Byte(*(senddata+4));
}
void Read_5767(unsigned char * receivedata)
{
Receive_START();
// PORTC &= ~CLK;
// delay_us(10);
// PORTC &= ~READ_WRITE ;
receivedata[0] = Receive_Byte();
receivedata[1] = Receive_Byte();
receivedata[2] = Receive_Byte();
receivedata[3] = Receive_Byte();
receivedata[4] = Receive_Byte();
}
void Send_Byte(unsigned char data)
{
unsigned char temp,i;
DDRC |= DATA;
for (i = 0; i<8; i++)
{
temp = 0x80;
PORTC &= ~CLK;
temp &= data;
if (temp == 0)
{
PORTC &= ~DATA;
}
else
{
PORTC |= DATA;
}
delay_us(10);
PORTC |= CLK;
data = (data << 1);
delay_us(10);
}
}
unsigned char Receive_Byte(void)
{
unsigned char temp,data,i;
data = 0x00;
DDRC &= ~DATA;
for ( i = 0; i<8; i++)
{
PORTC &= ~CLK;
PORTC |= CLK;
// delay_us(10);
temp = PINC & DATA;
if (temp == DATA)
{
data |= 0x01;
}
PORTC &= ~CLK;
// delay_us(10);
if (i != 7)
data = (data << 1);
}
return data;
}
//
void Send_START(void)
{
PORTC &= ~CLK;
PORTC |= READ_WRITE ;
delay_us(10);
PORTC &= ~READ_WRITE;
delay_us(10);
PORTC |= READ_WRITE ;
PORTC &= ~CLK;
}
void Receive_START(void)
{
PORTC &= ~CLK;
PORTC &= ~READ_WRITE ;
delay_us(10);
PORTC |= READ_WRITE;
delay_us(10);
PORTC &= ~READ_WRITE ;
PORTC &= ~CLK;
}
//由PLL计算频率
unsigned long PLL_2_Freq(unsigned int pll)
{
unsigned long frequency;
unsigned char hlsi;
unsigned int npll=0;
npll=pll;
hlsi=0;//WriteData[2]&0x10;
if (hlsi)
frequency=(unsigned long)((float)npll*(float)8.192-225); //频率单位:KHz
else
frequency=(unsigned long)((float)npll*(float)8.192+225); //频率单位:KHz
return (frequency+50);
}
//由频率计算PLL
//Freq 0.1M
unsigned int Freq_2_PLL(unsigned long Freq) // 955,2d6e
{
unsigned char hlsi;
unsigned int pll=0;
hlsi=0;//WriteData[2]&0x10;
if (hlsi)
pll=(unsigned int)(((float)Freq+225)*4/32.768); //频率单位:k
else
pll=(unsigned int)(((float)Freq-225)*4/32.768); //频率单位:k
return pll;
}
void Search_up(unsigned long freq)
{
unsigned char Data[5];
unsigned int pll;
pll = Freq_2_PLL(freq);
Data[0] = ((pll>>8)&0x003F)|0x40 ;
Data[1] = pll&0x00FF;
Data[2] = 0xE0; //向上搜索
Data[3] = 0x90;
Data[4] = 0x00;
Write_5767(Data);
}
void Search_down(unsigned long freq)
{
unsigned char Data[5];
unsigned int pll;
pll = Freq_2_PLL(freq);
Data[0] = ((pll>>8)&0x003F)|0x40 ;
Data[1] = pll&0x00FF;
Data[2] = 0x20; //向下搜索
Data[3] = 0x90;
Data[4] = 0x00;
Write_5767(Data);
}
void Set_Freq(unsigned long freq)
{
unsigned char Data[5];
unsigned int pll;
pll = Freq_2_PLL(freq);
Data[0] = (pll>>8)&0x003F ;
Data[1] = pll&0x00FF;
Data[2] = 0x20;
Data[3] = 0x90;
Data[4] = 0x00;
Write_5767(Data);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -