抄收!谢谢!
最好再加上配套的功能显示及lsb\usb\cw\rtty\am\fm模式控制!
转一段无绳电话程序,看能否借鉴?
//****
#include <mc145162.h>
//---
uint8 mccontrolr;
uint16 mc14bitsauxcount;
uint16 mc12bitsrefcount;
uint16 mctxcount;
uint16 mcrxcount;
uint32 mc32bitsbuf;
#define mc145162_debug_out 1
//---
//mc145162初始化
void mc145162_mod_setup(void);
void mc145162_mod_reference(void);
void mc145162_tx_rx_counter(void);
void mc145162_ini(void)
{
mccontrolr = 0x88;
mc14bitsauxcount = 10240;
mctxcount = 39983;
mcrxcount = 45180;
mc145162_pin_install();
mc145162_mod_setup();
mc145162_mod_reference();
mc145162_tx_rx_counter();
}
//---
//发送control命令集
void mc145162_senddata(uint32 data,uint8 bits,uint8 mod);
void mc145162_mod_setup(void)
{
#define mc145162_test_bit_output 1
mc32bitsbuf = mccontrolr | 0x80;
#if mc145162_test_bit_output
mc32bitsbuf |= 0x20;
#endif
mc32bitsbuf <<= 24;
mc145162_pin_enb(1);
mc145162_senddata(mc32bitsbuf,8,false);
mc145162_pin_enb(0);
}
//---
//发送reference命令集
void mc145162_mod_reference(void)
{
if(mc14bitsauxcount > 16383)mc14bitsauxcount = 16383;
if(mc12bitsrefcount > 4095)mc12bitsrefcount = 4095;
if(mc14bitsauxcount < 16)mc14bitsauxcount = 16;
if(mc12bitsrefcount < 16)mc12bitsrefcount = 16;
#if mc145162_debug_out
{static char data[50];
sprintf(data,"mca=%d\r\n",mc14bitsauxcount);
dprintf(data);
}
#endif
#define mc145162_mod_reference_bit_aux (0x01 << 30)
#define mc145162_mod_reference_bit_tx0 (0x00 << 29)
#define mc145162_mod_reference_bit_rx0 (0x00 << 28)
#define mc145162_mod_reference_12b_ref (mc12bitsrefcount << 16)
#define mc145162_mod_reference_bit_rs1 (0x00 << 15)
#define mc145162_mod_reference_bit_rs2 (0x00 << 14)
#define mc145162_mod_reference_bit_auxd(mc14bitsauxcount << 0)
mc32bitsbuf = mc145162_mod_reference_bit_aux |
mc145162_mod_reference_bit_tx0 |
mc145162_mod_reference_bit_rx0 |
mc145162_mod_reference_12b_ref |
mc145162_mod_reference_bit_rs1 |
mc145162_mod_reference_bit_rs2 |
mc145162_mod_reference_bit_auxd;
mc145162_pin_enb(1);
mc145162_senddata(mc32bitsbuf,32,false);
mc145162_pin_enb(0);
}
//---
//发送counter分频命令集
void mc145162_tx_rx_counter(void)
{
if(mctxcount < 16)mctxcount = 16;
if(mcrxcount < 16)mcrxcount = 16;
mc32bitsbuf = (mctxcount << 16) | mcrxcount;
#if mc145162_debug_out
{static char data[50];
sprintf(data,"mctxcount=%d\r\nmcrxcount=%d\r\n" ,mctxcount,mcrxcount);
dprintf(data);
}
#endif
mc145162_pin_enb(0);
mc145162_senddata(mc32bitsbuf,32,true);
}
//---
//数据发送子函数
void mc145162_senddata(uint32 data,uint8 bits,uint8 mod)
{uint8 i;
if(bits)bits--;
for(i = 0;i < bits;i++)
{
mc145162_pin_din(data&0x80000000);
mc145162_pin_clk(1)
mc145162_pin_clk(0);
data <<= 1;
}
mc145162_pin_din(data&0x80000000);
mc145162_pin_clk(1)
if(mod){mc145162_pin_enb(1);}
mc145162_pin_clk(0);
if(mod){mc145162_pin_enb(0);}
}
2.mc145162.h源码文件
#include <misc.h>
/*
mc14bitsauxcount : 16 ~ 16383
mc12bitsrefcount : 16 ~ 4095
mctxcount : 16 ~ 65535
mcrxcount : 16 ~ 65535
*/
#define mc145162_base_pio at