This commit is contained in:
2024-03-31 21:05:08 +02:00
parent 3a161a1181
commit 60540437fb
20 changed files with 167 additions and 46 deletions
+1
View File
@@ -87,5 +87,6 @@ $(BUILD_DIR)/$(TARGET).bin: $(BUILD_DIR)/$(TARGET).elf
.PHONY: clean
clean:
rm -f $(BUILD_DIR)/*.o
rm -f $(BUILD_DIR)/Laplace/*.o
rm -f $(BUILD_DIR)/$(TARGET).elf
rm -f $(BUILD_DIR)/$(TARGET).bin
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+84
View File
@@ -0,0 +1,84 @@
#include "gpio_helper.h"
uint8_t GPIOA_state = 0;
uint8_t GPIOB_state = 0;
uint8_t GPIOC_state = 0;
uint8_t GPIOD_state = 0;
uint8_t GPIOE_state = 0;
void set_output_pin(uint8_t gpio_x, uint8_t pin, bool state){
switch (gpio_x)
{
case GPIO_A:
if(state){
GPIOA_state |= (1 << pin);
}else{
GPIOA_state &= ~(1 << pin);
}
GPIOA->ODR = GPIOA_state;
break;
case GPIO_B:
if(state){
GPIOB_state |= (1 << pin);
}else{
GPIOB_state &= ~(1 << pin);
}
GPIOB->ODR = GPIOB_state;
break;
case GPIO_C:
if(state){
GPIOC_state |= (1 << pin);
}else{
GPIOC_state &= ~(1 << pin);
}
GPIOC->ODR = GPIOC_state;
break;
case GPIO_D:
if(state){
GPIOD_state |= (1 << pin);
}else{
GPIOD_state &= ~(1 << pin);
}
GPIOD->ODR = GPIOD_state;
break;
case GPIO_E:
if(state){
GPIOE_state |= (1 << pin);
}else{
GPIOE_state &= ~(1 << pin);
}
GPIOE->ODR = GPIOE_state;
break;
default:
break;
}
}
void enable_gpio_x_rcc(uint8_t gpio_x){
switch (gpio_x)
{
case GPIO_A:
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN ;
break;
case GPIO_B:
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOBEN ;
break;
case GPIO_C:
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOCEN ;
break;
case GPIO_D:
RCC->AHB1ENR |= RCC_AHB1ENR_GPIODEN ;
break;
case GPIO_E:
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOEEN ;
break;
default:
break;
}
}
+22
View File
@@ -0,0 +1,22 @@
/** @file gpio_helper.h
*
* @brief Control all the GPIO
*
*/
#ifndef GPIO_HELPER_H
#define GPIO_HELPER_H
#include "stdbool.h"
#include "../device/stm32f730xx.h"
#define GPIO_A 0
#define GPIO_B 1
#define GPIO_C 2
#define GPIO_D 3
#define GPIO_E 4
void set_output_pin(uint8_t gpio_x, uint8_t pin, bool state);
void enable_gpio_x_rcc(uint8_t gpio_x);
#endif
+7
View File
@@ -0,0 +1,7 @@
#include "laplace.h"
void laplace_init(){
// Enable the GPIO peripheral in RCC.
enable_gpio_x_rcc(GPIO_B);
led_init();
}
+15
View File
@@ -0,0 +1,15 @@
/** @file laplace.h
*
* @brief Global function of Laplace
*
*/
#ifndef LAPLACE_H
#define LAPLACE_H
#include "gpio_helper.h"
#include "led.h"
void laplace_init();
#endif
@@ -1,7 +1,7 @@
#include "led.h"
// Variable to store the current state of LEDs
uint8_t led_state = 0;
// GPIOB for all the leds
uint8_t gpio_b = GPIO_B;
void led_init(){
// It should be set to push-pull low-speed output.
@@ -23,37 +23,19 @@ void led_init(){
}
void set_led_red(bool state){
if(state){
led_state |= (1 << RED_LED_PIN);
}else{
led_state &= ~(1 << RED_LED_PIN);
}
GPIOB->ODR = led_state;
set_output_pin(gpio_b, RED_LED_PIN, state);
}
void set_led_green(bool state){
if(state){
led_state |= (1 << GREEN_LED_PIN);
}else{
led_state &= ~(1 << GREEN_LED_PIN);
}
GPIOB->ODR = led_state;
set_output_pin(gpio_b, GREEN_LED_PIN, state);
}
void set_led_blue(bool state){
if(state){
led_state |= (1 << BLUE_LED_PIN);
}else{
led_state &= ~(1 << BLUE_LED_PIN);
}
GPIOB->ODR = led_state;
set_output_pin(gpio_b, BLUE_LED_PIN, state);
}
void set_led_all(bool state){
if(state){
led_state = (1 << RED_LED_PIN) | (1 << GREEN_LED_PIN) | (1 << BLUE_LED_PIN);
}else{
led_state = 0;
}
GPIOB->ODR = led_state;
set_output_pin(gpio_b, RED_LED_PIN, state);
set_output_pin(gpio_b, GREEN_LED_PIN, state);
set_output_pin(gpio_b, BLUE_LED_PIN, state);
}
+1
View File
@@ -13,6 +13,7 @@
#include <stdbool.h>
#include "../device/stm32f730xx.h"
#include "gpio_helper.h"
void led_init();
void set_led_red(bool state);
+1 -1
View File
@@ -1,5 +1,5 @@
#include <assert.h>
#include <cstdint>
#include <stdint.h>
#include <stddef.h>
#define byte4 0xFF, 0xFF, 0xFF, 0xFF
+8
View File
@@ -0,0 +1,8 @@
#include "main.h"
// this is our main function, I separated it from the c++ code because I don't like this language
main_entry(){
// init all the peripherals
laplace_init();
set_led_all(true);
}
+15
View File
@@ -0,0 +1,15 @@
/** @file led.h
*
* @brief Control the led
*
*/
#ifndef MAIN_H
#define MAIN_H
#include "Laplace/laplace.h"
#include "Laplace/led.h"
void main_entry();
#endif
+4 -18
View File
@@ -2,7 +2,9 @@
#include <stddef.h>
#include <stdint.h>
#include "device/stm32f730xx.h"
#include "Laplace/led.h"
extern "C" {
#include "main.h"
}
//#define LED_PIN (4) // PB0
@@ -58,22 +60,6 @@ void __attribute__((noinline)) start() {
size_t bssSectionLength = (&_bss_section_end_ram - &_bss_section_start_ram);
memset_custom(&_bss_section_start_ram, 0, bssSectionLength);
// Enable the GPIO peripheral in RCC.
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOBEN ;
led_init();
set_led_green(true);
set_led_red(true);
/*
// B0 is connected to the LED.
// It should be set to push-pull low-speed output.
GPIOB->MODER &= ~(0x3 << (LED_PIN*2));
GPIOB->MODER |= (0x1 << (LED_PIN*2));
GPIOB->OTYPER &= ~(1 << LED_PIN);
main_entry();
GPIOB->ODR = (1 << LED_PIN);
*/
while (0)
{
// code
}
}