Etapes 3/4/6 : GPIO de commande, PWM et ADC valides sur cible
Campagne de bring-up materiel complete, carte de conversion DECONNECTEE.
pwm.c/h (etape 6) -- valide au scope
ePWM1 -> etage 1, EPWM1A/GPIO0/broche 29, 200 kHz (TBPRD=299)
ePWM2 -> etage 2, EPWM2A/GPIO2/broche 37, 100 kHz (TBPRD=599)
Mode up-count, TBCLK = SYSCLKOUT = 60 MHz, duty 0 au demarrage,
inhibition par forcage continu AQCSFRC. Tranche le point ouvert §9.1.
HRPWM non implemente, notes de portage consignees dans pwm.c.
adc.c/h (etape 4) -- 9 voies validees, T1/T2 comprises
Reference interne (ADCREFSEL=0), SOC declenches par ePWM1 SOCA avec
SOCAPRD=3 (~66 kHz), jamais en free-run. ISR ADCINT1 courte : rangement
des valeurs brutes uniquement, aucun flottant.
Note materielle : les 9 voies lisaient 4095 tant que VDDA (broche 11)
n'etait pas alimentee -- y compris VREFLO converti en interne, ce qui a
permis d'ecarter le logiciel.
bsp_gpio (etape 3)
HV_EN (GPIO32), Stage1/2-EN (GPIO16/17) en sortie, etat sur a 0, et
pull-ups internes de GPIO16/17 desactivees : sinon elles presentent un 1
sur une entree de chaque porte ET avant que le firmware ne tourne.
bsp_gpio_stage_default_override_init() : pilotage manuel de GPIO1/GPIO3
pour valider les portes ET, exclusif avec safety_init().
safety_arm_emustop_only() -- BRING-UP
Arme TZ6 seul, sans les comparateurs, pour valider EMUSTOP isolement
quand les entrees shunt ne sont pas cablees.
Resultats materiels :
- portes ET IC8/IC9 : sortie = ET logique des deux entrees, verifie au
scope avec des cadences distinctes (default 400 ms, EN 1 s)
- comparateur : entree shunt 0 -> 3 V declenche bien le trip
- EMUSTOP : arret du debugger -> broches 29 et 37 a 0, TZFLG.OST latche,
et le flag ne se rearme pas apres continue
- un trip EMUSTOP ne peut PAS etre efface tant que le CPU est halte (la
source reste assertee) : l'effacement devra passer par une commande
UART en fonctionnement (etape 7)
main.c contient encore le bloc de bring-up (PWM force a 50 %, telemetrie
transportant les tensions ADC brutes en volts) : A RETIRER, et remplacer
safety_arm_emustop_only() par safety_init(), avant toute mise sous tension
de la puissance (PROMPT §8).
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
105
src/bsp_gpio.c
105
src/bsp_gpio.c
@ -26,6 +26,111 @@ void bsp_gpio_analog_init(void)
|
||||
EDIS;
|
||||
}
|
||||
|
||||
void bsp_gpio_control_init(void)
|
||||
{
|
||||
EALLOW;
|
||||
// Stage1-EN = GPIO16 (broche 27), Stage2-EN = GPIO17 (broche 26).
|
||||
// GPIO16/17 ne sont pas des broches PWM : leurs pull-ups sont actives au
|
||||
// reset, ce qui presente un 1 sur une entree de chaque porte ET avant que
|
||||
// le firmware ne tourne. On les coupe des l'init (PROMPT §6 etape 3).
|
||||
GpioCtrlRegs.GPAPUD.bit.GPIO16 = 1;
|
||||
GpioCtrlRegs.GPAPUD.bit.GPIO17 = 1;
|
||||
GpioCtrlRegs.GPAMUX2.bit.GPIO16 = 0;
|
||||
GpioCtrlRegs.GPAMUX2.bit.GPIO17 = 0;
|
||||
GpioCtrlRegs.GPADIR.bit.GPIO16 = 1;
|
||||
GpioCtrlRegs.GPADIR.bit.GPIO17 = 1;
|
||||
|
||||
// HV_EN = GPIO32 (broche 31)
|
||||
GpioCtrlRegs.GPBMUX1.bit.GPIO32 = 0;
|
||||
GpioCtrlRegs.GPBDIR.bit.GPIO32 = 1;
|
||||
EDIS;
|
||||
|
||||
// Etat sur avant toute autre configuration.
|
||||
stage_enable_set(STAGE_1, false);
|
||||
stage_enable_set(STAGE_2, false);
|
||||
hv_enable_set(false);
|
||||
}
|
||||
|
||||
void stage_enable_set(stage_id_t stage, bool enabled)
|
||||
{
|
||||
if (stage == STAGE_1)
|
||||
{
|
||||
if (enabled)
|
||||
{
|
||||
GpioDataRegs.GPASET.bit.GPIO16 = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
GpioDataRegs.GPACLEAR.bit.GPIO16 = 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (enabled)
|
||||
{
|
||||
GpioDataRegs.GPASET.bit.GPIO17 = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
GpioDataRegs.GPACLEAR.bit.GPIO17 = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void hv_enable_set(bool enabled)
|
||||
{
|
||||
if (enabled)
|
||||
{
|
||||
GpioDataRegs.GPBSET.bit.GPIO32 = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
GpioDataRegs.GPBCLEAR.bit.GPIO32 = 1;
|
||||
}
|
||||
}
|
||||
|
||||
void bsp_gpio_stage_default_override_init(void)
|
||||
{
|
||||
EALLOW;
|
||||
// GPIO1 = COMP1OUT (broche 28), GPIO3 = COMP2OUT (broche 38).
|
||||
// Mux 0 = GPIO : on reprend la main sur des broches normalement pilotees
|
||||
// par les comparateurs. Bring-up uniquement, voir bsp_gpio.h.
|
||||
GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 0;
|
||||
GpioCtrlRegs.GPAMUX1.bit.GPIO3 = 0;
|
||||
GpioCtrlRegs.GPADIR.bit.GPIO1 = 1;
|
||||
GpioCtrlRegs.GPADIR.bit.GPIO3 = 1;
|
||||
EDIS;
|
||||
|
||||
stage_default_set(STAGE_1, false);
|
||||
stage_default_set(STAGE_2, false);
|
||||
}
|
||||
|
||||
void stage_default_set(stage_id_t stage, bool level)
|
||||
{
|
||||
if (stage == STAGE_1)
|
||||
{
|
||||
if (level)
|
||||
{
|
||||
GpioDataRegs.GPASET.bit.GPIO1 = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
GpioDataRegs.GPACLEAR.bit.GPIO1 = 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (level)
|
||||
{
|
||||
GpioDataRegs.GPASET.bit.GPIO3 = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
GpioDataRegs.GPACLEAR.bit.GPIO3 = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void led_set(led_id_t led, bool on)
|
||||
{
|
||||
#if LED_ACTIVE_LOW
|
||||
|
||||
Reference in New Issue
Block a user