тестовая прога вот:
инициализация spi
Код
// SPI initialization for DAC
void SPI_Init_(void)
{
P5DIR |= 1<< 4;
// P5DIR |= 1<< 0;
deselect();
UCB1CTL1 |= UCSWRST;
UCB1CTL0 = 0x00;
UCB1CTL0 |= UCMST; // master mode
UCB1CTL0 |= UCSYNC; // synchronous mode
UCB1CTL0 |= UCMSB; // MSB first
// UCB1CTL0 |= UCCKPL; // The inactive state is high
UCB1CTL1 = 0x41; // ACLK, hold UCSWRST
UCB1BR0 = (byte)(QZ / 2 / FREQDAC); // set frequency
UCB1BR1 = (QZ / 2 / FREQDAC) >> 8;
P5SEL |= 1 << 1; // MOSI
P5SEL |= 1 << 2; // MISO
P5SEL |= 1 << 3; // SCK
UCB1CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
UC1IE &= ~UCB1RXIE; // Enable USCI_B1 RX interrupt
UC1IE &= ~UCB1TXIE; // Disable USCI_B1 TX interrupt
}
функция отправки по spi
Код
void SPI_Send(uchar b)
{
UC1IFG |= UCB1TXIFG;
UCB1TXBUF = b;
while (((UC1IFG&UCB1TXIFG)>>3)==0);
Delay_ms(1);
SPI_WaitForComplete;
wdgRst();
}
Обращение к ЦАПу в основном цикле
Код
// test DAC
SPI_Init_();
Delay_ms(2);
// enable muxes
P3DIR |= 1;P3OUT &= ~1;
// mux addr 0 - DAC #1
P2DIR |= (1 << 1);P2OUT &= ~(1 << 1);
P2DIR |= (1 << 2);P2OUT &= ~(1 << 2);
// // set control
LATCH_HIGH;
SPI_Send(0x55);//01010101 - control register addr
SPI_Send(0x10);
LATCH_LOW;
SPI_Send(0x01);
LATCH_HIGH;
Delay_ms(10);
SPI_Send(0x01);//00000001 - data register addr
SPI_Send(0x88);
LATCH_LOW;
SPI_Send(0x00);
LATCH_HIGH;
//
дефайны
Код
#define desFLASH {P5OUT |= 1<< 0;}
#define selFLASH {P5OUT &= ~(1<< 0);}
#define select() selFLASH
#define deselect() desFLASH
#define SPIspeed BAUD_UART1
#define BAUD_UART1 9600L
#define SPI_notready() (UCB1STAT & UCBBUSY)
#define SPI_WaitForComplete while ( SPI_notready() == 1);
#define LATCH_LOW {P5DIR |= 1<<4;P5OUT &= ~(1<<4);}
#define LATCH_HIGH {P5DIR |= 1<<4;P5OUT |= (1<<4);}
Насчет замечаний по схемотехнике - согласен, но даже при такой хромой реализации выбранный на муксе ЦАП работать должен (при корректном софте, разумеется)???