Прерывание дерева устройств Yocto на определенном выводе - PullRequest
0 голосов
/ 26 марта 2020

Я работаю над собственным файлом .dts для моего мыса beaglebone. Я успешно создал bsp-слой и пользовательское изображение, все работает нормально. Теперь я хочу внести изменения в дерево устройств, чтобы назначить определенные выводы своим ролям. Я использовал инструмент, предоставленный ti (pinmux). Я изо всех сил пытаюсь назначить прерывание нескольким определенным булавкам GPIO. Допустим, у меня есть это внутри моего .dtsi:

gpio0_pins_default: gpio0_pins_default {
    pinctrl-single,pins = <
        AM33XX_IOPAD(0x820, PIN_INPUT | MUX_MODE7) /* (U10) gpmc_ad8.gpio0[22] */
        AM33XX_IOPAD(0x824, PIN_INPUT_PULLUP | MUX_MODE7) /* (T10) gpmc_ad9.gpio0[23] */
        AM33XX_IOPAD(0x828, PIN_INPUT | MUX_MODE7) /* (T11) gpmc_ad10.gpio0[26] */
        AM33XX_IOPAD(0x82c, PIN_INPUT | MUX_MODE7) /* (U12) gpmc_ad11.gpio0[27] */
    >;
};

Теперь я хочу назначить прерывание на вывод 27 gpio0, который является активным минимумом. Как мне поступить? Я прочитал слишком много источников, предоставляющих различную информацию, и запутался, поэтому я прошу некоторого совета.

В документации по контроллеру прерываний я нашел это, но я кое-что не понимаю.

           gpioext: gpio-adnp@41 {
                    compatible = "ad,gpio-adnp";
                    reg = <0x41>;

                    interrupt-parent = <&gpio>;
                    interrupts = <160 1>;

                    gpio-controller;
                    #gpio-cells = <1>;

                    interrupt-controller;
                    #interrupt-cells = <2>;

                    nr-gpios = <64>;s

Откуда исходит значение reg 41? До сих пор я думал, что это должен быть адрес определенного GPIO (например, reg = <0x4804c00 0x1000>;). Я понимаю, прерывание-клетки и прерывания объявления. Nr-gp ios = номер пина, которому я хочу назначить прерывание?

Внутри am33xx.file я нашел это объявление:

gpio0: gpio@44e07000 {
            compatible = "ti,omap4-gpio";
            ti,hwmods = "gpio1";
            gpio-controller;
            #gpio-cells = <2>;
            interrupt-controller;
            #interrupt-cells = <2>;
            reg = <0x44e07000 0x1000>;
            interrupts = <96>;
        };

Но, насколько я понимаю, это всего лишь настройка для всего GPIO, верно?

Может ли кто-нибудь быть таким царем и предоставить мне пример кода для установки прерывания, скажем, для активных контактов 27 и 23 низкого уровня?

Заранее спасибо BR

...