工具/软件:Linux
您好!
我正在使用内核位于 am3352上的嵌入式 Linux 系统。 以前、我只在一些没有内核的简单嵌入式系统上工作、在这里我直接控制硬件。 与内核相关的所有内容对我来说都是全新的。 现在、我卡在器件树上。 希望有人能帮助我。
我有一个 FPGA 通过 GPMC 连接到 am3352。 两个引脚被设计为 GPIO_OUTPUT 以触发 FPGA 配置和复位、两个引脚被设计为 GPIO_INPUT 以发送 READ 和中断请求信号。 FPGA 配置存储在 SPI 闪存中。 将 GPIO_1拉低时、FPGA 将引导至 SPI 闪存。
我借用了 AM335x-evmsk.dts 中的内容、添加了以下部分:
am33xx_pinmux{(am33xx_pinmux)}
pinctrl-names ="default";
pinctrl-0 =<&GPIO_keys_s0 &clkout2_pin &DDR3_VTT_TOGGLE>;
GPMC_PINS:GPMC_PINS{
pinctrl-single、pins =<
0xb8 (PIN_INPUT | MUX_MODE7)/* LCD_data6.GPIO2_12 *
0xc4 (PIN_OUTPUT | MUX_MODE7)/* LCD_data9.GPIO2_15 */
0xdc (PIN_OUTPUT | MUX_MODE7)/* LCD_data15.GPIO0_11 */
0x1b0 (PIN_INPUT | MUX_MODE7)/* GPIO0_19、中断请求$
>;
};
};
在 am33xx.dtsi 中、我编辑了如下 GPMC 节点:
OCP{
兼容="简单总线";
#address-cells =<1>;
大小单元格=<1>;
范围;
ti、hwmods ="l3_main";
GPMC:GPMC@50000000{
兼容="ti、am3352-gpmC";
ti、hwmds ="gpmC";
TI、无空闲启动;
REG =<0x50000000 0x2000>;
GPMC、num-cs =<7>;
GPMC、num-waitpins =<0>;
#address-cells =<2>;
大小单元格=<1>;
pinctrl-names ="default";
pinctrl-0 =<&GPMC_PINs>;
范围=<0 0x80000 0x1000000>、/*CS0 @addr 转换为0x80000、s$
1 0 0x9000000 0x1000000>;/*CS0是主域,CS1是次域 FPGA$
FPGA_CS0@0、0{
状态="正常";
#address-cells =<1>;
大小单元格=<1>;
reg =<0 0x1000000>;
组宽度=<2>;
GPMC、同步读取;
GPMC、同步写入;
GPMC、突发读取;
GPMC、突发写入;
GPMC、mux-add-data =<2>;/*地址和数据复用*/
GPMC、cs-on-ns =<0>;
GPMC、cs-rd-off-ns =<80>;/*4个 FCLK 时钟周期*/
GPMC、cs-wr-off-ns =<80>;/*4个 FCLK 时钟周期*/
GPMC、Adv-on-ns =<0>;
GPMC、Adv-rd -关闭-ns =<20>;/*1个 FCLK 时钟周期*/
GPMC、Adv-wr-off-ns =<20>;/*1个 FCLK 时钟周期*/
GPMC、OE-ON-ns =<20>;/*1个 FCLK 时钟周期*/
GPMC、OE-OFF-ns =<80>;/*4个 FCLK 时钟周期*/
GPMC、WE-ON-ns =<40>;/*2个 FCLK 时钟周期*/
GPMC、WE-OFF-ns =<60>;/*3个 FCLK 时钟周期*/
GPMC、rd 周期-ns =<80>;/*4个 FCLK 时钟周期*/
GPMC、功率周期-ns =<80>;/*4个 FCLK 时钟周期*/
GPMC、ACCESS ns =<60>;/*3个 FCLK 时钟周期*/
GPMC、page-burst 访问-ns =<20>;/*1个 FCLK 时钟周期*/
GPMC、总线翻转-ns =<0>;/*0 FCLK 时钟周期*/
GPMC、cycle2cycle-delay-ns =<20>;/*1个 FCLK 时钟周期*/
GPMC、wr-data-mux-bus-ns =<20>;/*1个 FCLK 时钟周期*/
GPMC、wr 访问-ns =<60>;/*3个 FCLK 时钟周期*/
GPMC、cycle2cycle-samecsen =<20>;/*1个 FCLK 时钟周期*/
GPMC、cycle2cycle-diffcsen =<20>;/*1个 FCLK 时钟周期*/
};
};
};
那么、我的困惑是:
上述修改是否足以将这些引脚配置为 GPIO 以便我的外部 FPGA 使用它们? 在 DTS 或其他内核文件中还有其他要编辑的内容吗?
2.如何在用户空间中上拉/下拉输出引脚以操作 FPGA 并从 FPGA 读取输入引脚?
3.如果 引脚被设计为输出、脉冲低电平触发 FPGA 复位、我是否应将 pinctrl-single、引脚设置为 PIN_OUTPUT 或 PIN_OUTPUT 下拉?
我们非常感谢您的任何建议。