Outils pour utilisateurs

Outils du site


wiki:linux_pour_zynq_de_xilinx:acces_dels_via_led_keys

Ceci est une ancienne révision du document !


Accéder aux entrées/sorties depuis l'espace utilisateur via les pilotes du noyau LED et KEY

Une alternative à l'accès aux GPIO est d'utiliser les pilotes du noyau pré-construits gpio-keys, gpio-keys-polled et leds-gpio. Il est alors possible de les utiliser pour générer des ensembles prédéfinis et utiliser les interruptions1).

Création du fichier de description des périphériques .dts

Après avoir exporté votre conception dans Vivado, et avoir ouvert SDK concernant ce projet, il faut créer une structure BSP ( Device Tree Board Support Package)2).

  • Cliquer sur le nom du projet dans le project explorer. Exemple : allume_LED
  • Menu: File > New > Board Support Package > Board Support Package OS: device-tree > Finish
  • une fenêtre Board Support Package Settings apparait. > OK

Entre autres, les fichiers .dts/.dtsi apparaissent désormais dans le project explorer sous la partie device_tree_bsp_0 et ils sont situés dans le répertoire du projet.sdk/device_tree_bsp_0/ .

Informations du Device Tree

Dans le fichier system.dts on peut y voir :

/include/ "zynq-7000.dtsi"
/include/ "pl.dtsi"
...
&gpio0 {
	emio-gpio-width = <64>;
	gpio-mask-high = <0x0>;
	gpio-mask-low = <0x5600>;
};
...

En éditant le fichier inclus zynq-7000.dtsi on peut y voir des descriptions de périphériques. Entre autres :

/ {
	compatible = "xlnx,zynq-7000";
...
	amba: amba {
		compatible = "simple-bus";
		#address-cells = <1>;
		#size-cells = <1>;
		interrupt-parent = <&intc>;
		ranges;
...
		gpio0: gpio@e000a000 {
			compatible = "xlnx,zynq-gpio-1.0";
			#gpio-cells = <2>;
			#interrupt-cells = <2>;
			clocks = <&clkc 42>;
			gpio-controller;
			interrupt-controller;
			interrupt-parent = <&intc>;
			interrupts = <0 20 4>;
			reg = <0xe000a000 0x1000>;
		};
...
	};
};

Puis en éditant le fichier inclus pl.dtsi on peut y voir :

/ {
	amba_pl: amba_pl {
		#address-cells = <1>;
		#size-cells = <1>;
		compatible = "simple-bus";
		ranges ;
		axi_gpio_0: gpio@41200000 {
			#gpio-cells = <2>;
			compatible = "xlnx,xps-gpio-1.00.a";
			gpio-controller ;
			reg = <0x41200000 0x10000>;
			xlnx,all-inputs = <0x0>;
			xlnx,all-inputs-2 = <0x1>;
			xlnx,all-outputs = <0x1>;
			xlnx,all-outputs-2 = <0x0>;
			xlnx,dout-default = <0x00000000>;
			xlnx,dout-default-2 = <0x00000000>;
			xlnx,gpio-width = <0x8>;
			xlnx,gpio2-width = <0x8>;
			xlnx,interrupt-present = <0x0>;
			xlnx,is-dual = <0x1>;
			xlnx,tri-default = <0xFFFFFFFF>;
			xlnx,tri-default-2 = <0xFFFFFFFF>;
		};
	};
};
1)
cette page est inspirée des étapes décrites dans à la page Linux GPIO Driver
2)
Possible après avoir installé le plugin dts. Voir cette page
wiki/linux_pour_zynq_de_xilinx/acces_dels_via_led_keys.1449239488.txt.gz · Dernière modification : 2015/12/04 15:31 de emeyer