fw: Basic dimming working

This commit is contained in:
jaseg 2017-05-30 19:32:49 +02:00
parent e7a9304cc7
commit ff0ba8e4df

View file

@ -7,6 +7,11 @@
* Part number: STM32F030F4C6
*/
#define NBITS 12
void do_transpose(void);
uint32_t brightness[8];
volatile uint8_t brightness_by_bit[NBITS];
int main(void) {
RCC->CR |= RCC_CR_HSEON;
while (!(RCC->CR&RCC_CR_HSERDY));
@ -74,7 +79,7 @@ int main(void) {
TIM1->SMCR = 0;
TIM1->DIER = 0;
TIM1->PSC = 4; // debug
TIM1->PSC = 1; // debug
/* CH2 - clear/!MR, CH3 - strobe/STCP */
TIM1->CCR2 = 1;
TIM1->RCR = 0;
@ -92,16 +97,100 @@ int main(void) {
TIM1->EGR |= TIM_EGR_UG;
for (;;) {
GPIOA->ODR ^= GPIO_ODR_6;
LL_mDelay(1);
while (42) {
/*
for (uint8_t i=0; i<8; i++) {
brightness[1] = brightness[5] = i;
brightness[2] = brightness[6] = 0;
brightness[3] = brightness[7] = 0;
do_transpose();
LL_mDelay(500);
}
for (uint8_t i=0; i<8; i++) {
brightness[1] = brightness[5] = 0;
brightness[2] = brightness[6] = i;
brightness[3] = brightness[7] = 0;
do_transpose();
LL_mDelay(500);
}
for (uint8_t i=0; i<8; i++) {
brightness[1] = brightness[5] = 0;
brightness[2] = brightness[6] = 0;
brightness[3] = brightness[7] = i;
do_transpose();
LL_mDelay(500);
}
for (uint8_t i=0; i<8; i++) {
brightness[1] = brightness[5] = i;
brightness[2] = brightness[6] = i;
brightness[3] = brightness[7] = i;
do_transpose();
LL_mDelay(500);
}
}
{
*/
for (uint32_t i=0; i<6; i++) {
for (uint32_t j=0; j<(1<<NBITS); j++) {
GPIOA->ODR ^= GPIO_ODR_6;
switch (i) {
case 0:
brightness[1] = brightness[5] = (1<<NBITS)-1;
brightness[2] = brightness[6] = 0;
brightness[3] = brightness[7] = j;
break;
case 1:
brightness[1] = brightness[5] = (1<<NBITS)-1-j;
brightness[2] = brightness[6] = 0;
brightness[3] = brightness[7] = (1<<NBITS)-1;
break;
case 2:
brightness[1] = brightness[5] = 0;
brightness[2] = brightness[6] = j;
brightness[3] = brightness[7] = (1<<NBITS)-1;
break;
case 3:
brightness[1] = brightness[5] = 0;
brightness[2] = brightness[6] = (1<<NBITS)-1;
brightness[3] = brightness[7] = (1<<NBITS)-1-j;
break;
case 4:
brightness[1] = brightness[5] = j;
brightness[2] = brightness[6] = (1<<NBITS)-1;
brightness[3] = brightness[7] = 0;
break;
case 5:
brightness[1] = brightness[5] = (1<<NBITS)-1;
brightness[2] = brightness[6] = (1<<NBITS)-1-j;
brightness[3] = brightness[7] = 0;
break;
}
do_transpose();
LL_mDelay(1);
}
}
}
}
#define NBITS 4
uint8_t brightness_by_bit[NBITS] = {
0x11, 0x22, 0x44, 0x88
};
uint32_t brightness[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
volatile uint8_t brightness_by_bit[NBITS] = { 0 };
void do_transpose(void) {
for (uint32_t i=0; i<NBITS; i++) {
uint8_t bv = 0;
uint32_t mask = 1<<i;
for (uint32_t j=0; j<8; j++) {
if (brightness[j] & mask)
bv |= 1<<j;
}
brightness_by_bit[i] = bv;
}
}
/*
* 460ns
* 720ns
*/
/*
* 1.00us
@ -115,12 +204,14 @@ uint8_t brightness_by_bit[NBITS] = {
*/
void TIM1_BRK_UP_TRG_COM_IRQHandler(void) {
static uint32_t idx = 0;
idx = (idx+1)&7;
idx++;
if (idx >= NBITS)
idx = 0;
GPIOA->ODR ^= GPIO_ODR_4;
TIM1->CCMR1 = (4<<TIM_CCMR1_OC2M_Pos); // | TIM_CCMR1_OC2PE;
SPI1->DR = 0x88<<8;
SPI1->DR = brightness_by_bit[idx]<<8;
while (SPI1->SR & SPI_SR_BSY);
const uint32_t period_base = 4; /* 1us */