Brick Groove Machine 0.9.3
Firmware embarqué pour contrôleur/synthé Brick
 
Chargement...
Recherche...
Aucune correspondance
Référence du fichier cart_bus.c

Gestion du bus de communication série entre Brick et les cartouches XVA. Plus de détails...

#include "ch.h"
#include "hal.h"
#include "brick_config.h"
#include "cart_bus.h"
#include "cart_proto.h"

Structures de données

struct  cart_cmd_t
 
struct  cart_port_t
 

Macros

#define CART_QUEUE_LEN   32
 
#define CART_MB_DROP_OLDEST   1
 
#define CART_UART_BAUD   500000u /* XVA1 = 500 kbaud, 8N1 */
 
#define CART_TX_THREAD_PRIO   (NORMALPRIO + 2)
 

Fonctions

void cart_bus_init (void)
 Initialise tous les ports série de cartouche et crée les threads TX.
 
uint16_t cart_bus_get_mailbox_high_water (cart_id_t id)
 Retourne le high-water mark de la mailbox pour un port donné.
 
bool cart_set_param (cart_id_t id, uint16_t param, uint8_t value)
 Envoie une commande SET (écriture de paramètre) vers une cartouche.
 
bool cart_get_param (cart_id_t id, uint16_t param)
 Envoie une commande GET (lecture de paramètre) vers une cartouche.
 

Variables

cart_tx_stats_t cart_stats [CART_COUNT]
 Tableau global des statistiques de chaque port.
 

Description détaillée

Gestion du bus de communication série entre Brick et les cartouches XVA.

Ce module gère la file d’envoi asynchrone (mailbox + pool mémoire) pour chaque cartouche connectée sur un port UART. Il assure :

  • La configuration des UARTs (CART1 à CART4)
  • La mise en file des commandes SET/GET de paramètres
  • L’encapsulation des messages selon le protocole cart_proto_xva1
  • La transmission séquencée par thread dédié (un par cartouche)

Chaque port de cartouche dispose d’une mailbox (chMB) et d’un pool de commandes. Les requêtes sont postées via cart_set_param() ou cart_get_param(), puis envoyées par le thread cart_tx_thread.

UART mapping :

Cart UART Broches STM32
1 USART1 PA9 / PA10
2 UART4 PE8 / PE7
3 USART3 PB10 / PB11
4 USART2 PA2 / PA3

Documentation des macros

◆ CART_MB_DROP_OLDEST

#define CART_MB_DROP_OLDEST   1

◆ CART_QUEUE_LEN

#define CART_QUEUE_LEN   32

◆ CART_TX_THREAD_PRIO

#define CART_TX_THREAD_PRIO   (NORMALPRIO + 2)

◆ CART_UART_BAUD

#define CART_UART_BAUD   500000u /* XVA1 = 500 kbaud, 8N1 */

Documentation des fonctions

◆ cart_bus_get_mailbox_high_water()

uint16_t cart_bus_get_mailbox_high_water ( cart_id_t  id)

Retourne le high-water mark de la mailbox pour un port donné.

◆ cart_bus_init()

void cart_bus_init ( void  )

Initialise tous les ports série de cartouche et crée les threads TX.

◆ cart_get_param()

bool cart_get_param ( cart_id_t  id,
uint16_t  param 
)

Envoie une commande GET (lecture de paramètre) vers une cartouche.

Paramètres
idIdentifiant de la cartouche (CART1..CART4)
paramIdentifiant du paramètre (dest_id)
Renvoie
true si la commande a été postée avec succès, sinon false.

◆ cart_set_param()

bool cart_set_param ( cart_id_t  id,
uint16_t  param,
uint8_t  value 
)

Envoie une commande SET (écriture de paramètre) vers une cartouche.

Paramètres
idIdentifiant de la cartouche (CART1..CART4)
paramIdentifiant du paramètre (dest_id)
valueNouvelle valeur (brute, 8 bits)
Renvoie
true si la commande a été postée avec succès, sinon false.

Documentation des variables

◆ cart_stats

Tableau global des statistiques de chaque port.