From 6af143dd8f5f61bafcefbdfdc3ae0b64841cc5da Mon Sep 17 00:00:00 2001 From: jaseg Date: Wed, 23 Aug 2023 19:24:25 +0200 Subject: [PATCH] Timer experiments WIP --- include/global.h | 1 + src/main.c | 30 +++++++++++++++++++++++++----- 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/include/global.h b/include/global.h index d3fa85e..6a11324 100644 --- a/include/global.h +++ b/include/global.h @@ -25,6 +25,7 @@ #define CLEAR(pin) (~(3<<(2*(pin)))) #define PULLUP(pin) (1<<(2*pin)) #define PULLDOWN(pin) (2<<(2*pin)) +#define OSPEED(pin, val) ((val) << ((pin)*2)) #define BSRR_CLEAR(pin) ((1< PLL "R" clock @ 168 MHz */ /* Enable peripherals */ - RCC->AHB2ENR |= RCC_AHB2ENR_GPIOAEN; RCC->APB1ENR1 |= RCC_APB1ENR1_PWREN; /* Enable High-speed external crystal oscillator. The board has an 8 MHz crystal. */ RCC->CR |= RCC_CR_HSEON; @@ -37,16 +36,37 @@ int main(void) { /* wait for RCC to switch over. */ } + RCC->AHB2ENR |= RCC_AHB2ENR_GPIOAEN | RCC_AHB2ENR_GPIOBEN; + RCC->APB2ENR |= RCC_APB2ENR_TIM1EN; + GPIOA->MODER &= CLEAR(8) & CLEAR(9); + GPIOA->MODER |= AF(8) | AF(9); + GPIOA->AFR[1] |= AFRH(8, 6) | AFRH(9, 6); + GPIOA->OSPEEDR |= OSPEED(8, 3) | OSPEED(9, 3); + GPIOB->MODER &= CLEAR(13) & CLEAR(14); + GPIOB->MODER |= AF(13) | AF(14); + GPIOB->AFR[1] |= AFRH(13, 6) | AFRH(14, 6); + GPIOB->OSPEEDR |= OSPEED(13, 3) | OSPEED(14, 3); + TIM1->CCMR1 = (6<CCER = TIM_CCER_CC1E | TIM_CCER_CC1NE | TIM_CCER_CC2E | TIM_CCER_CC2NE; + TIM1->PSC = 0; + TIM1->ARR = 168*3; + TIM1->CCR1 = TIM1->ARR/2; + TIM1->CCR2 = TIM1->ARR/2; + TIM1->BDTR = TIM_BDTR_MOE | (64<CR1 = TIM_CR1_CEN; + + //GPIOA->MODER |= OUT(8) | OUT(9); + //GPIOB->MODER |= OUT(13) | OUT(14); + GPIOA->MODER &= CLEAR(5) & CLEAR(6) & CLEAR(7); GPIOA->MODER |= OUT(5) | OUT(6) | OUT(7); /* Status LEDs */ + GPIOA->BSRR = (1<<6); int j = 0; while(23) { j++; - if (j == 3) - j = 0; - GPIOA->BSRR = (((1<<5) | (1<<6) | (1<<7)) << 16) | ((~((1<<5) << j))&((1<<5)|(1<<6)|(1<<7))); - for(int i=0; i<5000000; i++) { + GPIOA->BSRR = ((j&1)<<5) | ((1<<5)<<16); + for(int i=0; i<2000000; i++) { asm volatile ("nop"); } }