/* Defines: #define NPN // For inverted input ports (NPN transistor) Tested with: - PIC16F877A */ #ifndef INITIALISATION_H #define INITIALISATION_H // #[declarations:init_gpio] #ifdef NPN typedef enum { ON = 0, OFF = 1 } PinStates; #else typedef enum { OFF = 0, ON = 1 } PinStates; #endif typedef enum { OUTPUT = 0, INPUT = 1 } PinDirection; typedef enum { DIGITAL = 0, ANALOG = 1 } PinMode; typedef struct { volatile unsigned char* tris; volatile unsigned char* lat; volatile unsigned char* ansel; PinDirection direction; PinMode mode; } PinConfig; // #[declarations:init_osc] typedef enum { CONFIG_FOSC = 0, INTERNAL_FOSC = 1 } OscStartupTime; typedef enum { CONFIG_CLK = 0, INTERNAL_CLK = 1 } SysClockSelect; typedef enum { HTS_UNSTABLE = 0, HTS_STABLE = 1 } HFINTOSCStatus; typedef enum { LTS_UNSTABLE = 0, LTS_STABLE = 1 } LFINTOSCStable; typedef enum { KHZ032 = 0b000, // LFINTOSC KHZ125 = 0b001, KHZ250 = 0b010, KHZ500 = 0b011, // Default MHZ001 = 0b100, MHZ002 = 0b101, MHZ004 = 0b110, MHZ008 = 0b111 } InternalFrequency; typedef struct { SysClockSelect SCS; InternalFrequency IRCF; OscStartupTime OSTS; } OscillatorConfig; // #[declarations:interupt] typedef enum { GIE_DISABLED = 0, GIE_ENABLED = 1 } GlobalInterrupt; typedef enum { EINT_DISABLED = 0, EINT_ENABLED = 1 } ExternalInterrupt; typedef enum { PEIE_DISABLED = 0, PEIE_ENABLED = 1 } PeripheralInterrupt; typedef enum { T0INT_DISABLED = 0, T0INT_ENABLED = 1 } Timer0OverflowInterrupt; typedef enum { RBINT_DISABLED = 0, RBINT_ENABLED = 1 } PortBInterrupt; typedef enum { FALLING_EDGE = 0, RISING_EDGE = 1 } InterruptEdge; typedef enum { INT_AWAITING = 0, INT_OCCURED = 1 } InterruptFlag; typedef struct { GlobalInterrupt GIE; ExternalInterrupt EINT; PeripheralInterrupt PEIE; Timer0OverflowInterrupt T0IE; PortBInterrupt RBIE; InterruptEdge INTEDG; } InterruptConfig; // #[declarations:adc] // typedef enum { ADC_OFF = 0, ADC_ON = 1 } ADCEnable; // typedef enum { VREF_MINPIN = 0, VREF_VSS = 1 } ADCVoltageReference1; // typedef enum { VREF_PLUSPIN = 0, VREF_VDD = 1 } ADCVoltageReference0; // typedef enum { ADC_LEFT = 0, ADC_RIGHT = 1 } ADCResultFormat; // typedef enum { ADC_DONE = 0, ADC_IN_PROGRESS = 1 } ADCConversionStatus; // typedef enum { // ADC_AN00 = 0b0000, // ADC_AN01 = 0b0001, // ADC_AN02 = 0b0010, // ADC_AN03 = 0b0011, // ADC_AN04 = 0b0100, // ADC_AN05 = 0b0101, // ADC_AN06 = 0b0110, // ADC_AN07 = 0b0111, // ADC_AN08 = 0b1000, // ADC_AN09 = 0b1001, // ADC_AN10 = 0b1010, // ADC_AN11 = 0b1011, // ADC_AN12 = 0b1100, // ADC_AN13 = 0b1101, // ADC_CVREF = 0b1110, // CVREF // ADC_FXREF = 0b1111 // Fixed Ref (0.6V fixed voltage reference) // } ADCChannelSelect; // typedef enum { // ADC_FOSC02 = 0b00, // ADC_FOSC08 = 0b01, // ADC_FOSC32 = 0b10, // ADC_INTOSC = 0b11 // (FRC) from a dedicated internal oscillator = 500 kHz max // } ADCConversionClock; // typedef struct { // ADCEnable ADON; // ADCResultFormat ADFM; // ADCChannelSelect CHS; // ADCConversionClock ADCS; // ADCVoltageReference0 VCFG0; // ADCVoltageReference1 VCFG1; // ADCConversionStatus GO_nDONE; // } ADCConfig; // #[declarations:functions] void init_osc(OscillatorConfig config); void init_int(InterruptConfig config); void init_gpio(PinConfig ports[], int size); // void init_adc(ADCConfig config); #endif