/*----------------------------------------------------------------------- ** ** Hardware.h ** ** Hardware specific definitions. ** Many of the settings depend on the overall main clock frequency, which ** is 18MHz. This is set away from 20MHz to reduce interference from harmonics ** affecting the radio comms at 40MHz. ** **---------------------------------------------------------------------*/ #ifndef HARDWARE_H #define HARDWARE_H #include "binary.h" #include "ioh82148.h" #include "inh8.h" //-------------- // // Radio port // //-------------- // Module control #define RADIO_DATA P6DR.3 #define RADIO_CLK P6DR.4 #define RADIO_EN P6DR.5 #define RADIO_CD P6DR.0 // Channel select #define RADIO_READ_UNITS P9DDR = b00000000; P4DDR = b11111011; P4DR.7 = 1 #define RADIO_READ_DECADE P9DDR = b00001000; P4DDR = b01111011; P9DR.3 = 1 // UART registers #define RADIO_CONTROL_REGISTER SCI_SCR2 #define RADIO_TRANSMIT_REGISTER SCI_TDR2 #define RADIO_RECEIVE_REGISTER SCI_RDR2 #define RADIO_STATUS_REGISTER SCI_SSR2 // UART definitions #define SETUP_CARRIER_LOST_IRQ ISCRH = b00010000; \ ISCRL = b00000000; \ ISR.6 = 0; \ IER.6 = 1 #define RADIO_COMMS_ERRORS (RADIO_STATUS_REGISTER & b00111000) #define CLEAR_RADIO_COMMS_ERRORS RADIO_STATUS_REGISTER &= b11000111 #define RADIO_TRANSMIT_FLAG RADIO_STATUS_REGISTER.7 /* TDRE */ #define RADIO_RECEIVE_FLAG RADIO_STATUS_REGISTER.6 /* RDRF */ #define SETUP_RADIO_TRANSMIT RADIO_CONTROL_REGISTER = b10100000 #define SETUP_RADIO_RECEIVE RADIO_CONTROL_REGISTER = b01010000 #define ENABLE_RADIO_TRANSMIT RADIO_CONTROL_REGISTER.5 = 1 /* TE */ #define INHIBIT_RADIO_TRANSMIT RADIO_CONTROL_REGISTER.5 = 0 #define ENABLE_RADIO_RECEIVE RADIO_CONTROL_REGISTER.4 = 1 /* RE */ #define INHIBIT_RADIO_RECEIVE RADIO_CONTROL_REGISTER.4 = 0 #define ENABLE_RADIO_RECEIVE_ISR RADIO_CONTROL_REGISTER.6 = 1 /* RIE */ #define INHIBIT_RADIO_RECEIVE_ISR RADIO_CONTROL_REGISTER.6 = 0 #define ENABLE_RADIO_TRANSMIT_ISR RADIO_CONTROL_REGISTER.7 = 1 /* TIE */ #define INHIBIT_RADIO_TRANSMIT_ISR RADIO_CONTROL_REGISTER.7 = 0 //---------------- // // Diagnostics // //---------------- #define SETUP_DIAGNOSTIC_PORT SCI_SMR1 = b01100000; \ SCI_BRR1 = 129 \ SCI_SCR1 = b00110000; \ SCI_SSR1 = 0x00 #define ENABLE_DIAGNOSTIC_TRANSMIT_ISR SCI_SCR1.7 = 1 /* TIE */ #define INHIBIT_DIAGNOSTIC_TRANSMIT_ISR SCI_SCR1.7 = 0 #define ENABLE_DIAGNOSTIC_RECEIVE_ISR SCI_SCR1.6 = 1 /* RIE */ #define INHIBIT_DIAGNOSTIC_RECEIVE_ISR SCI_SCR1.6 = 0 #define DIAGNOSTIC_TRANSMIT_REGISTER SCI_TDR1 #define DIAGNOSTIC_RECEIVE_REGISTER SCI_RDR1 #define DIAGNOSTIC_TDRE_CLEAR SCI_SSR1.7 = 0 /* TDRE */ #define DIAGNOSTIC_RDRF_CLEAR SCI_SSR1.6 = 0 /* RDRF */ //---------------- // // Power solenoid // //---------------- #define POWER_SOLENOID P6DR.1 //---------------- // // Extension shift register // //---------------- #define SR_DATA P8DR.0 #define SR_CLOCK P8DR.1 #define SR_STROBE P8DR.2 #define SR_INPUT P8DDR = b00011110 #define SR_OUTPUT P8DDR = b00011111 //---------------- // // Scheduler // The FRC is used for a regular 100ms (exactly) interrupt to sequence // motor speed & control, and timer 1 is used for the regular 10.012ms // interrupt to control the main sequencer. // //---------------- #define CLEAR_FRC_COMPARE_FLAG FRT_TCSR = b00000001 #define FREE_RUNNING_COUNTER_INIT FRT_OCRA = 56250; \ FRT_TIER = b00001000; \ FRT_TCSR = b00000001; \ FRT_TCR = b00000010 #define CLEAR_MAIN_SEQUENCER_FLAG TM_TCSR1 = b00000000 #define MAIN_SEQUENCER_INIT TM_TCNT1 = 0; \ TM_TCORA1 = 176; \ STCR = b00000000; \ TM_TCR1 = b01000011; \ TM_TCSR1 = b00000000 //---------- // // Motors // //---------- // Multiplexor #define SELECT_MOTOR_CHANNEL(x) P4DR &= b10001111; P4DR |= (x << 4) #define WHEEL_SPEED_COUNTER TM_TCNT0 #define WHEEL_SPEED_COUNTER_INIT TM_TCR0 = b00000101;TM_TCSR0 = b00000000 // Motor PWM drives #define FRONT_LEFT_PWM PWM_PWSL = b11100000; PWM_PWDR #define FRONT_RIGHT_PWM PWM_PWSL = b11100001; PWM_PWDR #define REAR_LEFT_PWM PWM_PWSL = b11100010; PWM_PWDR #define REAR_RIGHT_PWM PWM_PWSL = b11100011; PWM_PWDR #define FRONT_LEFT_MOTOR_DIRECTION P3DR.0 #define FRONT_RIGHT_MOTOR_DIRECTION P3DR.1 #define REAR_LEFT_MOTOR_DIRECTION P3DR.2 #define REAR_RIGHT_MOTOR_DIRECTION P3DR.3 #define INITIALISE_PWM PWM_PWSL = b11100000; \ PWM_PCSR = b00000110; \ PWM_P1DDR = b11111111; \ PWM_P2DDR = b11111111; \ PWM_PWOERA= b00111111; \ PWM_PWOERB= b00111111 //-------------- // // Weapons // //-------------- // Hammers #define FRONT_HAMMER_PWM PWM_PWSL = b11100100; PWM_PWDR #define REAR_HAMMER_PWM PWM_PWSL = b11100101; PWM_PWDR #define FRONT_HAMMER_MOTOR_DIRECTION P3DR.4 #define REAR_HAMMER_MOTOR_DIRECTION P3DR.5 #define FRONT_HAMMER_HOME_SOLENOID P2DR.6 #define REAR_HAMMER_HOME_SOLENOID P2DR.7 #define FRONT_HAMMER_INDEX_POSITION P7PIN.5 #define REAR_HAMMER_INDEX_POSITION P7PIN.6 // Flipper #define FLIPPER_SOLENOID_VALVE_0 P1DR.6 #define FLIPPER_SOLENOID_VALVE_1 P1DR.7 #define FLIPPER_SOLENOID_VALVE_2 P3DR.6 #define FLIPPER_SOLENOID_VALVE_3 P3DR.7 #define FLIPPER_RETRACT_MOTOR_POS P4DR.0 #define FLIPPER_RETRACT_MOTOR_NEG P4DR.1 #define FLIPPER_INDEX_POSITION P7PIN.4 #define COMPRESSOR_POWER // Spear #define SPEAR_DRIVE_FORWARDS P9DR.4 #define SPEAR_DRIVE_BACKWARDS P9DR.5 #define SPEAR_FORWARD_INDEX P6DR.6 #define SPEAR_BACKWARD_INDEX P6DR.7 #define ENABLE_SPEAR_INTS ISCRH.6 = 1; IER |= b11000000 // Active falling edge #define DISABLE_SPEAR_INTS IER &= b00111111 //-------------- // // Lights // Three phases: A, B, and C // //-------------- #define LED_A_COLOUR PWM_PWSL = b11101000; PWM_PWDR #define LED_B_COLOUR PWM_PWSL = b11101001; PWM_PWDR #define LED_C_COLOUR PWM_PWSL = b11101010; PWM_PWDR #define LED_A_BRIGHTNESS PWM_PWSL = b11101011; PWM_PWDR #define LED_B_BRIGHTNESS PWM_PWSL = b11101100; PWM_PWDR #define LED_C_BRIGHTNESS PWM_PWSL = b11101101; PWM_PWDR //-------------- // // Analog inputs // //-------------- #define MOTOR_CURRENT ADDRAH #define RADIO_RSSI ADDRBH #define COMPRESSOR_CURRENT ADDRCH #define BATTERY_CURRENT ADDRDH //-------------- // // Mercury switch // //-------------- #define WHICH_WAY_UP P7PIN.7 #endif