This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

GPIO3[15] output and GPIO3[16] Input on DM385

Other Parts Discussed in Thread: DM385

你好,

我想在DM385配置兩個新的GPIO腳位控制.一個是 GPIO3[15]當在output輸出,GPIO3[16]當作irq的接受輸入,請問我該怎麼在kernel裡作配置呢??,謝謝!!

Regards,

  • 你好;

            配置 gpio 工作模式,可以参考数据手册中的,3.2 Pin Assignments 小节

            可以到 ipnc_psp_arago/u-boot/board/ti/dm385_ipnc/mux.h 中进行配置

  • 你好,

    我調整過這個檔案,但還是不成功,是否能指引如何調整呢?謝謝!!

  • 如果不成功,有几种可能,uboot 配置后,在内核里面被修改了,或者是在 应用程序里面被重新配置过;

  • 以GPIO3[15]及GPIO3[16],是否在檔mux.h裡改寫如下呢??

    /* -220 */ BIT(0), BIT(0), BIT(0), BIT(0),
    /* -224 */ BIT(0), BIT(0), BIT(7), BIT(7),
    /* -228 */ BIT(0), BIT(0), BIT(0), BIT(6),

  • 你的这个配置是正确的;

  • 在 程序 中也会修改 pin mux ;

    你查一下 hdvpss 中的 ti_tools/hdvpss_01_00_01_37/packages/ti/psp/platforms/ti8107/src/vps_platformTI8107.c

    #ifdef CONFIG_PIN_MUX
    static Int32 Vps_platformTI8107SetPinMux(void)
    {
        /* Vout 0 configuration DVO2 Function 1*/
        /* TODO There are two pins for the fid. Need to see whichone is used */
        REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0AB8) = 0x1;   /* vout0_fid_mux1 */
        REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0ABC) = 0x1;   /* vout0_clk */
    ...
    ...
        REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0B0C) = 0x1;   /* vout0_r_cr[2] */
        REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0B10) = 0x1;   /* vout0_r_cr[3] */
        REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0B14) = 0x1;   /* vout0_r_cr[4] */
        REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0B18) = 0x1;   /* vout0_r_cr[5] */
        REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0B1C) = 0x1;   /* vout0_r_cr[6] */
        REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0B20) = 0x1;   /* vout0_r_cr[7] */
        REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0B24) = 0x1;   /* vout0_r_cr[8] */
        REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0B28) = 0x1;   /* vout0_r_cr[9] */

     

    REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0B18) = 0x1; /* vout0_r_cr[5] */
    REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0B1C) = 0x1; /* vout0_r_cr[6] */

  • 应当是下面2行配置的:

    REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0B78) = 0x50004; /* vin1a_d[16] */
    REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0B7C) = 0x50004; /* vin1a_d[17] */

  • 1. 請問,我對照過這幾行在檔案下都存在,我是不是不需要再作修改呢??

    2.我是依照底下的建議去增加一些GPIO的function去使用.不知道是否還要再處理哪些地方呢?

    https://www.deyisupport.com/question_answer/dsp_arm/davinci_digital_media_processors/f/39/t/91562.aspx?pi239031348=1

  • uboot 里面按你上面的配置修改就可以;

    内核中不需要再去配置了;

    在hdvpss中屏蔽下面两行;

    REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0B78) = 0x50004; /* vin1a_d[16] */
    REG32(CSL_TI8107_CTRL_MODULE_BASE + 0x0B7C) = 0x50004; /* vin1a_d[17] */

  • 請問如果要將GPIO設定為output,需要哪些function?一樣會產生/sys/class/gpioXX 目錄嗎?

    http://processors.wiki.ti.com/index.php/TI81XX_PSP_GPIO_Driver_User_Guide

    IRQ handling及kernel Level兩區塊都要設定嗎 ?

  • 你现在的 io 模式切换为 GPIO 模式了吗?

  • io 输入输出,值配置,你可以参考 

    http://processors.wiki.ti.com/index.php/TI81XX_PSP_GPIO_Driver_User_Guide 就可以了

  • 你也可以参考下面的寄存器,直接写 gpio 的驱动程序;

     

  • 你好,

    在mux.h修改後,我在board-dm385ipnc.c裡定義了這兩個腳位的輸入和輸出

    gpio_request(111, "GPIO_output");
    gpio_direction_output(111, 0x0);
    gpio_export(111, 1);

    gpio_request(112, "GPIO_input");
    gpio_direction_input(112);
    gpio_export(112, 1);

    順利在/sys/class/gpio/裡可以看到兩個目錄檔案

    輸入的部分我應該還欠缺這些的控制吧 ????

    irq_num = gpio_to_irq(112)
    request_irq(irq_num, handler, 0, "gpio_test", NULL)
    set_irq_type(irq_num, IRQ_TYPE_EDGE_RISING)
    free_irq(irq_num, NULL);
    gpio_free(112)
  • 你好,

    對於GPIO控制部分, IRQ 輸入部分系統已經可以辨認到了,所以輸入沒有問題.

    但輸出部份一直有問題,無法有效輸出,不知道是否哪裡遺漏了, 請幫忙確認,謝謝!!

    GPIO2[30]為輸出腳,以下是我的設定

    /* -204 */ BIT(0), BIT(0), BIT(0), BIT(2),
    /* -208 */ BIT(2), BIT(7), BIT(2), BIT(2),

    在board-dm385ipnc.c裡

    gpioindex=gpio_is_valid(94);
    gpioindex=gpio_request(94, "gpio_output");
    gpioindex=gpio_direction_output(94, 1);
    gpio_set_value(94, 1);
    msleep(5000);
    gpio_set_value(94, 0);
    msleep(5000);

  • 上面的配置是没有问题的,无法有效输出是什么意思?是无法控制输出 高低电平吗?