⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tlc5620.c

📁 tl5620的c语言51驱动程序
💻 C
字号:
/**************************************************************
 * 
 * 
 * 
 * 
 **************************************************************/
#include "system.h"
#include "altera_avalon_pio_regs.h"
#include "alt_types.h"
#include "TLC5620.h"

#define PIO_DAC_BASE PIO_AMP_BASE
/**************************************************************
 * 注意:由于在FPGA和TLC5620之间接了一片反相器,所以对芯片引脚的设置都将相
 * 反。
 * 例如:TLC5620_SET_CLK()函数,实际上FPGA输出低电平。
 * ***********************************************************/
 static alt_u8 pio=0x00;
 
/*********************************
 *  说明:设置芯片的clk脚高电平
 ********************************/
void TLC5620_SET_CLK(void)
{
     pio = pio | 0x01;
    IOWR_ALTERA_AVALON_PIO_DATA(PIO_DAC_BASE, pio);

}

/*********************************
 * 说明:设置芯片的clk脚低电平
 *********************************/
void TLC5620_CLR_CLK( void )
{
    pio = pio & 0xFE;
    IOWR_ALTERA_AVALON_PIO_DATA(PIO_DAC_BASE, pio);
}

/***********************************
 * 说明:设置芯片data脚高电平
 ***********************************/
void TLC5620_SET_DATA( void )
{
    pio = pio | 0x04;
    IOWR_ALTERA_AVALON_PIO_DATA(PIO_DAC_BASE, pio);
}

/*************************************
 * 说明:设置芯片的data脚低电平
 ************************************/
void TLC5620_CLR_DATA( void )
{
     pio = pio & 0xFB;
     IOWR_ALTERA_AVALON_PIO_DATA(PIO_DAC_BASE, pio);
}

/**************************************
 * 说明:设置芯片load脚高电平
 * ***********************************/
void TLC5620_SET_LOAD( void )
{
    pio = pio | 0x02;
    IOWR_ALTERA_AVALON_PIO_DATA(PIO_DAC_BASE, pio);
}

/***************************************
 * 说明:设置芯片load脚低电平
 * ************************************/
void TLC5620_CLR_LOAD( void )
{
    pio = pio & 0xFD;
    IOWR_ALTERA_AVALON_PIO_DATA(PIO_DAC_BASE, pio);
}

/***************************************
 *说明:设置芯片ldac脚高电平
 * **************************************/
void TLC5620_SET_LDAC( void )
{
    pio = pio | 0x08;
    IOWR_ALTERA_AVALON_PIO_DATA(PIO_DAC_BASE, pio);
}

/****************************************
 * 说明:设置芯片ldac脚低电平
 * *************************************/
void TLC5620_CLR_LDAC( void )
{
    pio = pio & 0xF7;
    IOWR_ALTERA_AVALON_PIO_DATA(PIO_DAC_BASE, pio);
}

void TLC5620_delay(alt_u16 time)
{
    alt_u16 i;
    for(i=0; i<time; i++);
}
/***************************************
 * 说明:TLC5620初始化
 * *************************************/
void TLC5620_init(void)
{
    TLC5620_CLR_CLK();
    TLC5620_SET_DATA();
    TLC5620_SET_LOAD();
    TLC5620_SET_LDAC();
}

/******************************************
 *说明:   输出单个通道的电压
 *chl:    通道号, 0--3
 *dat:    通道数据, 0--255 
 * ****************************************/
void TLC5620_set_output(alt_u8 chl, alt_u8 dat)
{
    alt_u8 i;
    
    /* 四个通道,只有低两位有效 */
    chl &= 0x03;
    /* 左移一位,加上RNG位 */
    chl <<= 1;
    chl |= (RNG==1);
    /* 将数据移到高3位 */
    chl <<= 5;

    for(i=3; i>0; i--)
    {
        TLC5620_delay(100);
        /* 从高位到低位依次移出数据 */
        if(chl&0x80)
        {
            TLC5620_SET_DATA();
        }
        else
        {
            TLC5620_CLR_DATA();
        }
        /* 等待数据稳定 */
        TLC5620_SET_CLK();
        chl <<= 1;
        TLC5620_delay(100);
        /* 下降沿将数据锁存 */
        TLC5620_CLR_CLK();
        TLC5620_delay(100);
    }
    
    for(i=8; i>0; i--)
    {
        TLC5620_delay(10);
       /* 从高位到低位依次移出数据 */
        if(dat&0x80)
        {
            TLC5620_SET_DATA();
        }
        else
        {
            TLC5620_CLR_DATA();
        }
        
        /* 等待数据稳定 */
        TLC5620_SET_CLK();
        dat <<= 1;
        TLC5620_delay(100);
        /* 下降沿将数据锁存 */
        TLC5620_CLR_CLK();
        TLC5620_delay(100);
    }
    /* LOAD下降沿将数据锁入寄存器 */
    TLC5620_CLR_LOAD();
    TLC5620_delay(100);
    
    TLC5620_SET_LOAD();
    
    /* LDAC下降沿将更新输出电压值 */
    TLC5620_CLR_LDAC();
    TLC5620_delay(100);
    
    TLC5620_SET_LDAC();
    return ;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -