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

📄 si4133_b.c

📁 频率综合芯片SI4133的实例源码
💻 C
字号:
//////////////////////////////////////////////////////

//   config.h

/////////////////////////////////////////////////////

#ifndef __CONFIG_H
#define __CONFIG_H

#include <reg52.h>
#include <intrins.h>

//This segment should not be modified
#ifndef TRUE
#define TRUE  1
#endif

#ifndef FALSE
#define FALSE 0
#endif
// 数据类型定义  
typedef unsigned char  uint8;       /* defined for unsigned 8-bits integer variable  无符号8位整型变量  */
typedef          char  int8;        /* defined for signed 8-bits integer variable  有符号8位整型变量  */
typedef unsigned int   uint16;      /* defined for unsigned 16-bits integer variable  无符号16位整型变量 */
typedef          int   int16;       /* defined for signed 16-bits integer variable   有符号16位整型变量 */
typedef unsigned long  uint32;      /* defined for unsigned 32-bits integer variable  无符号32位整型变量 */
typedef          long  int32;       /* defined for signed 32-bits integer variable   有符号32位整型变量 */
typedef float          fp32;        /* single precision floating point variable (32bits) 单精度浮点数(32位长度) */

// 以下用户的包含文件
#include "si4133.h"

#endif

 

/////////////////////////////////////////////////

// SI4133.h

/////////////////////////////////////////////////

#ifndef _SI4133_H
#define _SI4133_H

//Address Define
#define Addr_MainConfiguartion  0x0
#define Addr_PhaseDetectorGain  0x1
#define Addr_PowerDown          0x2
#define Addr_RF1_N_Divider      0x3
#define Addr_RF2_N_Divider      0x4
#define Addr_IF_N_Divider       0x5
#define Addr_RF1_R_Divider      0x6
#define Addr_RF2_R_Divider      0x7
#define Addr_IF_R_Divider       0x8

//Command Define
//register 0
#define AUXSEL                  3           // 1 = AUX force to low
                                            // 3 = AUX Lock Detect
#define IF_OUT_DIVIDER          0           // 0 = IFout = IFVco Frequency
                                            // 1 = IFout = IFVco Frequency / 2
                                            // 2 = IFout = IFVco Frequency / 4
                                            // 3 = IFout = IFVco Frequency / 8
#define LPWR                    1           // 0 = Rload < 500 normal power mode
                                            // 1 = Rload >= 500 low power mode
#define AUTOPDB                 1           // 0 = Software powerdown is controlled by register 2
                                            // 1 = All on
#define AUTOKP                  1           // 0 = auto kp defined by user
                                            // 1 = auto kp defined auto
#define Cmd_MainConfig         ((AUXSEL << 12) + (IF_OUT_DIVIDER << 10) + (LPWR << 5) + \
                                 (AUTOPDB << 3) + (AUTOKP << 2))

//register 1        // N value       Kpi
#define IF_PHASE_DETECT         0   // <2048   00
                                            // 2048 - 4095   01
                                            // 4096 - 8191   10
                                            // >8191   11
#define RF2_PHASE_DETECT        0           // <4096         00
                                            // 4096 - 8191   01
                                            // 8192 - 16388  10
                                            // >16388   11
#define RF1_PHASE_DETECT        0           // <8192         00
                                            // 8192 - 16383  01
                                            // 16384 - 32767 10
                                            // >32767   11
#define Cmd_PhaseDetect         ((IF_PHASE_DETECT << 4) + (RF2_PHASE_DETECT << 2) + RF1_PHASE_DETECT)

//register 2
#define PDIB_IF                 1           // 0 = IF synthesizer power down
                                            // 1 = IF synthesizer on
#define PDRB_RF                 1           // 0 = RF synthesizer power down
                                            // 1 = RF synthesizer on
#define Cmd_PowerDown           ((PDIB_IF << 1) + PDRB_RF)

/*************************************************************
*函数名称:Si4133_Locked
*函数功能:检测锁定位
*参    数:无
*返    回:TRUE ,锁定; FALSE ,丢失
*************************************************************/
extern bit Si4133_Locked(void);

/*************************************************************
*函数名称:Si4133_SendData
*函数功能:向Si4133发送数据
*参    数:dat,数据;addr,地址
*返    回:无
*************************************************************/
extern void Si4133_SendData(uint32 dat,uint8 addr);

#endif

 

//////////////////////////////////////////////////

// SI4133.c

//////////////////////////////////////////////////

/*************************************************************
* 公司名称:
* 模 块 名:SI4133驱动程序
* 创 建 人:
* 创建日期:2006/04/26
* 修 改 人:
* 修改日期:
* 功能描述:
* 其他说明:
* 版    本:
*************************************************************/
#include "config.h"

#define _Nop() _nop_()

//口线定义
sbit SENB   = P2^7;    // 芯片使能
sbit SCLK   = P1^0;    // 时钟
sbit SDATA  = P1^1;    // 数据
sbit AUXOUT = P0^5;    // 锁定测试

/*************************************************************
*函数名称:Si4133_Locked
*函数功能:检测锁定位
*参    数:无
*返    回:TRUE ,锁定; FALSE ,丢失
*************************************************************/
bit Si4133_Locked(void)
{
 AUXOUT = 1;           // 断开OC
 _Nop();
 return ((AUXOUT == 0)?TRUE:FALSE);  // 返回AUXOUT
}

/*************************************************************
*函数名称:Si4133_SendData
*函数功能:向Si4133发送数据
*参    数:dat ,数据
*          addr,地址
*返    回:无
*************************************************************/
void Si4133_SendData(uint32 dat,uint8 addr)
{
    uint32 sedata;
    uint8 i;

 sedata = ((dat << 4) | (addr & 0x0f));  // 数据 + 地址
    sedata <<= 10;                           // 左移10位
 
 SENB  = 1;
 SCLK  = 0;
 SDATA = 0;
 SENB  = 0;
    for(i = 0;i < 22;i++)
    {
        SDATA = ((sedata & 0x80000000)?1:0); // 输出数据
        SCLK  = 1;        // 上升沿数据锁存
        SCLK  = 0;
        sedata <<= 1;
    }
    SENB  = 1;
}

 

⌨️ 快捷键说明

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