ST-LAB/Core/MyInc/pansi.h
2026-01-08 14:52:33 +01:00

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);