ZYNQ linux驱动PL中断PS
虚拟机:Ubuntu 16.04
Vivado:2017.04
Petalinux:2017.04
开发板:黑金7z020
1.Vivado硬件配置
参考:course_s2_ALINX_ZYNQ(AX7Z020_AX7Z010)开发平台SDK应用教程V1.02.pdf->第七章通过BRAM实现PS与PL数据交互
2.关于中断号说明
对于SPI中断,则对应到Linux 的中断标号,为芯片datasheet的中断号 -16。例如中断号为30,则对应的linux 中断号为30-16=14。
对于非 SPI 中断,则对应的 linux 中断标号,为芯片 datasheet 的中断号-32。例如:IRQ_F2P中断,中断号为 61,则对应的 linux 中断号为61-32=29。
3.设备树配置
3.1.vivado/sdk自动生成设备树
Linux4.9.0版本需要从设备树获取硬件中断的中断号,设备树使用设备树生成器自动生成。
下载设备树工具
Ubuntu环境终端输入命令:
##下载设备树工具
git clone https://github.com/Xilinx/device-tree-xlnx.git
##切换版本
cd device-tree-xlnx
git checkout xilinx-v2018.3
还可以从网址添加链接描述直接获得,注意选择版本应与Vivado版本一致。
3.2 SDK配置,生成设备树
参考添加链接描述
pl.dtsi内容为:
/ {
amba_pl: amba_pl {
#address-cells = <1>;
#size-cells = <1>;
compatible = "simple-bus";
ranges ;
axi_bram_ctrl_0: axi_bram_ctrl@40000000 {
compatible = "xlnx,axi-bram-ctrl-4.0";
reg = <0x40000000 0x1000>;
xlnx,bram-addr-width = <0xa>;
xlnx,bram-inst-mode = "EXTERNAL";
xlnx,ecc = <0x0>;
xlnx,ecc-onoff-reset-value = <0x0>;
xlnx,ecc-type = <0x0>;
xlnx,fault-inject = <0x0>;
xlnx,memory-depth = <0x400>;
xlnx,s-axi-ctrl-addr-width = <0x20>;
xlnx,s-axi-ctrl-data-width = <0x20>;
xlnx,s-axi-id-width = <0x1>;
xlnx,s-axi-supports-narrow-burst = <0x0>;
xlnx,select-xpm = <0x1>;
xlnx,single-port-bram = <0x1>;
};
pl_bram_ctrl_0: pl_bram_ctrl@43c00000 {
compatible = "xlnx,pl-bram-ctrl-1.0";
interrupt-parent = <&intc>;
interrupts = <0 29 4>;
reg = <0x43c00