📄 tlv5608z.c
字号:
//[包含头文件]
#include "SPI.h"
#include "SCI.h"
/*TLV5608芯片D/A转换初始化子程序(TLV5608Init.c)-----------------*
*功 能:初始化TLV5608的CTRL0、CTRL1寄存器 *
*参 数:fs-片号(fs=0or1) *
*返 回:无 *
*--------------------------------------------------------------*/
void TLV5608Init(INT8U fs)
{
CS_D |=0b00001100; //定义PTC2~3为输出
CS_P |=0b00001100; //PTC2~3输出为高电平
//设置CTRL0寄存器
SPIDR=0b10000000; //发送高8位数据(CTRL0地址为1000)
CS_P &= ~(1<<(fs+2)); //相应片TLV.FS由高电平变为低电平,产生下降沿
//此后在每个SCLK的下降沿传送一位数据,共传输16位数据
while ((SPISCR & (1<<SendEmyptBit)) == 0); //为0等待,也就是等待SPTE为1
//发送完毕
SPIDR=0b00000000; //发送低8位数据
while ((SPISCR & (1<<SendEmyptBit)) == 0); //为0等待,也就是等待SPTE为1
//发送完毕
CS_P |= (1<<(fs+2)); //数据传输完毕,相应片TLV.FS由低电平变为高电平
//设置CTRL1寄存器
SPIDR=0b10010000; //发送高8位数据(CTRL1地址为1001)
CS_P &= ~(1<<(fs+2)); //相应片TLV.FS由高电平变为低电平,产生下降沿
//此后在每个SCLK的下降沿传送一位数据
while ((SPISCR & (1<<SendEmyptBit)) == 0); //为0等待,也就是等待SPTE为1
//发送完毕
SPIDR=0b00001111; //发送低8位数据(正常电压,快速)
while ((SPISCR & (1<<SendEmyptBit)) == 0); //为0等待,也就是等待SPTE为1
//发送完毕
CS_P |= (1<<(fs+2)); //数据传输完毕,相应片TLV.FS由低电平变为高电平
}
/*TLV5608芯片D/A转换子程序(TLV5608Z.c)--------------------------*
*TLV5608的接线: *
* ① SCLK(3)接MC08HC908GP32的SPSCK(18) *
* ② DIN(2)接MC08HC908GP32的MISO(17) *
* ③ LDAC(18)接MC08HC908GP32的PTC4 *
* ④ 0-1片FS(4作为片选信号)接分别接的PTC2~3 *
* MODE接高电平,选择uC模式 *
*入口:fs-片号(fs=0or1),buf-存放数据 *
*--------------------------------------------------------------*/
void TLV5608Z(INT8U fs, INT16U buf)
{
CS_D |=0b00001100; //定义PTC2~3为输出
CS_P |=0b00001100; //PTC2~3输出为高电平
//TLV5608.FS=1
SPIDR=buf>>8; //发送高8位数据
CS_P &= ~(1<<(fs+2)); //相应片TLV.FS由高电平变为低电平,产生下降沿
//此后在每个SCLK的下降沿传送一位数据
while ((SPISCR & (1<<SendEmyptBit)) == 0); //为0等待,也就是等待SPTE为1
//发送完毕
SPIDR=buf; //发送低8位数据
while ((SPISCR & (1<<SendEmyptBit)) == 0); //为0等待,也就是等待SPTE为1
//发送完毕
CS_P |= (1<<(fs+2)); //数据传输完毕,相应片TLV.FS由低电平变为高电平
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -