配置AD9512

/
// 
// 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;  
   }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值