COMPLEMENTS SUR EVENT:Il ne faut pas confondre les notions suivantes:
EVOUTx comme EVOUTA EVOUTC qui sont des sorties physiques c'est à dire des PORTS liés à des broches et event_a ou event_b qui sont des éléments de type logiciel assurant une liaison entre éléments.
Pour les plus curieux je vous recommande d'essayer de visualiser ce que permet de faire l'outil ATMEL START pour combiner visuellement les éléments.
https://start.atmel.com/Tous les CPU n'y sont pas présents (les derniers AVR DD n'y sont pas) mais vous y trouverez facilement les CPU usuels ( ATMAGE4809 par exemple) ou de cet exemple ATTINY1626
A titre d exemple voici le code que va generer l outils pour iniitaliser le bloc logic ( ici avec d autre valur que celle de notre exemple)
#include <ccl.h>
/**
* \brief Initialize CCL peripheral
* \return Return value 0 if success
*/
int8_t DIGITAL_GLUE_LOGIC_0_init()
{
// CCL.SEQCTRL0 = CCL_SEQSEL_DISABLE_gc; /* Sequential logic disabled */
// CCL.SEQCTRL1 = CCL_SEQSEL_DISABLE_gc; /* Sequential logic disabled */
CCL.TRUTH0 = 4; /* Truth 0: 4 */
// CCL.LUT0CTRLC = CCL_INSEL2_MASK_gc; /* Masked input */
CCL.LUT0CTRLB = CCL_INSEL0_AC0_gc /* AC0 OUT input source */
| CCL_INSEL1_IN1_gc; /* IO pin LUTn-IN1 input source */
CCL.LUT0CTRLA = CCL_CLKSRC_CLKPER_gc /* Peripheral Clock */
| CCL_EDGEDET_DIS_gc /* Edge detector is disabled */
| CCL_FILTSEL_DISABLE_gc /* Filter disabled */
| 1 << CCL_ENABLE_bp /* LUT Enable: enabled */
| 1 << CCL_OUTEN_bp; /* Output Enable: enabled */
CCL.TRUTH1 = 1; /* Truth 1: 1 */
CCL.LUT1CTRLC = CCL_INSEL2_EVENTB_gc; /* Event input source B */
CCL.LUT1CTRLB = CCL_INSEL0_AC0_gc /* AC0 OUT input source */
| CCL_INSEL1_EVENTA_gc; /* Event input source A */
CCL.LUT1CTRLA = CCL_CLKSRC_CLKPER_gc /* Peripheral Clock */
| CCL_FILTSEL_DISABLE_gc /* Filter disabled */
| 1 << CCL_ENABLE_bp /* LUT Enable: enabled */
| 1 << CCL_OUTEN_bp; /* Output Enable: enabled */
CCL.TRUTH2 = 4; /* Truth 2: 4 */
CCL.LUT2CTRLC = CCL_INSEL2_IN2_gc; /* IO pin LUTn-IN2 input source */
CCL.LUT2CTRLB = CCL_INSEL0_AC0_gc /* AC0 OUT input source */
| CCL_INSEL1_IN1_gc; /* IO pin LUTn-IN1 input source */
CCL.LUT2CTRLA = CCL_CLKSRC_CLKPER_gc /* Peripheral Clock */
| CCL_EDGEDET_DIS_gc /* Edge detector is disabled */
| CCL_FILTSEL_DISABLE_gc /* Filter disabled */
| 1 << CCL_ENABLE_bp /* LUT Enable: enabled */
| 0 << CCL_OUTEN_bp; /* Output Enable: disabled */
CCL.TRUTH3 = 4; /* Truth 3: 4 */
CCL.LUT3CTRLC = CCL_INSEL2_EVENTB_gc; /* Event input source B */
CCL.LUT3CTRLB = CCL_INSEL0_AC0_gc /* AC0 OUT input source */
| CCL_INSEL1_EVENTA_gc; /* Event input source A */
CCL.LUT3CTRLA = CCL_CLKSRC_CLKPER_gc /* Peripheral Clock */
| CCL_EDGEDET_DIS_gc /* Edge detector is disabled */
| CCL_FILTSEL_DISABLE_gc /* Filter disabled */
| 1 << CCL_ENABLE_bp /* LUT Enable: enabled */
| 0 << CCL_OUTEN_bp; /* Output Enable: disabled */
CCL.CTRLA = 1 << CCL_ENABLE_bp /* Enable: enabled */
| 0 << CCL_RUNSTDBY_bp; /* Run in Standby: disabled */
// CCL.INTCTRL0 = CCL_INTMODE0_BOTH_gc /* Sense both edges */
// | CCL_INTMODE1_BOTH_gc /* Sense both edges */
// | CCL_INTMODE2_BOTH_gc /* Sense both edges */
// | CCL_INTMODE3_BOTH_gc; /* Sense both edges */
return 0;
}
A défaut d être familier avec ce langage plus "brut" l'apport de la librairie LOGIC prend ici tout son sens.
Rappelons une fois encore que toutes les combinaisons ne sont pas possibles et il faudra être attentif aux contraintes et restrictions imposées.
Il peut y avoir plusieurs façons de faire, parfois l'une apparaitra "meilleure" ou plus adaptée. Chacun étant libre de ses choix.
Ltr