#include #include void spi_out(void); volatile unsigned int empfangen = 0x00; volatile unsigned int senden =0x00; volatile int i=0; //####################################### //################## !!! Nützliche Beispiele !!! //############# usi_03.c / //####################################### 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 //######################### ADC setup ################################### SD16CTL = SD16REFON + SD16SSEL_2; SD16INCTL0 = SD16INCH_0; // Auswahl ADC0(Pin:1.0+1.1) SD16CCTL0 = SD16UNI + SD16IE + SD16OSR_32; SD16AE = SD16AE0; //schaltet digitale Schaltung für diesen Pin ein //######################### SPI setup ################################### USICTL0 = USIPE7 + USIPE6 + USIPE5 + USIOE + USIGE; // Port, SPI Slave USICTL1 = USIIE; // Counter interrupt, flag // remains set USICTL0 &= ~USISWRST; USICNT = 16; // init-load counter USICNT |= USI16B; // 16-bit-transmission USICTL0 &= ~USISWRST; //release for operation USICKCTL |= USICKPL; //Clock polarität, inaktiv=high USISR = 0x1111; __bis_SR_register(LPM0_bits + GIE); //######################### Main ################################### } // USI interrupt service routine #if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__) #pragma vector=USI_VECTOR __interrupt void universal_serial_interface(void) #elif defined(__GNUC__) void __attribute__ ((interrupt(USI_VECTOR))) universal_serial_interface (void) #else #error Compiler not supported! #endif { if (0x59AA == USISR) { // SD16CCTL0 &= ~ SD16IFG; // clear ADC Interrupt Flag // SD16CCTL0 |= SD16SC; // AD Wandler starten // while (!(SD16CCTL0 & SD16IFG)); // AD Wandlung fertig ? // USICNT = 16; USISR = 0x3456; } else { empfangen = USISR; USISR = 0xABCD; senden = USISR; USICNT = 16; } }