Timer experiments WIP

This commit is contained in:
jaseg 2023-08-23 19:24:25 +02:00
parent b9059658c4
commit 6af143dd8f
2 changed files with 26 additions and 5 deletions

View file

@ -25,6 +25,7 @@
#define CLEAR(pin) (~(3<<(2*(pin)))) #define CLEAR(pin) (~(3<<(2*(pin))))
#define PULLUP(pin) (1<<(2*pin)) #define PULLUP(pin) (1<<(2*pin))
#define PULLDOWN(pin) (2<<(2*pin)) #define PULLDOWN(pin) (2<<(2*pin))
#define OSPEED(pin, val) ((val) << ((pin)*2))
#define BSRR_CLEAR(pin) ((1<<pin)<<16) #define BSRR_CLEAR(pin) ((1<<pin)<<16)
#define BSRR_SET(pin) (1<<pin) #define BSRR_SET(pin) (1<<pin)
#define BSRR_VALUE(pin, value) ((((!(value))<<pin)<<16) | ((!!(value))<<pin)) #define BSRR_VALUE(pin, value) ((((!(value))<<pin)<<16) | ((!!(value))<<pin))

View file

@ -11,7 +11,6 @@ int main(void) {
* HSE @ 8 MHz --[PLL x42 /2]--> PLL "R" clock @ 168 MHz * HSE @ 8 MHz --[PLL x42 /2]--> PLL "R" clock @ 168 MHz
*/ */
/* Enable peripherals */ /* Enable peripherals */
RCC->AHB2ENR |= RCC_AHB2ENR_GPIOAEN;
RCC->APB1ENR1 |= RCC_APB1ENR1_PWREN; RCC->APB1ENR1 |= RCC_APB1ENR1_PWREN;
/* Enable High-speed external crystal oscillator. The board has an 8 MHz crystal. */ /* Enable High-speed external crystal oscillator. The board has an 8 MHz crystal. */
RCC->CR |= RCC_CR_HSEON; RCC->CR |= RCC_CR_HSEON;
@ -37,16 +36,37 @@ int main(void) {
/* wait for RCC to switch over. */ /* 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<<TIM_CCMR1_OC1M_Pos) | (7<<TIM_CCMR1_OC2M_Pos);
TIM1->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<<TIM_BDTR_DTG_Pos);
TIM1->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 &= CLEAR(5) & CLEAR(6) & CLEAR(7);
GPIOA->MODER |= OUT(5) | OUT(6) | OUT(7); /* Status LEDs */ GPIOA->MODER |= OUT(5) | OUT(6) | OUT(7); /* Status LEDs */
GPIOA->BSRR = (1<<6);
int j = 0; int j = 0;
while(23) { while(23) {
j++; j++;
if (j == 3) GPIOA->BSRR = ((j&1)<<5) | ((1<<5)<<16);
j = 0; for(int i=0; i<2000000; i++) {
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++) {
asm volatile ("nop"); asm volatile ("nop");
} }
} }