int main(void) { rcc_clock_setup_in_hse_16mhz_out_72mhz(); gpio_setup(); nvic_setup(); gpio_clear(GPIOB, GPIO7); /* LED1 on */ gpio_set(GPIOB, GPIO6); /* LED2 off */ rcc_peripheral_enable_clock(&RCC_APB1ENR, RCC_APB1ENR_TIM2EN); /* the goal is to let the LED2 glow for a second and then be off for a second */ /* Set timer start value */ TIM_CNT(TIM2) = 1; /* Set timer prescaler. 72MHz/1440 => 50000 counts per second */ TIM_PSC(TIM2) = 1440; /* End timer value. If this value is reached an interrupt is generated */ TIM_ARR(TIM2) = 50000; /* Update interrupt enable */ TIM_DIER(TIM2) |= TIM_DIER_UIE; /* Start timer */ TIM_CR1(TIM2) |= TIM_CR1_CEN; while(1); /* Halt. */ return 0; }
int main ( void ) { #if 1 // go for 120MHz, built into libopencm3 // requires: external 8MHz crystal on pin5/6 with associated caps to ground rcc_clock_setup_hse_3v3 ( &hse_8mhz_3v3 [ CLOCK_3V3_120MHZ ] ); #endif #if 1 // fill framebuffer with offset squares //unsigned char i; unsigned int x, y; unsigned char v; for ( y = 0; y < FBHEIGHT; y++ ) { //i = 0; i = ( y / 10 ) % 5; for ( x = 0; x < FBWIDTH; x++ ) { if ( x % 10 == 0 ) { i++; } if ( i == 0 ) { v = (unsigned char) GPIO0; } else if ( i == 1 ) { v = (unsigned char) GPIO1; } else if ( i == 2 ) { v = (unsigned char) GPIO2; } else if ( i == 3 ) { v = (unsigned char) GPIO3; } else if ( i == 4 ) { v = (unsigned char) GPIO4; } else if ( i == 5 ) { v = (unsigned char) GPIO5; } else { i = 0; v = (unsigned char) GPIO0; } *( framebuffer + ( y * FBWIDTH ) + x ) = v; //*( framebuffer + ( y * FBWIDTH ) + x ) = (unsigned char) 0; //*( framebuffer + ( y * FBWIDTH ) + x ) = (unsigned char)( GPIO3 ); //*( framebuffer + ( y * FBWIDTH ) + x ) = (unsigned char)( GPIO5 ); //*( framebuffer + ( y * FBWIDTH ) + x ) = (unsigned char)( GPIO1 | GPIO3 ); //*( framebuffer + ( y * FBWIDTH ) + x ) = (unsigned char)( GPIO1 | GPIO0 ); //*( framebuffer + ( y * FBWIDTH ) + x ) = (unsigned char)( GPIO0 | GPIO1 ); //*( framebuffer + ( y * FBWIDTH ) + x ) = (unsigned char)( GPIO0 | GPIO1 | GPIO2 | GPIO3 ); //*( framebuffer + ( y * FBWIDTH ) + x ) = (unsigned char)( GPIO2 | GPIO3 ); //*( framebuffer + ( y * FBWIDTH ) + x ) = (unsigned char)( GPIO4 | GPIO5 ); } // x } // y #endif #if 0 // fill framebuffer with vertical stripes of all colours (1px per colour) //unsigned char i; unsigned int x, y; unsigned char v; for ( y = 0; y < FBHEIGHT; y++ ) { i = 0; for ( x = 0; x < FBWIDTH; x++ ) { *( framebuffer + ( y * FBWIDTH ) + x ) = i / 6; //*( framebuffer + ( y * FBWIDTH ) + x ) = (unsigned char)( GPIO0 | GPIO1 ); i++; } // x } // y #endif #if 0 // vertical strip every 10 pixels //unsigned char i; unsigned int x, y; for ( y = 0; y < FBHEIGHT; y++ ) { i = 0; for ( x = 0; x < FBWIDTH; x++ ) { if ( i >= 9 ) { *( framebuffer + ( y * FBWIDTH ) + x ) = GPIO0; } if ( i == 12 ) { i = 0; } i++; } // x } // y #endif gpio_setup(); /* Enable TIM2 clock. */ rcc_peripheral_enable_clock(&RCC_APB1ENR, RCC_APB1ENR_TIM2EN); //__enable_irq(); //cm_enable_interrupts(); nvic_setup(); timer2_setup(); dma_setup(); gpio_set ( GPIOB, GPIO12 ); TIM_SR(TIM2) &= ~TIM_SR_UIF; /* Clear interrrupt flag. */ while ( 1 ) { __asm__("nop"); } // while forever return 0; }