Subversion Repositories FlightCtrl

Compare Revisions

Ignore whitespace Rev 961 → Rev 962

/branches/V0.70d Code Redesign killagreg/mm3.c
62,6 → 62,38
#define MM3_PERIOD_2048 0x60
#define MM3_PERIOD_4096 0x70
 
#ifdef USE_WALTER_EXT // walthers board
// Output Pins (J9)PC6->MM3_SS ,(J8)PB2->MM3_RESET
#define MM3_SS_PORT PORTC //J9->MM3_SS
#define MM3_SS_DDR DDRC
#define MM3_SS_PIN PC6
#define MM3_RESET_PORT PORTB //J8->MM3_RESET
#define MM3_RESET_DDR DDRB
#define MM3_RESET_PIN PB2
#elseif USE_NICK666 // nick666 version 0.67g
#define MM3_SS_PORT PORTD //J5->MM3_SS
#define MM3_SS_DDR DDRD
#define MM3_SS_PIN PD3
#define MM3_RESET_PORT PORTB //J8->MM3_RESET
#define MM3_RESET_DDR DDRB
#define MM3_RESET_PIN PB2
#else // killagregs board
// Output Pins PC4->MM3_SS ,PC5->MM3_RESET
#define MM3_SS_PORT PORTC
#define MM3_SS_DDR DDRC
#define MM3_SS_PIN PC4
#define MM3_RESET_PORT PORTC
#define MM3_RESET_DDR DDRC
#define MM3_RESET_PIN PC5
#endif
#define MM3_SS_ON MM3_SS_PORT &= ~(1<<MM3_SS_PIN);
#define MM3_SS_OFF MM3_SS_PORT |= (1<<MM3_SS_PIN);
#define MM3_RESET_ON MM3_RESET_PORT |= (1<<MM3_RESET_PIN);
#define MM3_RESET_OFF MM3_RESET_PORT &= ~(1<<MM3_RESET_PIN);
 
 
 
MM3_calib_t MM3_calib;
volatile MM3_working_t MM3;
volatile uint8_t MM3_Timeout = 0;
83,19 → 115,13
// 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);
 
// Output Pins MM3_SS ,MM3_RESET
MM3_SS_DDR |= (1<<MM3_SS_PIN);
MM3_RESET_DDR |= (1<<MM3_RESET_PIN);
// 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
MM3_SS_PORT &= ~((1<<MM3_SS_PIN));
MM3_RESET_PORT &= ~((1<<MM3_RESET_PIN));
 
// Initialize SPI-Interface
// Enable interrupt (SPIE=1)
134,22 → 160,13
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_SS_ON // select slave
MM3_RESET_ON // RESET to High, MM3 Reset
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
MM3_RESET_OFF // RESET auf Low (was 102.4 µs at high level)
// write to SPDR triggers automatically the transfer MOSI MISO
// MM3 Period, + AXIS code
switch(MM3.AXIS)
230,11 → 247,7
break;
}
}
#ifdef USE_WALTER_EXT // walthers board
PORTC |= (1<<PORTC6); // deselect slave
#else
PORTC |= (1<<PORTC4); // deselect slave
#endif
MM3_SS_OFF // deselect slave
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