/
//
// Function: 配置AD9512
// Date : 2012.09.20
// Author: LY
// Copyrigh: JZDF co.
/
#include "C8051F330.h"
#define uchar unsigned char
#define ushort unsigned short
#define uint unsigned int
#define ulong unsigned long
#define SYSCLK 24500000 //sp1
#define BAUDRATE 115200
sbit SCK = P1^3;
sbit DATA = P1^4;//SDIO
sbit SDO = P1^5;
sbit CSB = P1^6;
sbit POWER = P1^2;
void delay(uint time)
{
while(time--);
}
void send_data(ulong temp)
{
uchar i;
delay(10);
CSB = 0;
delay(2);
SCK =0;
temp = temp <<8;
for(i=0;i<24;i++){
temp = temp<<1;
DATA = CY;
delay(2);
SCK = 1;
delay(2);
SCK = 0;
}
SCK=0;
delay(2);
DATA = 0;
delay(2);
CSB = 1;
delay(10);
}
uchar read_data(ushort addr)
{
uchar i;
uchar dat;
delay(10);
CSB = 0;
delay(2);
SCK =0;
for(i=0;i<16;i++){
addr = addr<<1;
DATA = CY;
delay(2);
SCK = 1;
delay(2);
SCK = 0;
}
for(i=0;i<8;i++){
dat = dat<<1;
dat = SDO; //read
delay(2);
SCK = 1;
delay(2);
SCK = 0;
}
SCK=0;
delay(2);
DATA = 0;
delay(2);
CSB = 1;
delay(10);
return dat;
}
void Port_IO_Init()
{
P0MDIN = 0xFF; //P0端口为数字输入
// P0MDOUT = 0xFF; //P0端口推挽输出
P0MDOUT |= 0x10;//sp3
P0SKIP = 0x00; //无引脚被跳过
P1MDIN = 0xFF; //P1端口为数字输入
P1MDOUT = 0xDF; //P1端口推挽开漏输出 except p1.6
P1SKIP = 0x00; //无引脚被跳过
XBR0 = 0x01;//sp2
XBR1 = 0x40;//Enable Crossbar.
}
void UART0_Init (void)
{
SCON0 = 0x10; // SCON0: 8-bit variable bit rate
// level of STOP bit is ignored
// RX enabled
// ninth bits are zeros
// clear RI0 and TI0 bits
if (SYSCLK/BAUDRATE/2/256 < 1) {
TH1 = -(SYSCLK/BAUDRATE/2);
CKCON &= ~0x0B; // T1M = 1; SCA1:0 = xx
CKCON |= 0x08;
} else if (SYSCLK/BAUDRATE/2/256 < 4) {
TH1 = -(SYSCLK/BAUDRATE/2/4);
CKCON &= ~0x0B; // T1M = 0; SCA1:0 = 01
CKCON |= 0x01;
} else if (SYSCLK/BAUDRATE/2/256 < 12) {
TH1 = -(SYSCLK/BAUDRATE/2/12);
CKCON &= ~0x0B; // T1M = 0; SCA1:0 = 00
} else {
TH1 = -(SYSCLK/BAUDRATE/2/48);
CKCON &= ~0x0B; // T1M = 0; SCA1:0 = 10
CKCON |= 0x02;
}
TL1 = TH1; // init Timer1
TMOD &= ~0xf0; // TMOD: timer 1 in 8-bit autoreload
TMOD |= 0x20;
TR1 = 1; // START Timer1
// TX_Ready = 1; // Flag showing that UART can transmit
IP |= 0x10; // Make UART high priority
ES0 = 1; // Enable UART0 interrupts
}
void Init_Device(void)
{
PCA0MD &= ~0x40; //Disable the Watchdog Timer
Port_IO_Init();
// OSCICN = 0xC3; //Inner (osc) no divider. 11
// OSCICL = 0x00;
OSCICN |= 0x03; //sp4
RSTSRC = 0x04;
UART0_Init ();
}
ulong clk2 = 0x45<<8;
ulong div0 = 0x4B<<8 | 0x80; //All bypass. //r/w,W1W0,addr:13,data:16. 4B 4D 4F 51 53 (16+13+2+1)
ulong div1 = 0x4D<<8 | 0x80;
ulong div2 = 0x4F<<8 | 0x80;
ulong div3 = 0x51<<8 | 0x80;
ulong div4 = 0x53<<8 | 0x80;
ulong update = 0x5A<<8 | 1;
ulong test = 0x58<<8 | 0x40;
ulong reset1 = 0x30;
ulong reset2 = 0x10;
ulong clk2_read = 1<< 24| 0x45<<8;
ulong delay_adjust = 0x34<<8 | 0;
ulong out0 = 0x3D<<8 | 0x08;
ulong out1 = 0x3E<<8 | 0x08;
ulong out2 = 0x3F<<8 | 0x08;
ulong out3 = 0x40<<8 | 0x06;
ulong out4 = 0x41<<8 | 0x06;
void main()
{
Init_Device();
delay(10);
POWER = 1;
delay(10);
send_data(out0);
delay(10);
send_data(out1);
delay(10);
send_data(out2);
delay(10);
send_data(out3);
delay(10);
send_data(out4);
delay(10);
send_data(clk2);
delay(10);
send_data(delay_adjust);
delay(10);
send_data(div0);
delay(10);
send_data(div1);
delay(10);
send_data(div2);
delay(10);
send_data(div3);
delay(10);
send_data(div4);
delay(10);
send_data(update);
delay(10);
EA = 1;
// SBUF0 = 0x01;
while(1){
}
}
bit sp_StartTx;
const uchar xdata sp_BufferTx[6]={0x07E,0x01,0x03,0x05,0x07,0xFF};
uint sp_countTx = 0;
uint sp_lenthTx = 0;
uchar xdata sp_BufferRx[100];
uint sp_countRx = 0;
bit sp_StartRx = 0;
uchar sp_time_countRx;
uchar sp_RxData; //*/
uchar test1;
void UART0_Interrupt (void) interrupt 4
{
if (RI0 == 1)
{
RI0 = 0;
test1 = SBUF0;
SBUF0 = test1;
}
if (TI0 == 1)
{
TI0 = 0;
// SBUF0 = test1;
// delay(100000);
// SBUF0 = 0x01;
}
}
//
// Function: 配置AD9512
// Date : 2012.09.20
// Author: LY
// Copyrigh: JZDF co.
/
#include "C8051F330.h"
#define uchar unsigned char
#define ushort unsigned short
#define uint unsigned int
#define ulong unsigned long
#define SYSCLK 24500000 //sp1
#define BAUDRATE 115200
sbit SCK = P1^3;
sbit DATA = P1^4;//SDIO
sbit SDO = P1^5;
sbit CSB = P1^6;
sbit POWER = P1^2;
void delay(uint time)
{
while(time--);
}
void send_data(ulong temp)
{
uchar i;
delay(10);
CSB = 0;
delay(2);
SCK =0;
temp = temp <<8;
for(i=0;i<24;i++){
temp = temp<<1;
DATA = CY;
delay(2);
SCK = 1;
delay(2);
SCK = 0;
}
SCK=0;
delay(2);
DATA = 0;
delay(2);
CSB = 1;
delay(10);
}
uchar read_data(ushort addr)
{
uchar i;
uchar dat;
delay(10);
CSB = 0;
delay(2);
SCK =0;
for(i=0;i<16;i++){
addr = addr<<1;
DATA = CY;
delay(2);
SCK = 1;
delay(2);
SCK = 0;
}
for(i=0;i<8;i++){
dat = dat<<1;
dat = SDO; //read
delay(2);
SCK = 1;
delay(2);
SCK = 0;
}
SCK=0;
delay(2);
DATA = 0;
delay(2);
CSB = 1;
delay(10);
return dat;
}
void Port_IO_Init()
{
P0MDIN = 0xFF; //P0端口为数字输入
// P0MDOUT = 0xFF; //P0端口推挽输出
P0MDOUT |= 0x10;//sp3
P0SKIP = 0x00; //无引脚被跳过
P1MDIN = 0xFF; //P1端口为数字输入
P1MDOUT = 0xDF; //P1端口推挽开漏输出 except p1.6
P1SKIP = 0x00; //无引脚被跳过
XBR0 = 0x01;//sp2
XBR1 = 0x40;//Enable Crossbar.
}
void UART0_Init (void)
{
SCON0 = 0x10; // SCON0: 8-bit variable bit rate
// level of STOP bit is ignored
// RX enabled
// ninth bits are zeros
// clear RI0 and TI0 bits
if (SYSCLK/BAUDRATE/2/256 < 1) {
TH1 = -(SYSCLK/BAUDRATE/2);
CKCON &= ~0x0B; // T1M = 1; SCA1:0 = xx
CKCON |= 0x08;
} else if (SYSCLK/BAUDRATE/2/256 < 4) {
TH1 = -(SYSCLK/BAUDRATE/2/4);
CKCON &= ~0x0B; // T1M = 0; SCA1:0 = 01
CKCON |= 0x01;
} else if (SYSCLK/BAUDRATE/2/256 < 12) {
TH1 = -(SYSCLK/BAUDRATE/2/12);
CKCON &= ~0x0B; // T1M = 0; SCA1:0 = 00
} else {
TH1 = -(SYSCLK/BAUDRATE/2/48);
CKCON &= ~0x0B; // T1M = 0; SCA1:0 = 10
CKCON |= 0x02;
}
TL1 = TH1; // init Timer1
TMOD &= ~0xf0; // TMOD: timer 1 in 8-bit autoreload
TMOD |= 0x20;
TR1 = 1; // START Timer1
// TX_Ready = 1; // Flag showing that UART can transmit
IP |= 0x10; // Make UART high priority
ES0 = 1; // Enable UART0 interrupts
}
void Init_Device(void)
{
PCA0MD &= ~0x40; //Disable the Watchdog Timer
Port_IO_Init();
// OSCICN = 0xC3; //Inner (osc) no divider. 11
// OSCICL = 0x00;
OSCICN |= 0x03; //sp4
RSTSRC = 0x04;
UART0_Init ();
}
ulong clk2 = 0x45<<8;
ulong div0 = 0x4B<<8 | 0x80; //All bypass. //r/w,W1W0,addr:13,data:16. 4B 4D 4F 51 53 (16+13+2+1)
ulong div1 = 0x4D<<8 | 0x80;
ulong div2 = 0x4F<<8 | 0x80;
ulong div3 = 0x51<<8 | 0x80;
ulong div4 = 0x53<<8 | 0x80;
ulong update = 0x5A<<8 | 1;
ulong test = 0x58<<8 | 0x40;
ulong reset1 = 0x30;
ulong reset2 = 0x10;
ulong clk2_read = 1<< 24| 0x45<<8;
ulong delay_adjust = 0x34<<8 | 0;
ulong out0 = 0x3D<<8 | 0x08;
ulong out1 = 0x3E<<8 | 0x08;
ulong out2 = 0x3F<<8 | 0x08;
ulong out3 = 0x40<<8 | 0x06;
ulong out4 = 0x41<<8 | 0x06;
void main()
{
Init_Device();
delay(10);
POWER = 1;
delay(10);
send_data(out0);
delay(10);
send_data(out1);
delay(10);
send_data(out2);
delay(10);
send_data(out3);
delay(10);
send_data(out4);
delay(10);
send_data(clk2);
delay(10);
send_data(delay_adjust);
delay(10);
send_data(div0);
delay(10);
send_data(div1);
delay(10);
send_data(div2);
delay(10);
send_data(div3);
delay(10);
send_data(div4);
delay(10);
send_data(update);
delay(10);
EA = 1;
// SBUF0 = 0x01;
while(1){
}
}
bit sp_StartTx;
const uchar xdata sp_BufferTx[6]={0x07E,0x01,0x03,0x05,0x07,0xFF};
uint sp_countTx = 0;
uint sp_lenthTx = 0;
uchar xdata sp_BufferRx[100];
uint sp_countRx = 0;
bit sp_StartRx = 0;
uchar sp_time_countRx;
uchar sp_RxData; //*/
uchar test1;
void UART0_Interrupt (void) interrupt 4
{
if (RI0 == 1)
{
RI0 = 0;
test1 = SBUF0;
SBUF0 = test1;
}
if (TI0 == 1)
{
TI0 = 0;
// SBUF0 = test1;
// delay(100000);
// SBUF0 = 0x01;
}
}