/* * File: SPI.h * Author: Joshua Ellis Drake */ // This is a guard condition so that contents of this file are not included // more than once. #ifndef XC_SPI_H #define XC_SPI_H #include "stdint.h" #define MY_BUFFER_SIZE 6 //3 Devices, each of which is 16 bit. (16/8)*3=6 enum messages { OUT = 0, //Output control On or Off BIM, //Sets Latch off or Auto Restart Mode MAPIN0, //Mapping of IN0 to OUTx MAPIN1, //Mapping of IN1 to OUTx INST, //Reports Transmission Bit Errors and Reports INx pin Status OLDCC, //Open Load Diagnostic Current Control OSM, //Output Status Monitor | Reports open circuit conditions in OFF sate | Reports output status in the ON state. OLOM, //Open Load On Monitor HWCR, //Hardware Configuration Register | HWCR.ACT Active Mode Transitions | HWCR.RST SPI Register Reset | HWCR.PAR Sets Parallel Channel Operation OCL, //Output Clear Latch | Clears the error latch for a selected output PWMCR, //PWM Configuration Register | HWCR_PWM.ADJ Base PWM frequency adjust | HWCR_PWM.PWM1 PWM Generator 1 Activation | HWCR_PWM.PWM0 PWM Generator 0 Activation PWMGC0, //PWM_CR0.FREQ Sets internal divide by clock of PWM generator for Gen 0 | PWM_CR0.DC Sets PWM Generator 0 duty cycle PWMGC1, //PWM_CR1.FREQ Sets internal divide by clock of PWM generator for Gen 1 | PWM_CR1.DC Sets PWM Generator 1 duty cycle PWMOC, //Selects the active PWM generator for OUTx PWMMAP //Selects one of the two PWM generators }; void Message_OUT(uint8_t Ohm_150, uint8_t Ohm_68, uint8_t testLED); /** @Summary Enables a selected quantity of 150 ohm resistors and 68 ohm resistors. @Description In 400V mode the user can select a certain quantity of both 68 and 150 ohm resistors to be enabled, while in 550V mode the user can only access the 150ohm resistors. A test LED can also be enabled. @Preconditions The MSSP1_SPI_Initialize routine must have been called for the specified MSSP1_SPI driver instance. System must be in 400V mode for 68 ohm resistors to be accessible. @Param 150Ohm - Number of 150 ohm resistors to enable (up to 15). 68Ohm - Number of 68 ohm resistors to enable (up to 5). testLED - True enables the test LED. @Returns Void. @Example Message_OUT(15, 5, false); //Max Load with testLED turned off. */ void active(uint8_t *ohm150, uint8_t *ohm68); int bitcount(uint8_t); void Message_BIM(uint8_t outputs[3]); /** @Summary Chooses whether an output pin will latch off in the event of an overload or restart. @Description Bulb Inrush Mode bits (BIM.OUTn) 0B (default) Output latches off with overload 1B Output restarts with overload DATA = Channel number 7 to 0 (7:0) @Preconditions The MSSP1_SPI_Initialize routine must have been called for the specified MSSP1_SPI driver instance. @Param outputs[] - An array containing the data to be written to each of the three registers. @Returns Void. @Example Message_BIM({0xFF, 0x11, 0x00}); //All outputs of the first chip will restart with overload, two of the second chip's outputs will restart on overload, and all of the remaining pins will latch off with overload. */ void Message_MAPIN0(uint8_t outputs[3]); /** @Summary Chooses which output pins are controlled by IN0. @Description Input Mapping (IN0) bits (MAPIN0.OUTn) 0B (default) No connection to input pin 1B Output is connected to the input pin DATA = Channel number 7 to 0 (7:0) Note ? Channel 2 has the corresponding bit set to ?1? by default @Preconditions The MSSP1_SPI_Initialize routine must have been called for the specified MSSP1_SPI driver instance. @Param outputs[] - An array containing the data to be written to each of the three registers. @Returns Void. @Example Message_MAPIN0({0x00, 0x00, 0x00}); //All outputs of each of the three driver ICs are not connected to IN0. */ void Message_MAPIN1(uint8_t outputs[3]); /** @Summary Chooses which output pins are controlled by IN0. @Description Input Mapping (IN1) bits (MAPIN1.OUTn) 0B (default) No connection to input pin 1B Output is connected to the input pin DATA = Channel number 7 to 0 (7:0) Note ? Channel 3 has the corresponding bit set to ?1? by default @Preconditions The MSSP1_SPI_Initialize routine must have been called for the specified MSSP1_SPI driver instance. @Param outputs[] - An array containing the data to be written to each of the three registers. @Returns Void. @Example Message_MAPIN1({0x00, 0x00, 0x00}); //All outputs of each of the three driver ICs are not connected to IN1. */ void Message_INST(void); /** @Summary Retrieves data regarding the input pins and TER bit. @Description Input Status Monitor TER bit bit (TER) (7) 0B Previous transmission was successful 1B (default) Previous transmission failed * Inx Bit bits (INST.RES) (6:2) ? reserved, bits (INST.INn) (1:0) 0B (default) The input pin is set low 1B The input pin is set high @Preconditions The MSSP1_SPI_Initialize routine must have been called for the specified MSSP1_SPI driver instance. @Param Void. @Returns Void. @Example Message_INST(void); // :) */ void Message_DAGIOL(uint8_t outputs[3]); /** @Summary Open Load Diagnostic Current Control @Description bits (DIAG_IOL.OUTn) 0B (default) Diagnostic current is not enabled 1B Diagnostic current is enabled DATA = Channel number 7 to 0 (7:0) @Preconditions The MSSP1_SPI_Initialize routine must have been called for the specified MSSP1_SPI driver instance. @Param outputs[] - An array containing the channel numbers from which to write or obtain information. @Returns Void. @Example Message_DAGIOL({0xFF, 0xFF, 0xFF}); //Obtains information from all channels of the three connected devices. */ void Message_DAGOSM(void); /** @Summary Output Status Monitor Bits (DIAG_OSM.OUTn) @Description 0B (default) Voutx is less than the Output Status Monitor Threshold Voltage 3.3 V (typ) 1B Voutx is more than the Output Status Monitor Threshold Voltage 3.3 V (typ) DATA = Channel number 7 to 0 (7:0) @Preconditions The MSSP1_SPI_Initialize routine must have been called for the specified MSSP1_SPI driver instance. @Param Void. @Returns Void. @Example Message_DAGOSM(void); */ void Message_DAGOLON(void); /** @Summary Open Load On Monitor Bits (DIAG_OLON.OUTn) @Description 0B (default) Normal operation or diagnostic performed with channel off 1B Open load On detected DATA = Channel number 7 to 0 (7:0) @Preconditions The MSSP1_SPI_Initialize routine must have been called for the specified MSSP1_SPI driver instance. @Param Void. @Returns Void. @Example Message_DAGOLON(void); */ void Message_DAGOLONEN(uint8_t outputs[3]); /** @Summary Open Load On Diagnostic Control @Description bits (7:4) ? reserved, bits 1000B , 1001B , 1011B , 1100B , 1101B , 1100B ? reserved bits (DIAG_OLONEN.MUX) (3:0) 0000B Open Load ON active channel 0 0001B Open Load ON active channel 1 0010B Open Load ON active channel 2 0011B Open Load ON active channel 3 0100B Open Load ON active channel 4 0101B Open Load ON active channel 5 0110B Open Load ON active channel 6 0111B Open Load ON active channel 7 1010B Open Load ON Diagnostic Loop Start 1111B (default) Open Load ON not active @Preconditions The MSSP1_SPI_Initialize routine must have been called for the specified MSSP1_SPI driver instance. @Param outputs[] - An array containing the status of the specified channel of each of the three ICs. @Returns Void. @Example Message_DAGOLONEN({0b00000000, 0xFF, 0xFF}); //Open Load ON active on channel 0 of the first IC. */ void Message_HWCR(void); /** @Summary Hardware Configuration Register Bits @Description Active Mode bits (HWCR.ACT) (7) 0B (default) Normal operation or device leaves Active Mode 1B Device enters Active Mode * SPI Register Reset bits (HWCR.RST) (6) 0B (default) Normal operation 1B Reset command executed ERRn bits are not cleared by a reset command for safety reasons * Channels Operating in Parallel bits (HWCR.PAR) (3:0) 0B (default) Normal operation 1B Two neighboring channels have overload and overtemperature synchronized. See section ?Outputs in Parallel? for output combinations @Preconditions The MSSP1_SPI_Initialize routine must have been called for the specified MSSP1_SPI driver instance. @Param outputs[] - An array containing the Active Mode, SPI Register, and "Channels Operating in Parallel" bits for each device. @Returns Void. @Example Message_DAGOLONEN({0b11xx0000, 0b00xx0000, 0b00xx0000}); //Device 1 enters active mode, resets SPI operation, and maintains normal latch operation. */ void Message_HWCROCL(uint8_t outputs[3]); /** @Summary Output Latch (ERRn) Clear bits (HWCR_OCL.OUTn) @Description 0B (default) Normal operation 1B Clear the error latch for the selected output The HWCR_OCL.OUTn bit is set back to ?0? internally after de?latching the channel DATA = 7 to 0 (7:0) @Preconditions The MSSP1_SPI_Initialize routine must have been called for the specified MSSP1_SPI driver instance. @Param outputs[] - An array containing bits corresponding to the latch error reset of each channel. @Returns Void. @Example Message_DAGOLONEN({0xFF, 0xFF, 0xFF}); //Reset Latch Errors are reset. */ void Message_HWCRPWM(uint8_t outputs[3]); /** @Summary Hardware Clear for all PWM registers. @Description PWM Configuration Register (HWCR_PWM.RES) (3:2) (reserved) PWM Adjustment bits (HWCR_PWM.ADJ) (7:4) HWCR_PWM.ADJ Bit Absolute delta for fINT Relative delta between steps 0000B (reserved) 0001B Base Frequency ?35.0% ?35.0% (66.3 kHz[typ]) 0010B Base Frequency ?30.0% 0011B Base Frequency ?25.0% 0100B Base Frequency ?20.0% 0101B Base Frequency ?15.0% 0110B Base Frequency ?10.0% 0111B Base Frequency ?5.0% 1000B Base Frequency fINT (102 kHz [typ])(default) 1001B Base Frequency +5.0% 1010B Base Frequency +10.0% 1011B Base Frequency +15.0% 1100B Base Frequency +20.0% 1101B Base Frequency +25.0% 1110B Base Frequency +30.0% 1111B Base Frequency +35.0% +35.0 (137.7 kHz[typ]) PWM1 Active bits (HWCR_PWM.PWM1) (1) 0B (default) PWM Generator 1 not active 1B PWM Generator 1 active PWM0 Active (HWCR_PWM.PWM0) (0) 0B (default) PWM Generator 0 not active 1B PWM Generator 0 active @Preconditions The MSSP1_SPI_Initialize routine must have been called for the specified MSSP1_SPI driver instance. @Param outputs[] - An array containing bits corresponding to the PWM Hardware. @Returns Void. @Example Message_HWCRPWM({0b1000xx00, 0b1000xx00, 0b1000xx00}); //Set all three ICs to typical base frequency and disable both PWM Generators. */ void Message_PWMCR0(uint16_t outputs[3]); /** @Summary PWM Generator 0 Configuration @Description CR0 Frequency (PWM_CR0.FREQ) (9:8) 00B Internal clock divided by 1024 (100 Hz) (default) 01B Internal clock divided by 512 (200 Hz) 10B Internal clock divided by 256 (400 Hz) 11B 100% Duty Cycle. CR0 generator on/off control (PWM_CRO.DC) (7:0) 00000000B PWM generator is off. (default) 11111111B PWM generator is On (99.61% DC). @Preconditions The MSSP1_SPI_Initialize routine must have been called for the specified MSSP1_SPI driver instance. @Param outputs[] - A 16 bit array containing bits which adjust the PWM0 frequency as well as enable/disable the generator itself. @Returns Void. @Example Message_PWMCR0({0xX000, 0xX000, 0xX000}); //Set the PWM frequency to be 100Hz and disable PWM0. */ void Message_PWMCR1(uint16_t outputs[3]); /** @Summary PWM Generator 1 Configuration @Description CR0 Frequency (PWM_CR1.FREQ) (9:8) 00B Internal clock divided by 1024 (100 Hz) (default) 01B Internal clock divided by 512 (200 Hz) 10B Internal clock divided by 256 (400 Hz) 11B 100% Duty Cycle. CR1 generator on/off control (PWM_CR1.DC) (7:0) 00000000B PWM generator is off. (default) 11111111B PWM generator is On (99.61% DC). @Preconditions The MSSP1_SPI_Initialize routine must have been called for the specified MSSP1_SPI driver instance. @Param outputs[] - A 16 bit array containing bits which adjust the PWM1 frequency as well as enable/disable the generator itself. @Returns Void. @Example Message_PWMCR1({0xX000, 0xX000, 0xX000}); //Set the PWM frequency to be 100Hz and disable PWM1. */ void Message_PWMOUT(uint8_t outputs[3]); /** @Summary Select which outputs are connected to any PWM generator. @Description PWM Generator Output Control (PWM_OUT.OUTn) 0B (default) The selected output is not driven by one of the two PWM generators 1B The selected output is connected to a PWM generator DATA = Channel number 0 to 7 @Preconditions The MSSP1_SPI_Initialize routine must have been called for the specified MSSP1_SPI driver instance. @Param outputs[] - An array containing bits which determine which, if any, outputs are connected to the PWM generators. @Returns Void. @Example Message_PWMOUT({0x00, 0x00, 0x00}); //All outputs are not connected to any of the PWM generators. */ void Message_PWMMAP(uint8_t outputs[3]); /** @Summary Select which PWM generator corresponds to which output. @Description PWM Generator Output Mapping (PWM_MAP.OUTn) 0B (default) The selected output is connected to PWM Generator 0 1B The selected output is connected to PWM Generator 1 DATA = Channel number 0 to 7 Works in conjunction with PWM_OUT @Preconditions The MSSP1_SPI_Initialize routine must have been called for the specified MSSP1_SPI driver instance. @Param outputs[] - An array containing bits which map the PWM generators to specific outputs. @Returns Void. @Example Message_PWMMAP({0x00, 0x00, 0x00}); //All outputs are connected to PWM0. */ #endif /* XC_SPI_H */