<?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: Initializing GPIO and set up I/O Status in Kinetis Microcontrollers</title>
    <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/Initializing-GPIO-and-set-up-I-O-Status/m-p/373855#M19527</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Your code is writing&lt;/P&gt;&lt;P&gt;0x00000000 to GPIOA_PDDR&lt;/P&gt;&lt;P&gt;0x000c0000 to GPIOB_PDDR&lt;/P&gt;&lt;P&gt;0x00000002 to GPIOC_PDDR&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;So Port A is set as &lt;SPAN style="text-decoration: underline;"&gt;all inputs&lt;/SPAN&gt;.&lt;/P&gt;&lt;P&gt;Port B has outputs configured on PTB18 and PTB19&lt;/P&gt;&lt;P&gt;and&lt;/P&gt;&lt;P&gt;Port C an output configured on PTC1&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The pins configured as outputs will be driving '0'&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;To write a '1' to PTC1 (for example) you can write 0x2 to GPIOC_PSOR&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;However it depends on the processor that you are using whether it will work yet because many pins reset to a default peripheral function and not GPIO. Therefore you should also program each pin's multiplex function to GPIO beforehand:&lt;/P&gt;&lt;P&gt;PORTX_PCRn = 0x00000100 (GPIO function)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;In asembler:&lt;/P&gt;&lt;OL class="dp-c" start="1"&gt;&lt;LI&gt; LDR R0,=PORTC_PCR1&amp;nbsp;&amp;nbsp; ;Load address of register to R0&amp;nbsp; &lt;/LI&gt;&lt;LI&gt; LDR R1,=0x00000100&amp;nbsp;&amp;nbsp; ;Load value to R1&amp;nbsp; &lt;/LI&gt;&lt;LI&gt; STR R1,[R0]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;Put value into register&lt;/LI&gt;&lt;/OL&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Mark&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Kinetis: &lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="http://www.utasker.com/kinetis.html" target="_blank"&gt;http://www.utasker.com/kinetis.html&lt;/A&gt;&lt;/P&gt;&lt;P&gt;KL25: &lt;A href="http://www.utasker.com/kinetis/FRDM-KL25Z.html" title="http://www.utasker.com/kinetis/FRDM-KL25Z.html"&gt;µTasker Kinetis FRDM-KL25Z support&lt;/A&gt; / &lt;A href="http://www.utasker.com/kinetis/TWR-KL25Z48M.html" title="http://www.utasker.com/kinetis/TWR-KL25Z48M.html"&gt;µTasker Kinetis TWR-KL25Z48M support&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;EM&gt;For the complete "out-of-the-box" Kinetis experience and faster time to market&lt;/EM&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Fri, 13 Feb 2015 16:35:48 GMT</pubDate>
    <dc:creator>mjbcswitzerland</dc:creator>
    <dc:date>2015-02-13T16:35:48Z</dc:date>
    <item>
      <title>Initializing GPIO and set up I/O Status</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/Initializing-GPIO-and-set-up-I-O-Status/m-p/373854#M19526</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Below is some sample code I gathered from a friends program that I commented and modified.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;So far, I understand why we set up the clocks and how to turn them on. I also understand equating the addresses for the pins being used, weather for a control register or a direction register.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;What I don't get is how to set values for the GPIO. I don't understand the section: &lt;STRONG&gt;Initialize GPIO's and setup I/O status&lt;/STRONG&gt; in the code below.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE __default_attr="plain" __jive_macro_name="code" class="jive_text_macro jive_macro_code _jivemacro_uid_14238140505075875" jivemacro_uid="_14238140505075875" modifiedtitle="true"&gt;
&lt;P&gt;
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;Memory Address information found in the KL25P80M48SF0RM document ||||||||||||||||
;/////////////////////////////////////////////////////////////////////////////////&lt;/P&gt;
&lt;P&gt;SIM_SCGC5&amp;nbsp;&amp;nbsp; EQU&amp;nbsp; 0x40048038&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;SIM_SCGC5 address&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; The control for each ports Clock Gate 
PORTB_PCR18 EQU&amp;nbsp; 0x4004A000 + 4 * 18 ;PORTB_PCR18 address&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LED Pin for RED&lt;/P&gt;
&lt;P&gt;;Our added code to the example code found above in the lab manual
PORTB_PCR19 EQU&amp;nbsp; 0x4004A04C&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;PORTB_PCR19 address&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LED Pin for GREEN
PORTA_PCR13 EQU&amp;nbsp; 0x40049034&amp;nbsp;&amp;nbsp;&amp;nbsp; ;PORTA_PCR13 address&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Pin used for button
PORTD_PCR1&amp;nbsp; EQU&amp;nbsp; 0x4004C004&amp;nbsp;&amp;nbsp; ;PORTD_PCR1 address&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LED Pin for BLUE&lt;/P&gt;
&lt;P&gt;GPIOA_PDDR&amp;nbsp; EQU&amp;nbsp; 0x400FF014&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;GPIOA_PDDR Register Address&amp;nbsp; PDDR is Port Data Direction Register&amp;nbsp; 
GPIOB_PDDR&amp;nbsp; EQU&amp;nbsp; 0x400FF054&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;GPIOA_PDDR Register Address&amp;nbsp; This sets the pin as input or output
GPIOD_PDDR&amp;nbsp; EQU&amp;nbsp; 0x400FF0D4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;GPIOB_PDDR Register Address
GPIOA_PDIR&amp;nbsp; EQU&amp;nbsp; 0x400FF010&amp;nbsp; ;GPIOA_PDIR Register Address&amp;nbsp; This is the Port Data Input Register&lt;/P&gt;
&lt;P&gt; 
 AREA asm_area, CODE, READONLY
 EXPORT&amp;nbsp; asm_main&lt;/P&gt;
