started working on clock control, not working

This commit is contained in:
ayabusa 2024-04-17 20:10:01 +02:00
parent 3a4fa32c93
commit ee23bf80fd
12 changed files with 67 additions and 3 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,32 @@
#include "clock.h"
/* This should set the speed to 216MHz intead of just 48MHz */
void init_clock(){
// ACR means flash Access control register
FLASH->ACR |= (FLASH_ACR_LATENCY_7WS | // 7 wait states
FLASH_ACR_PRFTEN | // prefetch on
FLASH_ACR_ARTEN); // ART on
// enables HSE and wait for it to be ready
RCC->CR |= (RCC_CR_HSEON);
while (!(RCC->CR & RCC_CR_HSERDY)) {};
// clear the specified bit
// (8/4)*108 = 216MHz
/*
RCC->PLLCFGR |= (RCC_PLLCFGR_PLLSRC_HSE | // HSE: 8MHz
RCC_PLLCFGR_PLLN_108 | // *108
RCC_PLLCFGR_PLLM_25); // /4
*/
RCC->PLLCFGR = 0b00001000010000100110000000001000; // HSE: 8MHz*/
// enable the RCC clock and wait for it to be ready
RCC->CR |= (RCC_CR_PLLON);
while (!(RCC->CR & RCC_CR_PLLRDY)) {};
// set it as the system clock source
RCC->CFGR &= ~(RCC_CFGR_SW);
RCC->CFGR |= (RCC_CFGR_SW_PLL);
while (!(RCC->CFGR & RCC_CFGR_SWS_PLL)) {};
}

View File

@ -0,0 +1,25 @@
/** @file clock.h
*
* @brief Handle clock init and all
*
*/
#ifndef CLOCK_H
#define CLOCK_H
#include "stdint.h"
#include "../device/stm32f730xx.h"
#define PLL_N 384
#define PLL_M 8
#define PLL_P 2
#define PLL_Q 8
/*
RCC->PLLCFGR |= 0b00001000010000100110000000001000; // HSE: 8MHz*/
//0b0000/*<-null*/1000/*<-PLLQ*/0/*<-null*/1/*<-PLLPSRC(HSE)*/0000/*<-null*/10/*<-PLLP*/0/*<-null*/110000000/*<-PLLN*/001000/*<-PLLM*/
void init_clock();
#endif

View File

@ -10,4 +10,5 @@ void laplace_init(){
enable_gpio_x_rcc(GPIO_C); //column (in) enable_gpio_x_rcc(GPIO_C); //column (in)
enable_gpio_x_rcc(GPIO_A); //row (out) enable_gpio_x_rcc(GPIO_A); //row (out)
keyboard_init(); keyboard_init();
init_clock();
} }

View File

@ -10,6 +10,7 @@
#include "gpio_helper.h" #include "gpio_helper.h"
#include "led.h" #include "led.h"
#include "keyboard.h" #include "keyboard.h"
#include "clock.h"
/* Initialize all needed peripherals, should be called early in your program */ /* Initialize all needed peripherals, should be called early in your program */
void laplace_init(); void laplace_init();

View File

@ -9403,6 +9403,7 @@ typedef struct
#define RCC_PLLCFGR_PLLN_6 (0x040UL << RCC_PLLCFGR_PLLN_Pos) /*!< 0x00001000 */ #define RCC_PLLCFGR_PLLN_6 (0x040UL << RCC_PLLCFGR_PLLN_Pos) /*!< 0x00001000 */
#define RCC_PLLCFGR_PLLN_7 (0x080UL << RCC_PLLCFGR_PLLN_Pos) /*!< 0x00002000 */ #define RCC_PLLCFGR_PLLN_7 (0x080UL << RCC_PLLCFGR_PLLN_Pos) /*!< 0x00002000 */
#define RCC_PLLCFGR_PLLN_8 (0x100UL << RCC_PLLCFGR_PLLN_Pos) /*!< 0x00004000 */ #define RCC_PLLCFGR_PLLN_8 (0x100UL << RCC_PLLCFGR_PLLN_Pos) /*!< 0x00004000 */
#define RCC_PLLCFGR_PLLN_384 (0x180UL << RCC_PLLCFGR_PLLN_Pos) /*!< ? */
#define RCC_PLLCFGR_PLLP_Pos (16U) #define RCC_PLLCFGR_PLLP_Pos (16U)
#define RCC_PLLCFGR_PLLP_Msk (0x3UL << RCC_PLLCFGR_PLLP_Pos) /*!< 0x00030000 */ #define RCC_PLLCFGR_PLLP_Msk (0x3UL << RCC_PLLCFGR_PLLP_Pos) /*!< 0x00030000 */
#define RCC_PLLCFGR_PLLP RCC_PLLCFGR_PLLP_Msk #define RCC_PLLCFGR_PLLP RCC_PLLCFGR_PLLP_Msk

View File

@ -4,7 +4,6 @@
void main_entry(){ void main_entry(){
// init all the peripherals // init all the peripherals
laplace_init(); laplace_init();
ms_wait(2000);
// infinite loop // infinite loop
while (1){ while (1){
@ -27,12 +26,17 @@ void main_entry(){
} }
} }
}*/ }*/
/*
if(get_key('G', 3)){ if(get_key('G', 3)){
set_led_red(true); set_led_red(true);
}else{ }else{
set_led_red(false); set_led_red(false);
} }*/
set_led_red(true);
ms_wait(5000);
set_led_red(false);
ms_wait(5000);
} }
} }