Subversion Repositories FlightCtrl

Compare Revisions

Ignore whitespace Rev 780 → Rev 781

/branches/V0.68d Code Redesign killagreg/mm3.c
81,10 → 81,19
// set MISO (PB6) as input
DDRB &= ~(1<<DDB6);
 
#ifdef USE_WALTER_EXT // walthers board
// Output Pins (J9)PC6->MM3_SS ,(J8)PB2->MM3_RESET
DDRB |= (1<<DDB2);
DDRC |= (1<<DDC6);
// set pins permanent to low
PORTB &= ~((1<<PORTB2));
PORTC &= ~((1<<PORTC6));
#else // killagregs board
// Output Pins PC4->MM3_SS ,PC5->MM3_RESET
DDRC |= (1<<DDC4)|(1<<DDC5);
// set pins permanent to low
PORTC &= ~((1<<PORTC4)|(1<<PORTC5));
#endif
 
// Initialize SPI-Interface
// Enable interrupt (SPIE=1)
91,9 → 100,9
// Enable SPI bus (SPE=1)
// MSB transmitted first (DORD = 0)
// Master SPI Mode (MSTR=1)
// Clock polarity low whn idle (CPOL=0)
// clock phase sample at leading edge (CPHA=0)
// clock rate = SYSCLK/128 (SPI2X=0, SPR1=1, SPR0=1) 20MHz/128 = 156.25kHz
// Clock polarity low when idle (CPOL=0)
// Clock phase sample at leading edge (CPHA=0)
// Clock rate = SYSCLK/128 (SPI2X=0, SPR1=1, SPR0=1) 20MHz/128 = 156.25kHz
SPCR = (1<<SPIE)|(1<<SPE)|(0<<DORD)|(1<<MSTR)|(0<<CPOL)|(0<<CPHA)|(1<<SPR1)|(1<<SPR0);
SPSR &= ~(1<<SPI2X);
 
123,14 → 132,22
switch (MM3.STATE)
{
case MM3_STATE_RESET:
#ifdef USE_WALTER_EXT // walthers board
PORTC &= ~(1<<PORTC6); // select slave
PORTB |= (1<<PORTB2); // PB2 to High, MM3 Reset
#else
PORTC &= ~(1<<PORTC4); // select slave
PORTC |= (1<<PORTC5); // PC5 to High, MM3 Reset
#endif
MM3.STATE = MM3_STATE_START_TRANSFER;
return;
 
case MM3_STATE_START_TRANSFER:
#ifdef USE_WALTER_EXT // walthers board
PORTB &= ~(1<<PORTB2); // PB2 auf Low (was 102.4 µs at high level)
#else
PORTC &= ~(1<<PORTC5); // PC4 auf Low (was 102.4 µs at high level)
 
#endif
// write to SPDR triggers automatically the transfer MOSI MISO
// MM3 Period, + AXIS code
switch(MM3.AXIS)
211,7 → 228,11
break;
}
}
#ifdef USE_WALTER_EXT // walthers board
PORTC |= (1<<PORTC6); // deselect slave
#else
PORTC |= (1<<PORTC4); // deselect slave
#endif
MM3.STATE = MM3_STATE_RESET;
// Update timeout is called every 102.4 µs.
// It takes 2 cycles to write a measurement data request for one axis and