&lt;P&gt;asm_main&amp;nbsp; ;assembly entry point for C function, do not delete
; Add program code below here&lt;/P&gt;
&lt;P&gt;;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;Initialize clock pins |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
;/////////////////////////////////////////////////////////////////////////////////&lt;/P&gt;
&lt;P&gt; LDR R0,=SIM_SCGC5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;Load address of SIM_SCGC5 to R0
 LDR R1,[R0]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;Put value of SIM_SCGC5 into R1
 LDR R2,=0x00003E00&amp;nbsp;&amp;nbsp;&amp;nbsp; ;Load value to turn on all port clocks into R2&amp;nbsp; 
 ORRS R1,R2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;OR R2 into R1 for use of masking
 STR R1,[R0]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;Put value back into SIM_SCGC5, 
;This puts 0011111000000000, binary of 3E, into the Sim_SCGC5 register
;Which turns on the port clocks A-E.
 
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ 
;Initialize GPIO's and setup I/O status ||||||||||||||||||||||||||||||||||||||||||
;/////////////////////////////////////////////////////////////////////////////////&lt;/P&gt;
&lt;P&gt; LDR R0,=GPIOA_PDDR&amp;nbsp;&amp;nbsp; ;Load address of GPIOA to R0
 LDR R1,=0x00000000&amp;nbsp;&amp;nbsp; ;Load value to R1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;~~~~~~~~~~~~~~~~~~~~~~~~~~~!!!&amp;nbsp; How do we determine this value?&amp;nbsp; !!!
 STR R1,[R0]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;Put value into GPIOA&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
 
 LDR R0,=GPIOB_PDDR&amp;nbsp;&amp;nbsp; ;Load address of GPIOB to R0
 LDR R1,=0x000C0000&amp;nbsp;&amp;nbsp; ;Load value to R1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ And this value
 STR R1,[R0]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;Put value into GPIOB
 
 LDR R0,=GPIOD_PDDR&amp;nbsp;&amp;nbsp; ;Load address of GPIOD to R0
 LDR R1,=0x00000002&amp;nbsp;&amp;nbsp; ;Load value to R1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ And this value
 STR R1,[R0]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;Put value into GPIOD
 &lt;/P&gt;
&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Any hints/advice?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 13 Feb 2015 08:34:16 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/Initializing-GPIO-and-set-up-I-O-Status/m-p/373854#M19526</guid>
      <dc:creator>jameshayek</dc:creator>
      <dc:date>2015-02-13T08:34:16Z</dc:date>
    </item>
    <item>
      <title>Re: Initializing GPIO and set up I/O Status</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/Initializing-GPIO-and-set-up-I-O-Status/m-p/373855#M19527</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Your code is writing&lt;/P&gt;&lt;P&gt;0x00000000 to GPIOA_PDDR&lt;/P&gt;&lt;P&gt;0x000c0000 to GPIOB_PDDR&lt;/P&gt;&lt;P&gt;0x00000002 to GPIOC_PDDR&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;So Port A is set as &lt;SPAN style="text-decoration: underline;"&gt;all inputs&lt;/SPAN&gt;.&lt;/P&gt;&lt;P&gt;Port B has outputs configured on PTB18 and PTB19&lt;/P&gt;&lt;P&gt;and&lt;/P&gt;&lt;P&gt;Port C an output configured on PTC1&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The pins configured as outputs will be driving '0'&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;To write a '1' to PTC1 (for example) you can write 0x2 to GPIOC_PSOR&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;However it depends on the processor that you are using whether it will work yet because many pins reset to a default peripheral function and not GPIO. Therefore you should also program each pin's multiplex function to GPIO beforehand:&lt;/P&gt;&lt;P&gt;PORTX_PCRn = 0x00000100 (GPIO function)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;In asembler:&lt;/P&gt;&lt;OL class="dp-c" start="1"&gt;&lt;LI&gt; LDR R0,=PORTC_PCR1&amp;nbsp;&amp;nbsp; ;Load address of register to R0&amp;nbsp; &lt;/LI&gt;&lt;LI&gt; LDR R1,=0x00000100&amp;nbsp;&amp;nbsp; ;Load value to R1&amp;nbsp; &lt;/LI&gt;&lt;LI&gt; STR R1,[R0]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;Put value into register&lt;/LI&gt;&lt;/OL&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Mark&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Kinetis: &lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="http://www.utasker.com/kinetis.html" target="_blank"&gt;http://www.utasker.com/kinetis.html&lt;/A&gt;&lt;/P&gt;&lt;P&gt;KL25: &lt;A href="http://www.utasker.com/kinetis/FRDM-KL25Z.html" title="http://www.utasker.com/kinetis/FRDM-KL25Z.html"&gt;µTasker Kinetis FRDM-KL25Z support&lt;/A&gt; / &lt;A href="http://www.utasker.com/kinetis/TWR-KL25Z48M.html" title="http://www.utasker.com/kinetis/TWR-KL25Z48M.html"&gt;µTasker Kinetis TWR-KL25Z48M support&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;EM&gt;For the complete "out-of-the-box" Kinetis experience and faster time to market&lt;/EM&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 13 Feb 2015 16:35:48 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/Initializing-GPIO-and-set-up-I-O-Status/m-p/373855#M19527</guid>
      <dc:creator>mjbcswitzerland</dc:creator>
      <dc:date>2015-02-13T16:35:48Z</dc:date>
    </item>
  </channel>
</rss>

