14,7 → 14,7 |
Nop(); |
} |
|
void Cube_Init(CUBE_DATA *data) { |
void Cube_Init(CUBE_DATA *data, char BC) { |
cube_data_ptr = data; |
current_layer = 0; |
|
44,30 → 44,8 |
Cube_Delay(); |
SFT_R = 1; |
|
int i,j; |
// Write configuration data to the DC/BC/FC/UD registers |
unsigned char DCS[GCS_LAYER_SIZE] = {0}; |
for (i = 0; i < 8; i++) { |
int offset = i * GCS_REG_SIZE; |
|
for (j = 0; j < 21; j++) { |
DCS[offset + j] = 0xFF; // Dot correction |
} |
|
// Warning: do not set BC > 0x8F |
DCS[offset + 21] = 0x1F; // Global red brightness |
DCS[offset + 22] = 0x1F; // Global green brightness |
DCS[offset + 23] = 0x1F; // Global blue brightness |
|
// DC low range, auto repeat, no timing reset, 8 bit counter mode |
DCS[offset + 24] = 0x68; // 0110 1000 |
} |
|
Cube_Write_DCS(BC); |
Cube_Clear(); |
|
GSLAT = 1; |
SPI1_Write(DCS, GCS_LAYER_SIZE, &Cube_DCS_Write_Callback); |
Delay_MS(8); // Delay until the entire DCS write is finished |
} |
|
void Cube_Timer_Interrupt(void) { |
113,6 → 91,35 |
current_layer = (current_layer == CUBE_LAYER_COUNT-1) ? 0 : current_layer + 1; |
} |
|
void Cube_Write_DCS(char BC) { |
if (BC > CUBE_MAX_BRIGHTNESS) |
BC = CUBE_MAX_BRIGHTNESS; |
|
XBLNK = 0; |
int i,j; |
// Write configuration data to the DC/BC/FC/UD registers |
unsigned char DCS[GCS_LAYER_SIZE] = {0}; |
for (i = 0; i < 8; i++) { |
int offset = i * GCS_REG_SIZE; |
|
for (j = 0; j < 21; j++) { |
DCS[offset + j] = 0xFF; // Dot correction |
} |
|
// Warning: do not set BC > 0x6F |
DCS[offset + 21] = BC; // Global red brightness |
DCS[offset + 22] = BC; // Global green brightness |
DCS[offset + 23] = BC; // Global blue brightness |
|
// DC low range, auto repeat, no timing reset, 8 bit counter mode |
DCS[offset + 24] = 0x68; // 0110 1000 |
} |
|
GSLAT = 1; |
SPI1_Write(DCS, GCS_LAYER_SIZE, &Cube_DCS_Write_Callback); |
Delay_MS(8); // Delay until the entire DCS write is finished |
} |
|
void Cube_Clear(void) { |
int i,j; |
for (i = 0; i < CUBE_LAYER_COUNT; i++) |