diff options
author | jaseg <git@jaseg.net> | 2020-01-30 17:45:53 +0100 |
---|---|---|
committer | jaseg <git@jaseg.net> | 2020-01-30 17:45:53 +0100 |
commit | a6f75b2ce5f4a6d7d625d1753b97c075fc069705 (patch) | |
tree | cb3a3a713bb30b199901abb6f9121d1c701bf1f2 /gm_platform/fw/main.c | |
parent | da3a2835935173173da8843ecc4800961856ca44 (diff) | |
download | master-thesis-a6f75b2ce5f4a6d7d625d1753b97c075fc069705.tar.gz master-thesis-a6f75b2ce5f4a6d7d625d1753b97c075fc069705.tar.bz2 master-thesis-a6f75b2ce5f4a6d7d625d1753b97c075fc069705.zip |
Finally fixed LED driving code
Diffstat (limited to 'gm_platform/fw/main.c')
-rw-r--r-- | gm_platform/fw/main.c | 39 |
1 files changed, 12 insertions, 27 deletions
diff --git a/gm_platform/fw/main.c b/gm_platform/fw/main.c index 5741d7c..74f305b 100644 --- a/gm_platform/fw/main.c +++ b/gm_platform/fw/main.c @@ -21,17 +21,7 @@ volatile unsigned int sys_time_seconds = 0; - -void update_leds() { - -} - -volatile union { - struct { - unsigned int usb, ocxo, error, _nc1, _nc2, _nc3, pps, sd_card; - }; - unsigned int arr[8]; -} leds; +volatile union leds leds; int main(void) { RCC->CR |= RCC_CR_HSEON; @@ -79,22 +69,23 @@ int main(void) { SPI1->CR1 = SPI_CR1_SSM | SPI_CR1_SSI + | SPI_CR1_CPOL + | SPI_CR1_CPHA | (4<<SPI_CR1_BR_Pos) /* /32 ~1.5MHz */ | SPI_CR1_MSTR; SPI1->CR2 = (7<<SPI_CR2_DS_Pos); SPI1->CR1 |= SPI_CR1_SPE; - NVIC_EnableIRQ(SPI1_IRQn); - NVIC_SetPriority(SPI1_IRQn, 2<<5); - TIM16->CR2 = 0; - TIM16->DIER = TIM_DIER_UIE; + TIM16->DIER = TIM_DIER_UIE | TIM_DIER_CC1IE; + TIM16->CCMR1 = 0; + TIM16->CCR1 = 32; TIM16->PSC = 48-1; /* 1us */ TIM16->ARR = 1000-1; /* 1ms */ TIM16->CR1 = TIM_CR1_CEN; NVIC_EnableIRQ(TIM16_IRQn); - NVIC_SetPriority(TIM16_IRQn, 2<<5); + NVIC_SetPriority(TIM16_IRQn, 3<<5); adc_configure_scope_mode(1000000); @@ -108,21 +99,13 @@ int main(void) { } } -void SPI1_IRQHandler(void) { - if (SPI1->SR & SPI_SR_TXE) { - /* LED_STB */ - GPIOA->BSRR = 1<<3; - SPI1->CR2 &= ~SPI_CR2_TXEIE; - } -} - void TIM16_IRQHandler(void) { static int leds_update_counter = 0; if (TIM16->SR & TIM_SR_UIF) { TIM16->SR &= ~TIM_SR_UIF; uint8_t bits = 0, mask = 1; - for (size_t i=0; i<sizeof(leds)/sizeof(leds.arr[0]); i++) { + for (int i=0; i<8; i++) { if (leds.arr[i]) { leds.arr[i]--; bits |= mask; @@ -137,9 +120,11 @@ void TIM16_IRQHandler(void) { * data register is accessed through a 16-bit write. Unfortunately, the STMCube register defs define DR as an * uint16_t, so we have to do some magic here to force an 8-bit write. */ *((volatile uint8_t*)&(SPI1->DR)) = bits; - SPI1->CR2 |= SPI_CR2_TXEIE; GPIOA->BRR = 1<<3; } + } else { + TIM16->SR &= ~TIM_SR_CC1IF; + GPIOA->BSRR = 1<<3; } } @@ -166,7 +151,7 @@ void SysTick_Handler(void) { if (n++ == 10) { n = 0; sys_time_seconds++; - leds.pps = 100; /* ms */ + leds.pps = 200; /* ms */ } } |