/* * File: SPI.c * Author: josh * * Created on November 2, 2023, 4:37 AM */ #include "SPI.h" #include "mcc_generated_files/mssp1_spi.h" uint8_t WriteBuffer[MY_BUFFER_SIZE]; uint8_t ReadBuffer[MY_BUFFER_SIZE]; uint16_t writeData; uint16_t readData; uint8_t addr0; uint8_t addr1; uint8_t write; unsigned int total; /*do { total = MSSP1_SPI_Exchange8bitBuffer( &myWriteBuffer[total], MY_BUFFER_SIZE - total, &myWriteBuffer[total]); // Do something else... } while( total < MY_BUFFER_SIZE );*/ void Message_OUT(uint8_t Ohm_150, uint8_t Ohm_68, uint8_t testLED) { if (Ohm_150 > 15) Ohm_150 = 15; if (Ohm_68 > 5) Ohm_68 = 5; //WriteBuffer[0] = WriteBuffer[2] = WriteBuffer[4] = (write << 8) | (!write << 7) | 0b000000; WriteBuffer[0] = WriteBuffer[2] = WriteBuffer[4] = 0b10000000; WriteBuffer[5] = !(0xFF << Ohm_150); WriteBuffer[3] = !(0xFF << (Ohm_150 - 8)) | ((Ohm_68 - 4) << 7); WriteBuffer[1] = !(0xFF << (Ohm_68 - 1)) | (testLED << 7); //WriteBuffer[1] = 0xFF; //if (Ohm_68 == 5) WriteBuffer[3]|= 0b10000000; readData = MSSP1_SPI_Exchange8bitBuffer(WriteBuffer, 6, ReadBuffer); } uint8_t active150() { WriteBuffer[0] = WriteBuffer[2] = WriteBuffer[4] = 0b01000000; WriteBuffer[1] = WriteBuffer[3] = WriteBuffer[5] = 0x00; readData = MSSP1_SPI_Exchange8bitBuffer(WriteBuffer, 6, ReadBuffer); return (bitcount(ReadBuffer[5]) + bitcount(ReadBuffer[3] << 1)); } uint8_t active68() { WriteBuffer[0] = WriteBuffer[2] = WriteBuffer[4] = 0b01000000; WriteBuffer[1] = WriteBuffer[3] = WriteBuffer[5] = 0x00; readData = MSSP1_SPI_Exchange8bitBuffer(WriteBuffer, 6, ReadBuffer); return ((ReadBuffer[3] >> 7) + bitcount(ReadBuffer[1] << 1)); } void Message_BIM(uint8_t outputs[3]) { WriteBuffer[0] = WriteBuffer[2] = WriteBuffer[4] = (write << 8) | (!write << 7) | 0b000001; WriteBuffer[1] = outputs[0]; WriteBuffer[3] = outputs[1]; WriteBuffer[5] = outputs[2]; } void Message_MAPIN0(uint8_t outputs[3]) { WriteBuffer[0] = WriteBuffer[2] = WriteBuffer[4] = (write << 8) | (!write << 7) | 0b000100; WriteBuffer[1] = outputs[0]; WriteBuffer[3] = outputs[1]; WriteBuffer[5] = outputs[2]; } void Message_MAPIN1(uint8_t outputs[3]) { WriteBuffer[0] = WriteBuffer[2] = WriteBuffer[4] = (write << 8) | (!write << 7) | 0b000101; WriteBuffer[1] = outputs[0]; WriteBuffer[3] = outputs[1]; WriteBuffer[5] = outputs[2]; } void Message_INST(void) { WriteBuffer[0] = WriteBuffer[2] = WriteBuffer[4] = 0x46; } void Message_DAGIOL(uint8_t outputs[3]) { WriteBuffer[0] = WriteBuffer[2] = WriteBuffer[4] = (write << 8) | (!write << 7) | 0b001000; WriteBuffer[1] = outputs[0]; WriteBuffer[3] = outputs[1]; WriteBuffer[5] = outputs[2]; } void Message_DAGOSM(void) { WriteBuffer[0] = WriteBuffer[2] = WriteBuffer[4] = 0x49; } void Message_DAGOLON(void) { WriteBuffer[0] = WriteBuffer[2] = WriteBuffer[4] = 0x4A; } void Message_DAGOLONEN(uint8_t outputs[3]) { WriteBuffer[0] = WriteBuffer[2] = WriteBuffer[4] = (write << 8) | (!write << 7) | 0b001011; WriteBuffer[1] = outputs[0]; WriteBuffer[3] = outputs[1]; WriteBuffer[5] = outputs[2]; } void Message_HWCR(uint8_t outputs[3]) { //WriteBuffer[0] = WriteBuffer[2] = WriteBuffer[4] = (write << 8) | (!write << 7) | 0b001100; //WriteBuffer[1] = outputs[0]; //WriteBuffer[3] = outputs[1]; //WriteBuffer[5] = outputs[2]; WriteBuffer[0] = 0b10001100; WriteBuffer[1] = 0b10000000; readData = MSSP1_SPI_Exchange8bitBuffer(*WriteBuffer, 2, *ReadBuffer); } void Message_HWCROCL(uint8_t outputs[3]) { WriteBuffer[0] = WriteBuffer[2] = WriteBuffer[4] = 0x8D; WriteBuffer[1] = outputs[0]; WriteBuffer[3] = outputs[1]; WriteBuffer[5] = outputs[2]; } void Message_HWCRPWM(uint8_t outputs[3]) { WriteBuffer[0] = WriteBuffer[2] = WriteBuffer[4] = (write << 8) | (!write << 7) | 0b001110; WriteBuffer[1] = outputs[0]; WriteBuffer[3] = outputs[1]; WriteBuffer[5] = outputs[2]; } void Message_PWMCR0(uint16_t outputs[3]) { WriteBuffer[0] = WriteBuffer[2] = WriteBuffer[4] = (write << 8) | (!write << 7) | (0b00010000); WriteBuffer[0] |= (outputs[0] << 6) >> 14; WriteBuffer[2] |= (outputs[1] << 6) >> 14; WriteBuffer[4] |= (outputs[3] << 6) >> 14; WriteBuffer[1] = (outputs[0] << 8) >> 8; WriteBuffer[3] = (outputs[1] << 8) >> 8; WriteBuffer[5] = (outputs[2] << 8) >> 8; } void Message_PWMCR1(uint16_t outputs[3]) { WriteBuffer[0] = WriteBuffer[2] = WriteBuffer[4] = (write << 8) | (!write << 7) | (0b00010100); WriteBuffer[0] |= (outputs[0] << 6) >> 14; WriteBuffer[2] |= (outputs[1] << 6) >> 14; WriteBuffer[4] |= (outputs[3] << 6) >> 14; WriteBuffer[1] = (outputs[0] << 8) >> 8; WriteBuffer[3] = (outputs[1] << 8) >> 8; WriteBuffer[5] = (outputs[2] << 8) >> 8; } void Message_PWMOUT(uint8_t outputs[3]) { WriteBuffer[0] = WriteBuffer[2] = WriteBuffer[4] = (write << 8) | (!write << 7) | 0b100100; WriteBuffer[1] = outputs[0]; WriteBuffer[3] = outputs[1]; WriteBuffer[5] = outputs[2]; } void Message_PWMMAP(uint8_t outputs[3]) { WriteBuffer[0] = WriteBuffer[2] = WriteBuffer[4] = (write << 8) | (!write << 7) | 0b100101; WriteBuffer[1] = outputs[0]; WriteBuffer[3] = outputs[1]; WriteBuffer[5] = outputs[2]; } uint8_t bitcount(uint8_t n) { uint8_t count = 0; while (n > 0) { count++; n = n & (n-1); } return count; }