Files
xc8-picamp/picamp.X/include/initialisation.h

118 lines
3.4 KiB
C

/*
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