107 lines
3.2 KiB
C
107 lines
3.2 KiB
C
#pragma once
|
|
|
|
#include "main.h"
|
|
#include "stm32h743xx.h"
|
|
#include "stm32h7xx.h"
|
|
#include <stdint.h>
|
|
|
|
/* Includes ------------------------------------------------------------------*/
|
|
|
|
/**
|
|
Protezione dal cambiamento e dall'uso non raccomandato.
|
|
Membri interni della struttura. Rende il membro solo lettura e genera un
|
|
warning se usato da codice esterno.
|
|
*/
|
|
#define __rdon const
|
|
#define __rdwr
|
|
#define __prv8 \
|
|
__attribute__(( \
|
|
deprecated("Questo campo è PRIVATO. Non usarlo. Usa i metodi adatti " \
|
|
"alla manipolazione o controlla la tua implementazione"))) const
|
|
#define __in_un_altro_file extern;
|
|
|
|
/**
|
|
Protezione dal linking esterno.
|
|
Funzioni e variabili globali in un file .c. Limita la funzione/variabile al
|
|
solo file in cui è definita (visibilità "privata" al file).
|
|
*/
|
|
#define READONLY const
|
|
#define PUBLIC
|
|
#define PRIVATE static
|
|
|
|
/// Variabile esterna condivisa con una Interrupt Service Routine.
|
|
#define EXT_ISR_VAR extern volatile
|
|
/// Dichiarazione della variabile nel file di definizione (es. .c).
|
|
#define ISR_VAR volatile
|
|
/// Variabile globale condivisa ma non usata negli interrupt
|
|
#define EXT_GLOBAL extern
|
|
|
|
/// MY DEBUG 1 = debug | 0 = no my debug
|
|
#define MY_DEBUG 1
|
|
#define NO_HAL_IT 0 // 0 disable 1 enable
|
|
|
|
/*
|
|
======= bit functions =========
|
|
Macro presenti anche in:
|
|
Drivers/CMSIS/Device/ST/STM32H7xx/Include/stm32h7xx.h
|
|
*/
|
|
/**
|
|
* @brief Imposta a 1 un bit specifico in un byte (SET).
|
|
* * Esegue un'operazione OR bit a bit. I bit che erano a 1 rimangono a 1,
|
|
* il bit all'indice n viene forzato a 1.
|
|
* * @param byte Puntatore al byte da modificare.
|
|
* @param n L'indice del bit da impostare (0-7).
|
|
*/
|
|
static inline void set_bit(uint8_t *byte, uint8_t n) {
|
|
*byte = *byte | (1u << n);
|
|
}
|
|
|
|
/**
|
|
* @brief Imposta a 0 un bit specifico in un byte (CLEAR).
|
|
* * Esegue un AND con una maschera inversa. Il bit all'indice n
|
|
* viene forzato a 0, gli altri rimangono invariati.
|
|
* * @param byte Puntatore al byte da modificare.
|
|
* @param n L'indice del bit da pulire (0-7).
|
|
*/
|
|
static inline void clear_bit(uint8_t *byte, uint8_t n) {
|
|
*byte = *byte & ~(1u << n);
|
|
}
|
|
|
|
/**
|
|
* @brief Inverte lo stato di un bit specifico (TOGGLE).
|
|
* * Se il bit è 0 diventa 1, se è 1 diventa 0. Usa l'operatore XOR.
|
|
* * @param byte Puntatore al byte da modificare.
|
|
* @param n L'indice del bit da invertire (0-7).
|
|
*/
|
|
static inline void toggle_bit(uint8_t *byte, uint8_t n) {
|
|
*byte = *byte ^ (1u << n);
|
|
}
|
|
|
|
/**
|
|
* @brief Legge lo stato di un bit specifico.
|
|
* * @param byte Puntatore al byte (costante, sola lettura).
|
|
* @param n L'indice del bit da leggere (0-7).
|
|
* @return uint8_t Ritorna diverso da 0 se il bit è 1, oppure 0 se il bit è 0.
|
|
* Nota: non ritorna necessariamente "1", ma il valore del bit nella sua posizione (es. 4, 8, 16).
|
|
*/
|
|
static inline uint8_t read_bit(const uint8_t *byte, uint8_t n) {
|
|
return (*byte & (1u << n));
|
|
}
|
|
|
|
|
|
|
|
// ====== USART ================
|
|
|
|
// ====== END USART ============
|
|
|
|
// ====== TIM6 =================
|
|
|
|
// ====== END TIM6 =============
|
|
|
|
/**
|
|
* @brief Funzione di Accensione onBoard
|
|
*
|
|
* Permette di far accendere e spegnere contemporaneamente tutti i leg
|
|
* presenti sulla board.
|
|
*/
|
|
void MOTD_init(void);
|