Right now I’m transferring 192 bits of data via 24 bytes using SPI.Transfer(myByte here).
I would like to see is I can achieve better transfer speed using SPI.Tranfer(Buffer, size).
Looked all over the net for example with no success.
Can anyone point me in the right direction?
Please….
I have found that writing the code as per below is much faster than using a for - loop.
I have four case statement totaling 768 bits to be transfer; I would like to do this faster and neater if possible.
I have included a part of my code, first how i get the bits in to my bytes then a part of the SPI transfer.
void Cube::LED(byte CY, byte CX, byte CZ, byte CR, byte CG, byte CB) { //****LED Routine****LED Routine****LED Routine****LED Routine
// First, check and make sure nothing went beyond the limits, Limits are either 0 or 11/8 for location, and 0 or 15 for brightness/colour - BAM_RESOLUTION = 4
CY = constrain(CY, 0, Size_Y - 1);//Cube Y axis
CX = constrain(CX, 0, Size_X - 1);//Cube X axis
CZ = constrain(CZ, 0, Size_Z - 1);//Cube Y axis
CR = constrain(CR, 0, (1<<BAM_RESOLUTION)-1); //Cube Red
CG = constrain(CG, 0, (1<<BAM_RESOLUTION)-1); //Cube Green
CB = constrain(CB, 0, (1<<BAM_RESOLUTION)-1); //Cube Blue
//There are 768 LEDs in the cube, so when we write to level (Y) 2, column (X) 5, row 4 (Z), that needs to be translated into a number from 0 to 767
int whichbyte = ((CY * Size_Layer ) + (CX * Size_X) + CZ) / 8;
// This next variable is the same thing as before, but here we don't divide by 8, so we get the LED number 0-767
int wholebyte = (CY * Size_Layer) + (CX * Size_X) + CZ;
//This is 4 bit color resolution, so each color contains 4 x 96 byte arrays.
for(byte I = 0;I < BAM_RESOLUTION; I++){
//*** RED ***
bitWrite(red[I][whichbyte], wholebyte - (8 * whichbyte), bitRead(CR, I));
//*** GREEN ***
bitWrite(green[I][whichbyte], wholebyte - (8 * whichbyte), bitRead(CG, I));
//*** BLUE ***
bitWrite(blue[I][whichbyte], wholebyte - (8 * whichbyte), bitRead(CB, I));
}
}//****LED ROUTINE END****
case 0:
//Green
SPI.transfer(green[0][dataLevel]);
SPI.transfer(green[0][dataLevel + 1]);
SPI.transfer(green[0][dataLevel + 2]);
SPI.transfer(green[0][dataLevel + 3]);
SPI.transfer(green[0][dataLevel + 4]);
SPI.transfer(green[0][dataLevel + 5]);
SPI.transfer(green[0][dataLevel + 6]);
SPI.transfer(green[0][dataLevel + 7]);
//Red
SPI.transfer(red[0][dataLevel]);
SPI.transfer(red[0][dataLevel + 1]);
SPI.transfer(red[0][dataLevel + 2]);
SPI.transfer(red[0][dataLevel + 3]);
SPI.transfer(red[0][dataLevel + 4]);
SPI.transfer(red[0][dataLevel + 5]);
SPI.transfer(red[0][dataLevel + 6]);
SPI.transfer(red[0][dataLevel + 7]);
//Blue
SPI.transfer(blue[0][dataLevel]);
SPI.transfer(blue[0][dataLevel + 1]);
SPI.transfer(blue[0][dataLevel + 2]);
SPI.transfer(blue[0][dataLevel + 3]);
SPI.transfer(blue[0][dataLevel + 4]);
SPI.transfer(blue[0][dataLevel + 5]);
SPI.transfer(blue[0][dataLevel + 6]);
SPI.transfer(blue[0][dataLevel + 7]);
break;