<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: IMX8M GPIO direction in i.MX Processors</title>
    <link>https://community.nxp.com/t5/i-MX-Processors/IMX8M-GPIO-direction/m-p/1087000#M159326</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;我知道这个的。我们根本的目的是想开发gpio的底层库，需要通过操控寄存器来实现相应的功能。类似于树莓派的WiringPi库。我想知道为什么我通过代码没有实现我想得到的结果。&lt;/P&gt;&lt;P&gt;谢谢！&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Mon, 13 Jul 2020 02:01:21 GMT</pubDate>
    <dc:creator>gaobo</dc:creator>
    <dc:date>2020-07-13T02:01:21Z</dc:date>
    <item>
      <title>IMX8M GPIO direction</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/IMX8M-GPIO-direction/m-p/1086998#M159324</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;BSP：4.14.78&lt;/P&gt;&lt;P&gt;Board：IMX8mq-evk&lt;/P&gt;&lt;P&gt;我通过软件无法改变gpio109的方向。首先我在设备树里把SAI1_TXD1复用成了GPIO4_IO13，然后通过软件操作gpio的方向寄存器和数据寄存器。当通过sys把gpio设置成输出方向，可以改变gpio的高低电平。当通过软件时就无法改变gpio的方向。&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;设备树的配置如下：&lt;/P&gt;&lt;P&gt;添加了MX8MQ_IOMUXC_SAI1_TXD1_GPIO4_IO13，注释了MX8MQ_IOMUXC_SAI1_TXD1_SAI1_TX_DATA1&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper" image-alt="pastedImage_1.png"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/115514i6A6BF08A2845AA6B/image-size/large?v=v2&amp;amp;px=999" role="button" title="pastedImage_1.png" alt="pastedImage_1.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper" image-alt="pastedImage_2.png"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/115515iD4D4E5B28F9786FD/image-size/large?v=v2&amp;amp;px=999" role="button" title="pastedImage_2.png" alt="pastedImage_2.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;程序运行结果，刚开始未设置gpio寄存器，test为软件的名称&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;root@imx8mqevk:/home/iqi# cat /sys/class/gpio/gpio109/value&lt;BR /&gt;0&lt;BR /&gt;root@imx8mqevk:/home/iqi# cat /sys/class/gpio/gpio109/direction&lt;BR /&gt;in&lt;BR /&gt;root@imx8mqevk:/home/iqi# ./test&lt;BR /&gt;input start&lt;BR /&gt;output stop&lt;BR /&gt;root@imx8mqevk:/home/iqi# cat /sys/class/gpio/gpio109/direction&lt;BR /&gt;in&lt;BR /&gt;root@imx8mqevk:/home/iqi# cat /sys/class/gpio/gpio109/value&lt;BR /&gt;0&lt;BR /&gt;root@imx8mqevk:/home/iqi# echo output &amp;gt; /sys/class/gpio/gpio109/direction&lt;BR /&gt;bash: echo: write error: Invalid argument&lt;BR /&gt;root@imx8mqevk:/home/iqi# echo out &amp;gt; /sys/class/gpio/gpio109/direction&lt;BR /&gt;root@imx8mqevk:/home/iqi# ./test&lt;BR /&gt;input start&lt;BR /&gt;output stop&lt;BR /&gt;root@imx8mqevk:/home/iqi# cat /sys/class/gpio/gpio109/value&lt;BR /&gt;1&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;代码工程如下：&lt;/P&gt;&lt;P&gt;1 #include &amp;lt;stdio.h&amp;gt;&lt;BR /&gt; 2 #include &amp;lt;stdarg.h&amp;gt;&lt;BR /&gt; 3 #include &amp;lt;stdint.h&amp;gt;&lt;BR /&gt; 4 #include &amp;lt;stdlib.h&amp;gt;&lt;BR /&gt; 5 #include &amp;lt;ctype.h&amp;gt;&lt;BR /&gt; 6 #include &amp;lt;poll.h&amp;gt;&lt;BR /&gt; 7 #include &amp;lt;unistd.h&amp;gt;&lt;BR /&gt; 8 #include &amp;lt;errno.h&amp;gt;&lt;BR /&gt; 9 #include &amp;lt;string.h&amp;gt;&lt;BR /&gt; 10 #include &amp;lt;time.h&amp;gt;&lt;BR /&gt; 11 #include &amp;lt;fcntl.h&amp;gt;&lt;BR /&gt; 12 #include &amp;lt;pthread.h&amp;gt;&lt;BR /&gt; 13 #include &amp;lt;sys/time.h&amp;gt;&lt;BR /&gt; 14 #include &amp;lt;sys/mman.h&amp;gt;&lt;BR /&gt; 15 #include &amp;lt;sys/stat.h&amp;gt;&lt;BR /&gt; 16 #include &amp;lt;sys/wait.h&amp;gt;&lt;BR /&gt; 17 #include &amp;lt;sys/ioctl.h&amp;gt;&lt;BR /&gt; 18 #include &amp;lt;asm/ioctl.h&amp;gt;&lt;BR /&gt; 19&lt;BR /&gt; 20&lt;BR /&gt; 21 #define BLOCK_SIZE (4*1024)&lt;/P&gt;&lt;P&gt;22 static volatile unsigned int GPIO4_DR ;&lt;BR /&gt; 23 static volatile unsigned int GPIO4_GDIR ;&lt;BR /&gt; 24 static volatile unsigned int *gpio4_dr ;&lt;BR /&gt; 25 static volatile unsigned int *gpio4_gdir ;&lt;BR /&gt; 26 #define INPUT 0&lt;BR /&gt; 27 #define OUTPUT 1&lt;BR /&gt; 28 #define LOW 0&lt;BR /&gt; 29 #define HIGH 1&lt;BR /&gt; 30 /*&lt;BR /&gt; 31 * digitalWrite:&lt;BR /&gt; 32 * Set an output bit&lt;BR /&gt; 33 *********************************************************************************&lt;BR /&gt; 34 */&lt;BR /&gt; 35&lt;BR /&gt; 36 void digitalWrite (int pin, int value)&lt;BR /&gt; 37 {&lt;BR /&gt; 38&lt;BR /&gt; 39 if (value == 0 )&lt;BR /&gt; 40 *(gpio4_dr) = (*(gpio4_dr) &amp;amp; (0 &amp;lt;&amp;lt; 13)) ;&lt;BR /&gt; 41 else&lt;BR /&gt; 42 *(gpio4_dr) = (*(gpio4_dr) | (1 &amp;lt;&amp;lt; 13 ));&lt;BR /&gt; 43 }&lt;BR /&gt; 44&lt;BR /&gt; 45&lt;BR /&gt; 46&lt;BR /&gt; 47 void pinMode (int pin, int mode)&lt;BR /&gt; 48 {&lt;BR /&gt; 49 printf("input start \n");&lt;BR /&gt; 50 if (mode == INPUT)&lt;BR /&gt; 51 *(gpio4_dr + 4) = (*(gpio4_dr + 4) &amp;amp; (0 &amp;lt;&amp;lt; 13)) ; // Sets bits to zero = input}&lt;BR /&gt; 52 else&lt;BR /&gt; 53 *(gpio4_dr + 4) = (*(gpio4_dr + 4) | (1 &amp;lt;&amp;lt; 13)) ;&lt;BR /&gt; 54 printf("output stop \n");&lt;BR /&gt; 55&lt;BR /&gt; 56 }&lt;BR /&gt; 57&lt;BR /&gt; 58 int wiringPiSetup (void)&lt;BR /&gt; 59 {&lt;BR /&gt; 60 int fd ;&lt;BR /&gt; 61&lt;BR /&gt; 62 GPIO4_DR = 0x30230000 ;&lt;BR /&gt; 63 GPIO4_GDIR = 0x30230004 ;&lt;BR /&gt; 64&lt;BR /&gt; 65 if ((fd = open ("/dev/mem", O_RDWR | O_SYNC | O_CLOEXEC)) &amp;lt; 0)&lt;BR /&gt; 66 {&lt;BR /&gt; 67 printf("Unable to open /dev/mem: %s\n", strerror(errno));&lt;BR /&gt; 68 }&lt;BR /&gt; 69&lt;BR /&gt; 70 gpio4_dr = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, GPIO4_DR) ;&lt;BR /&gt; 71&lt;BR /&gt; 72 return 0 ;&lt;BR /&gt; 73 }&lt;BR /&gt; 74 int main (void)&lt;BR /&gt; 75 {&lt;BR /&gt; 76 if(wiringPiSetup() &amp;lt; 0)return 1;&lt;BR /&gt; 77 pinMode (0,OUTPUT) ;&lt;BR /&gt; 78 digitalWrite(0, HIGH ) ;&lt;BR /&gt; 79 return 0 ;&lt;BR /&gt; 80 }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;请帮忙查看一下是设备树配置出现问题，还是代码出现问题（附件为工程代码）。&lt;/P&gt;&lt;P&gt;谢谢！&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 10 Jul 2020 09:53:28 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/IMX8M-GPIO-direction/m-p/1086998#M159324</guid>
      <dc:creator>gaobo</dc:creator>
      <dc:date>2020-07-10T09:53:28Z</dc:date>
    </item>
    <item>
      <title>Re: IMX8M GPIO direction</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/IMX8M-GPIO-direction/m-p/1086999#M159325</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;In the sysfs, each GPIO has its own directory entry which can be found under /sys/class/gpio/gpioN. Here N is GPIO number. &lt;/SPAN&gt;&lt;BR /&gt;In GPIO directory can be found its attributes. Here are most important: &lt;BR /&gt; &lt;BR /&gt;direction (in/out) &lt;BR /&gt;value (0 - low / 1 - high) &lt;BR /&gt;edge &amp;nbsp;(none/rising/falling)&lt;BR /&gt; &lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 12 Jul 2020 07:48:25 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/IMX8M-GPIO-direction/m-p/1086999#M159325</guid>
      <dc:creator>b36401</dc:creator>
      <dc:date>2020-07-12T07:48:25Z</dc:date>
    </item>
    <item>
      <title>Re: IMX8M GPIO direction</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/IMX8M-GPIO-direction/m-p/1087000#M159326</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;我知道这个的。我们根本的目的是想开发gpio的底层库，需要通过操控寄存器来实现相应的功能。类似于树莓派的WiringPi库。我想知道为什么我通过代码没有实现我想得到的结果。&lt;/P&gt;&lt;P&gt;谢谢！&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 13 Jul 2020 02:01:21 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/IMX8M-GPIO-direction/m-p/1087000#M159326</guid>
      <dc:creator>gaobo</dc:creator>
      <dc:date>2020-07-13T02:01:21Z</dc:date>
    </item>
  </channel>
</rss>

