<?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: K64F UART Status Register TDRE bit in Kinetis Microcontrollers</title>
    <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/K64F-UART-Status-Register-TDRE-bit/m-p/498834#M31076</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi yibin wang&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;What IDE are you using? To clear the TDRE flag you have to read Status register (S1) and then write to the UART data (UART1_D). There is not need to write a logic 0 in the status register TDRE, and actually, it's a "read only" register, so the instruction UART1_S1 &amp;amp;= ~(0x80);&amp;nbsp; should mark a error. try to take out that instruction and if you the issue persist please let me know.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;attache an example of UART0 for K64F polling mode.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Note: in case you want to specific clear the TDRE, you can do it &lt;STRONG&gt;after&lt;/STRONG&gt; you check for empty space (after the while) with (void)UART0_S1;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Hope it helps&lt;/P&gt;&lt;P&gt;Jorge Alcala&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 05 May 2016 21:41:13 GMT</pubDate>
    <dc:creator>jorge_a_vazquez</dc:creator>
    <dc:date>2016-05-05T21:41:13Z</dc:date>
    <item>
      <title>K64F UART Status Register TDRE bit</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/K64F-UART-Status-Register-TDRE-bit/m-p/498833#M31075</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Dear all,&lt;/P&gt;&lt;P&gt;I have issue on the K64F UART data sending. Now, I use the request mode to code my data sending without interrupt so I also need to check the S1 TDRE bit to understand if the current data is sent out when in the next new data sending.&lt;/P&gt;&lt;P&gt;Please see my UART sending code.&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;void SendSer0Char(unsigned char Char)&lt;/TD&gt;&lt;TD&gt;{&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;/* Wait for transmitter to empty, load char into TDRE */&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;//&lt;/TD&gt;&lt;TD&gt;while(!(SSR0 &amp;amp; TDREbit))&lt;/TD&gt;&lt;TD&gt;;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;//&lt;/TD&gt;&lt;TD&gt;TDR0 = Char;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;//&lt;/TD&gt;&lt;TD&gt;SSR0 &amp;amp;= ~TDREbit;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;UART1_S1 &amp;amp;= ~(0x80);&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;while((UART1_S1 &amp;amp; 0x80) != 0x80); // TDRE&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;UART1_D = Char;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;But, there is the issue on the UART1_S1 TDRE checking. I got the two differences value on TDRE bit when I used same code working on a batch boards.&lt;/P&gt;&lt;P&gt;On the some boards, the TDRE can be reset automatically before the next new data sending. But the another boards, the TDRE always keeps Zero status after the first data sent so the code stay in the loop without any sending for the following datas . I don't what reason was on the UART sending code.&lt;/P&gt;&lt;P&gt;I also attached the UART initialization code in here. Please have a look.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void UART1_Init(void) {&lt;/P&gt;&lt;P&gt;&amp;nbsp; UART1_C2 &amp;amp;= ~UART1_C2_MASK_1;&amp;nbsp; // #define UART1_C2_MASK_1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0CU&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; UART1_BDH = UART1_BDH_VALUE;&amp;nbsp; // #define UART1_BDH_VALUE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x00U&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; UART1_BDL = UART1_BDL_VALUE;&amp;nbsp;&amp;nbsp; // #define UART1_BDL_VALUE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x36U&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; UART1_C4 = UART1_C4_VALUE;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // #define UART1_C4_VALUE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x08U&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; UART1_MA1 = UART1_MA1_VALUE; // #define UART1_MA1_VALUE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x00U&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp; UART1_MA2 = UART1_MA2_VALUE; // #define UART1_MA2_VALUE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x00U&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; UART1_C1 = UART1_C1_VALUE;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // #define UART1_C1_VALUE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x00U&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; UART1_S2 = UART1_S2_VALUE;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // #define UART1_S2_VALUE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0xC0U&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp; UART1_MODEM = UART1_MODEM_VALUE;&amp;nbsp; // #define UART1_MODEM_VALUE&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x00U&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; UART1_IR = UART1_IR_VALUE;&amp;nbsp; // #define UART1_IR_VALUE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x00U&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; UART1_TWFIFO = UART1_TWFIFO_VALUE; // #define UART1_TWFIFO_VALUE&amp;nbsp;&amp;nbsp; 0x00U&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; UART1_RWFIFO = UART1_RWFIFO_VALUE; // #define UART1_RWFIFO_VALUE&amp;nbsp;&amp;nbsp; 0x01U&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; UART1_SFIFO = UART1_SFIFO_VALUE; // #define UART1_SFIFO_VALUE&amp;nbsp;&amp;nbsp;&amp;nbsp; 0xC7U&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; UART1_CFIFO = UART1_CFIFO_VALUE; // #define UART1_CFIFO_VALUE&amp;nbsp;&amp;nbsp;&amp;nbsp; 0xC0U&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; UART1_PFIFO &amp;amp;= ~UART1_PFIFO_MASK; // #define UART1_PFIFO_MASK&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x88U&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; /* Clear flags */&lt;/P&gt;&lt;P&gt;&amp;nbsp; #ifdef UART1_CLEAR_FLAGS&lt;/P&gt;&lt;P&gt;&amp;nbsp; (void)UART1_S1;&lt;/P&gt;&lt;P&gt;&amp;nbsp; (void)UART1_D;&lt;/P&gt;&lt;P&gt;&amp;nbsp; #endif&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; UART1_C5 = UART1_C5_VALUE;&amp;nbsp; // #define UART1_C5_VALUE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x00U&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; UART1_C3 = UART1_C3_VALUE; // #define UART1_C3_VALUE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0FU&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; UART1_C2 = UART1_C2_VALUE_2; // #define UART1_C2_VALUE_2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x2CU&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 04 May 2016 05:00:49 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/K64F-UART-Status-Register-TDRE-bit/m-p/498833#M31075</guid>
      <dc:creator>yibinwang</dc:creator>
      <dc:date>2016-05-04T05:00:49Z</dc:date>
    </item>
    <item>
      <title>Re: K64F UART Status Register TDRE bit</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/K64F-UART-Status-Register-TDRE-bit/m-p/498834#M31076</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi yibin wang&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;What IDE are you using? To clear the TDRE flag you have to read Status register (S1) and then write to the UART data (UART1_D). There is not need to write a logic 0 in the status register TDRE, and actually, it's a "read only" register, so the instruction UART1_S1 &amp;amp;= ~(0x80);&amp;nbsp; should mark a error. try to take out that instruction and if you the issue persist please let me know.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;attache an example of UART0 for K64F polling mode.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Note: in case you want to specific clear the TDRE, you can do it &lt;STRONG&gt;after&lt;/STRONG&gt; you check for empty space (after the while) with (void)UART0_S1;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Hope it helps&lt;/P&gt;&lt;P&gt;Jorge Alcala&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 05 May 2016 21:41:13 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/K64F-UART-Status-Register-TDRE-bit/m-p/498834#M31076</guid>
      <dc:creator>jorge_a_vazquez</dc:creator>
      <dc:date>2016-05-05T21:41:13Z</dc:date>
    </item>
  </channel>
</rss>

