📄 dac5618.c
字号:
#include "SPCE061A.h"
#include "dac5618.h"
//#define Set_IOA_Bit(x) (*P_IOA_Data = *P_IOA_Buffer | x)
//#define Clear_IOA_Bit(x) (*P_IOA_Data = *P_IOA_Buffer & ~x)
#define DA_DIN 0x0001 //串行数据输入 DIN---IOA0
#define DA_SCLK 0x0002 //串行时钟 SCLK---IOA1
#define DA_CS 0x0004 //使能信号 CS---IOA2
extern unsigned int data_val; //5618的控制字
void Init_AGC_IO_Port()
{
*P_Watchdog_Clear= 0x0001;
*P_IOA_Dir &= 0xffbf; //IOA4(1,1,0),IOA5(1,1,0),IOA6(0,0,0)
*P_IOA_Dir |= 0x003f; //IOA0-3(1,1,0),其他位不变
*P_IOA_Attrib &= 0xffbf;
*P_IOA_Attrib |= 0x003f;
*P_IOA_Data = 0x0000;
}
void Ctrl_TLV5618(unsigned int dat) //传送数据dat
{
unsigned int order,value,test,i;
test = 0x8000; //测试DIN
order = 0x4000; //(R1 SPD PWR R0=1000)Write new DAC A value and update DAC A and B simultaneously
value = order | dat;
// Set_IOA_Bit(DA_CS); //CS=1
*P_IOA_Data|=0x0004;
delay(3);
// Clear_IOA_Bit(DA_CS); //CS=0 开始转化
*P_IOA_Data&=0xfffb;
delay(3);
for(i=0;i<16;i++)
{
*P_Watchdog_Clear= 0x0001;
if(test & value)
{
// Set_IOA_Bit(DA_SCLK); //SCLK=1
// Set_IOA_Bit(DA_DIN); //DIN=1
*P_IOA_Data|=0x0003;
delay(2);
}
else
{
// Set_IOA_Bit(DA_SCLK); //SCLK=1
// Clear_IOA_Bit(DA_DIN); //DIN=0
*P_IOA_Data&=0xfffe;
*P_IOA_Data|=0x0002;
delay(2);
}
// Clear_IOA_Bit(DA_SCLK); //SCLK=0
*P_IOA_Data&=0xfffd;
// delay(1);
test = test>>1; //右移一位
}
// Set_IOA_Bit(DA_SCLK); //SCLK=1
*P_IOA_Data|=0x0002;
delay(2);
// Clear_IOA_Bit(DA_DIN); //DIN=0
*P_IOA_Data&=0xfffe;
delay(2);
// Set_IOA_Bit(DA_CS); //CS=1 停止转化
*P_IOA_Data|=0x0004;
}
void delay(unsigned int time)
{
unsigned int i;
for(i=0;i<time;i++)
*P_Watchdog_Clear = 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -