|
发表于 2007-11-13 12:58:47
|
显示全部楼层
这是我写的TLV5617-SPI发送程序
/////////////////////////////////////////////////////////////////
//模出芯片TLC5617,SCK在闲置时是高电平(时序图上有一根SCK为高时持平的线),
//由于模出芯片在下降沿锁存数据,由于CPOL=1,因此CPHA=0
/////////////////////////////////////////////////////////////////
void TLV5617_SPI_Init(void)
{
SPCR = (1<<SPE) | (1<<MSTR) | (1<<CPOL) | (0<<CPHA) | (0 <<SPR1) | (1<<SPR0);
SPSR = (1<<SPI2X);
}
//////////////////////////////////////////////////////////////////////////////
//操作步骤:
// 1.写重叠缓冲区锁存器
// 2.把串行接口寄存器的数据写入锁存器A并用缓冲区锁存数据更新锁存器B
//////////////////////////////////////////////////////////////////////////////
void SPI_TLV5617(unsigned int cha_num,unsigned int chb_num)
{
unsigned char i;
unsigned int cha_COMMAND = (cha_num << 2) | 0x8000;
unsigned int chb_COMMAND = (chb_num << 2) | 0x1000;
ADS7841_CS_1();
TLV5617_SPI_Init();
TLV5617_CS_0();
SPDR = chb_COMMAND >> 8;
for (i = 0 ; i < 200 ; i++) if (SPSR & 0x80) break;
SPDR = chb_COMMAND & 0xff;
for (i = 0 ; i < 200 ; i++) if (SPSR & 0x80) break;
TLV5617_CS_1();
TLV5617_CS_0();
SPDR = cha_COMMAND >> 8;
for (i = 0 ; i < 200 ; i++) if (SPSR & 0x80) break;
SPDR = cha_COMMAND & 0xff;
for (i = 0 ; i < 200 ; i++) if (SPSR & 0x80) break;
TLV5617_CS_1();
} |
|