Navigation
Internships & Projects
Raspberry Pi
Code Embarqué et Temps Réel
SE et Pilotes
[Protected]
Comme vous pourrez le constater en lisant la doc, le PWM de l'AM355x est beaucoup plus riche que celui de l'AT91SAM7S. Néanmoins, nous n'utiliserons que certaines de ces fonctionnalités. Egalement, il possède 4 modules PWM avec chacune 2 sorties, A et B.
Les fichiers virtuels PWM se trouvent dans /sys/class/pwm
. Il y a un répertoire par module i et par sortie j PWM nommé ehrpwm.
i:
j.
Il faut d'abord activer la broche du GPIO en sortie (voir la configuration de note carte) puis activer le PWM en envoyant dans 1 dans le fichier request
.
echo 1 > request
On peut ensuite régler la période en ns :
echo PERIOD_NS > period_ns
Puis la charge utile toujours en ns:
echo DUTY_NS > duty_ns
Enfin, il faut le démarrer:
echo 1 > run
TBCTL
– configuration générale du PWM (dont la configuration de la fréquence),TBPRD
– configuration de la période,CMPCTL
– configuration du mode de chargement des registres A et B de comparaison pour la génération du signal,CMPA
– registre A,CMPB
– registre B,AQCTLA
– configuration des actions sur le signal de sortie A,AQCTLB
– configuration des actions sur le signal de sortie A,AQSFRC
– à voirAQCSFRC
– à voir
Le temps de comptage est appelé SYSCLKOUT
dans la documentation et correspond à CORE_CLKOUTM4
/ 2 (partie PWM).
Dans la partie “Voltage, Clock and Init”, le module dédié à la gestion de l'énergie (voltage, horloge, etc), on peut trouver que CORE_CLKOUTM4
= CLKDCOLDO
/ HSDIVIDER-M4.
HSDIVIDER-M4 semble se trouver dans le registre CM_DIV_M4_DPLL_CORE
.
La documentation fournit la configuration dans 2 modes :
Mode | CLKDCOLDO | HSDIVIDER-M4 | CORE_CLKOUTM4 |
---|---|---|---|
OPP100 | 2000 MHz | 10 | 200 MHz |
OPP50 | 200 MHz | 1 | 100 MHz |
NB 100 MHz est la fréquence maximale du PWM.
OPP
x représente le niveau de consommation choisie. A priori, on est donc en OPP100 et, par conséquent, SYSCLKOUT = 100 MHz.
La fréquence de comptage du PWM est configurée dans le registre TBCTL
par 2 sous-champs (p. 2085-86) : CLKDIV
et HSPCLDIV
. Bien que la documentation prétende que l'horloge de comptage TBCLK
est égale à SYSCLKOUT
/ (HSPCLKDIV
- CLKDIV
), ce qui est assez bizarre étant donné que CLKDIV
est puissance de 2 et HSPCLKDIV
seulement un multiple de 2 (on se retrouve avec un diviseur négatif), la vraie formule semble être (après expérimentation ) :
TBCLK
= SYSCLKOUT
/ HSPCLKDIV
/ CLKDIV
Pour expérimenter, il faudrait valider avec un oscilloscope.
CLOCKS_PER_SEC
?