/* * 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[1] = 0xFF >> (15-Ohm_150); //WriteBuffer[3] = 0xFE << (7-(Ohm_150-8)) | (Ohm_68 - 4); //2WriteBuffer[1] = 0x0F << (4-(Ohm_68 - 1)) | (testLED << 7); WriteBuffer[1] = (0xf0 >> (Ohm_68 - 1)) | (testLED << 7); if(Ohm_150>7)WriteBuffer[3] = 0x7f | ((Ohm_68 - 4)<<7); else WriteBuffer[3] = (0x7f >> (7-Ohm_150)) | ((Ohm_68 - 4)<<7); WriteBuffer[5] = 0xff >> (15-Ohm_150); //WriteBuffer[1] = 0xFF; //if (Ohm_68 == 5) WriteBuffer[3]|= 0b10000000; readData = MSSP1_SPI_Exchange8bitBuffer(WriteBuffer, 6, ReadBuffer); } int active150() { WriteBuffer[0] = WriteBuffer[2] = WriteBuffer[4] = 0x40; WriteBuffer[1] = WriteBuffer[3] = WriteBuffer[5] = 0x02; readData = MSSP1_SPI_Exchange8bitBuffer(WriteBuffer, 6, ReadBuffer); return bitcount(ReadBuffer[2]&0x7F) + (bitcount(ReadBuffer[4])); //+ bitcount(ReadBuffer[3] << 1)); } int active68() { WriteBuffer[0] = WriteBuffer[2] = WriteBuffer[4] = 0x40; WriteBuffer[1] = WriteBuffer[3] = WriteBuffer[5] = 0x02; readData = MSSP1_SPI_Exchange8bitBuffer(WriteBuffer, 6, ReadBuffer); return ((ReadBuffer[2] & 0x80) + bitcount(ReadBuffer[0] & 0x0f)); } 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]; } int bitcount(uint8_t n) { uint8_t count = 0; while (n > 0) { count++; n = n & (n-1); } return count; }