Hi, I have a MSP430F2013 running as SPI slave. My issue is, when I send a 2Byte message to my slave, it writes the 2Byte answer in the USIR register, but sends back the the lower answerbyte as higher byte, and the upper byte from the master as lower byte.
I dont understand whats going on there... Would somebody help me please?
#include <msp430x20x3.h> #include <msp430.h> void spi_out(void); volatile int test = 0x00; //####################################### //################## !!! 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; USICKCTL |= USICKPL; __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 (0x9959 == USISR) { // SD16CCTL0 &= ~ SD16IFG; // clear ADC Interrupt Flag // SD16CCTL0 |= SD16SC; // AD Wandler starten // while (!(SD16CCTL0 & SD16IFG)); // AD Wandlung fertig ? USISR = 0x3456; USICNT = 16; } else { USISR = 0xABCD; USICNT = 16; } }