<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://devzone.nordicsemi.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>8-bit External Bus</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/118891/8-bit-external-bus</link><description>The NORDIC tutorials are great for demonstrating how to use GPIOs to drive LEDs and read buttons. 
 However, I need an 8-bit bus to exchange bytes with an external display IC. 
 I did a search of the documentation, but failed to find any information on</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Mon, 25 Aug 2025 19:43:52 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/118891/8-bit-external-bus" /><item><title>RE: 8-bit External Bus</title><link>https://devzone.nordicsemi.com/thread/546667?ContentTypeID=1</link><pubDate>Mon, 25 Aug 2025 19:43:52 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:6b17c301-08ca-4b5b-abbc-e44c3297dd73</guid><dc:creator>Jim Logsdon</dc:creator><description>&lt;p&gt;Please close this ticket.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: 8-bit External Bus</title><link>https://devzone.nordicsemi.com/thread/523515?ContentTypeID=1</link><pubDate>Tue, 18 Feb 2025 13:35:56 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:f9e20483-895d-4bc2-8171-76e4386027e8</guid><dc:creator>Jim Logsdon</dc:creator><description>&lt;p&gt;I gave up on Zephyr and began directly writing and reading gpio peripheral registers.&amp;nbsp; &amp;nbsp;&lt;/p&gt;
&lt;p&gt;Controlling the NORDIC pins via the peripheral registers is so easy, I don&amp;#39;t see any reason to use the Zephyr API.&amp;nbsp; Here&amp;#39;s my simple solution:&lt;/p&gt;
&lt;p&gt;Specify the GPIO control register addresses:&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;#define&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;PORT_OUT&lt;/span&gt;&lt;span&gt; &amp;nbsp; &amp;nbsp;(&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;(volatile &lt;/span&gt;&lt;span&gt;uint32_t&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;) &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;0x50000504&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;#define&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;PORT_OUTSET&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;(volatile &lt;/span&gt;&lt;span&gt;uint32_t&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;) &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;0x50000508&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;#define&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;PORT_OUTCLR&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;(volatile &lt;/span&gt;&lt;span&gt;uint32_t&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;) &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;0x5000050C&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;#define&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;PORT_IN&lt;/span&gt;&lt;span&gt; &amp;nbsp; &amp;nbsp; (&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;(volatile &lt;/span&gt;&lt;span&gt;uint32_t&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;) &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;0x50000510&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;#define&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;PORT_DIR&lt;/span&gt;&lt;span&gt; &amp;nbsp; &amp;nbsp;(&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;(volatile &lt;/span&gt;&lt;span&gt;uint32_t&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;) &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;0x50000514&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;#define&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;PORT_DIRSET&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;(volatile &lt;/span&gt;&lt;span&gt;uint32_t&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;) &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;0x50000518&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;#define&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;PORT_DIRCLR&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;(volatile &lt;/span&gt;&lt;span&gt;uint32_t&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;) &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;0x5000051C&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Then control them by direct writes and read them by direct reads:&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span&gt;PORT_DIRSET&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &amp;nbsp;&lt;/span&gt;&lt;span&gt;0x180000&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;x&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span&gt;PORT_OUTSET&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &amp;nbsp;&lt;/span&gt;&lt;span&gt;0x180000&lt;/span&gt;&lt;span&gt;; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; } &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span&gt;PORT_OUTCLR&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &amp;nbsp;&lt;/span&gt;&lt;span&gt;0x180000&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; int gpio_pin_values = PORT_IN;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;Easy and understandable.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: 8-bit External Bus</title><link>https://devzone.nordicsemi.com/thread/522724?ContentTypeID=1</link><pubDate>Wed, 12 Feb 2025 17:43:24 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:9c75cf99-f349-4b32-95f1-250f7b6ed28a</guid><dc:creator>khelmutlord</dc:creator><description>&lt;p&gt;Hello Jim,&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;To do this in the &amp;quot;proper&amp;quot; Zephyr way, you would need to create a custom devicetree binding. Chris Gammell at Golioth has the following blog post that may be helpful to you:&lt;/p&gt;
&lt;p&gt;&lt;a id="" href="https://blog.golioth.io/zephyr-for-hardware-engineers-gpio/"&gt;https://blog.golioth.io/zephyr-for-hardware-engineers-gpio/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;There are also some examples of bit-banging different interfaces in Zephyr:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/zephyrproject-rtos/zephyr/blob/7cef0e361467136064a066de718af12e00a9e7d9/drivers/mipi_dbi/mipi_dbi_bitbang.c#L56"&gt;https://github.com/zephyrproject-rtos/zephyr/blob/7cef0e361467136064a066de718af12e00a9e7d9/drivers/mipi_dbi/mipi_dbi_bitbang.c#L56&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;That being said, if you are using MIPI-DBI (as it sounds like you may be?) it is possible to use the existing MIPI-DBI bitbang driver above.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/zephyrproject-rtos/zephyr/blob/7cef0e361467136064a066de718af12e00a9e7d9/dts/bindings/mipi-dbi/zephyr%2Cmipi-dbi-bitbang.yaml#L9"&gt;github.com/.../zephyr,mipi-dbi-bitbang.yaml&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Thanks,&lt;/p&gt;
&lt;p&gt;Helmut Lord&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>