#include #include void spi_out(void); void main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop watchdog Timer BCSCTL1 = CALBC1_1MHZ; // Master clk auf 1MHz setzen um Stromsparend zu arbeiten DCOCTL = CALDCO_1MHZ; BCSCTL3 |= LFXT1S_2; // Setze LFTX1 auf VLO = 12kHz P1OUT |= BIT2; //SPI SS P1DIR |= BIT2; //SPI SS //######################### ADC setup ################################### SD16CTL |= SD16REFON + SD16SSEL_2; // ADC clock = ACLK, Uref = 1,2V // SD16CTL &= ~SD16REFON; //Referenzspannung = 0 SD16CCTL0 |= SD16UNI + SD16SNGL + SD16OSR_32; //Unipolar, Single conversion, Oversampling=32x SD16INCTL0 |= SD16INCH_0; // Auswahl ADC0(Pin:1.0+1.1) SD16AE |= SD16AE0; //schaltet digitale Schaltung für diesen Pin ein //######################### SPI setup ################################### USICTL0 |= USIPE7 + USIPE6 + USIPE5 + USIMST + USIOE; // Port, SPI Master USICTL1 |= USICKPH + USIIE; // Counter interrupt, flag // remains set USICKCTL = USIDIV_2 + USISSEL_2; // /4 SMCLK USICNT = 16; // init-load counter USICNT |= USI16B; // 16-bit-transmission USICTL0 |= USISWRST; //######################### Main ################################### while (1) // Loop { SD16CCTL0 &= ~ SD16IFG; // clear ADC Interrupt Flag SD16CCTL0 |= SD16SC; // AD Wandler starten while (!(SD16CCTL0 & SD16IFG)); // AD Wandlung fertig ? unsigned i; for (i = 0x0FFF; i > 0; i--); // Delay spi_out(); } } void spi_out(void) { //send 1 time 16 bits USICTL0 |= USISWRST; // USI stopped USICNT = 16; // re-load counter USICNT |= USI16B; P1OUT &= ~BIT2; // Enable slave USISR = SD16MEM0; // ADC in das SPI Schreibregister laden USICTL0 &= ~USISWRST; // USI released for operation while (!(USIIFG & USICTL1)); // Counter clear? P1OUT |= BIT2; // Disable slave }