|
发表于 2007-8-31 14:39:56
|
显示全部楼层
/////////////////////////////////////////////////////////////////
//模出芯片TLC5618,SCK在闲置时是高电平(时序图上有一根SCK为高时持平的线),由于模出芯片在下降沿锁存数据,
//由于CPOL=1,因此CPHA=0
/////////////////////////////////////////////////////////////////
void TLC5618_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_TLC5618(unsigned int cha_data,unsigned int chb_data)
{
unsigned char i;
unsigned char SPI_Lo;
unsigned char SPI_Hi;
unsigned int cha_COMMAND = cha_data | 0x8000;
unsigned int chb_COMMAND = chb_data | 0x1000;
TLC5618_SPI_Init();
TLC_CS0_1(); // 选择模出芯片
TLC_CS1_0();
SPI_Lo = chb_COMMAND & 0xff;
SPI_Hi = chb_COMMAND >> 8;
SPDR = SPI_Hi;
for (i = 0 ; i < 200 ; i++) if (SPSR & 0x80) break;
SPDR = SPI_Lo;
for (i = 0 ; i < 200 ; i++) if (SPSR & 0x80) break;
TLC_CS0_1();
TLC_CS1_1();
TLC_CS0_1(); // 选择模出芯片
TLC_CS1_0();
SPI_Lo = cha_COMMAND & 0xff;
SPI_Hi = cha_COMMAND >> 8;
SPDR = SPI_Hi;
for (i = 0 ; i < 200 ; i++) if (SPSR & 0x80) break;
SPDR = SPI_Lo;
for (i = 0 ; i < 200 ; i++) if (SPSR & 0x80) break;
TLC_CS0_1();
TLC_CS1_1();
} |
|