<?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: LPC11E68 Serial port 3 RX interrupt. in LPC Microcontrollers</title>
    <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC11E68-Serial-port-3-RX-interrupt/m-p/550036#M13941</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;New findings: When i use external serial data then first character never gets interrupt, only starting from second character.&lt;BR /&gt; For loopback situation it never gets interrupt.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Tue, 02 Aug 2016 18:52:22 GMT</pubDate>
    <dc:creator>sirurx</dc:creator>
    <dc:date>2016-08-02T18:52:22Z</dc:date>
    <item>
      <title>LPC11E68 Serial port 3 RX interrupt.</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC11E68-Serial-port-3-RX-interrupt/m-p/550029#M13934</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;I'm using LPC11E68 Serial port 3. I am failing to get interrupt on RX. I can see that LPC_USART3.RXDATA fills with data but INTSTAT stays 0, and&amp;nbsp; USART2_3_IRQn is never called.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;What i'm starting with is:&lt;/P&gt;&lt;P&gt;Chip_Clock_EnablePeriphClock(SYSCTL_CLOCK_IOCON);&lt;/P&gt;&lt;P&gt;Chip_GPIO_Init(LPC_GPIO);&lt;/P&gt;&lt;P&gt;Chip_Clock_SetUSARTNBaseClockRate((115200 * 48), true);&lt;/P&gt;&lt;P&gt;Chip_IOCON_PinMuxSet(LPC_IOCON, 2, 3, (IOCON_FUNC1 | IOCON_MODE_INACT | IOCON_DIGMODE_EN));&lt;/P&gt;&lt;P&gt;Chip_IOCON_PinMuxSet(LPC_IOCON, 2, 4, (IOCON_FUNC1 | IOCON_MODE_INACT | IOCON_DIGMODE_EN));&lt;/P&gt;&lt;P&gt;Chip_UARTN_Init(LPC_USART3);&lt;/P&gt;&lt;P&gt;Chip_UARTN_ConfigData(LPC_USART3, UARTN_CFG_DATALEN_8 | UARTN_CFG_PARITY_NONE | UARTN_CFG_STOPLEN_1);&lt;/P&gt;&lt;P&gt;Chip_UARTN_SetBaud(LPC_USART3, 115200);&lt;/P&gt;&lt;P&gt;Chip_UARTN_Enable(LPC_USART3);&lt;/P&gt;&lt;P&gt;Chip_UARTN_TXEnable(LPC_USART3);&lt;/P&gt;&lt;P&gt;Chip_UARTN_IntEnable(LPC_USART3, UARTN_INTEN_RXRDY);&lt;/P&gt;&lt;P&gt;Chip_UARTN_IntDisable(LPC_USART3, UARTN_INTEN_TXRDY);&lt;/P&gt;&lt;P&gt;NVIC_EnableIRQ(USART2_3_IRQn);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;After that i'm having in LPC_USART3:&lt;/P&gt;&lt;P&gt;CFG=b101 (5) - does not change any time later. USART ENABE=1; 8N1; async.&lt;/P&gt;&lt;P&gt;CTRL=0 - does not change. normal operation, no autobaud.&lt;/P&gt;&lt;P&gt;STAT= b11110 on startup: RX is idle and no incoming, can send, tx idle,CTS=1.&lt;/P&gt;&lt;P&gt;INTENSET=1: RXRDYEN=1 - shall generate interrupt when RXDAT has data.&lt;/P&gt;&lt;P&gt;INTENCLR=0: - used for clearuig INTENSET bits, so hall be 0.&lt;/P&gt;&lt;P&gt;BRG=(2): The FRG clock is divided by 3 before use by the USART function.&lt;/P&gt;&lt;P&gt;INTSTAT=0: - this shall show when interrupt occurs?&lt;/P&gt;&lt;P&gt;OSR=b1111 (15): 16 peripheral clocks are used to transmit and receive each data bit.&lt;/P&gt;&lt;P&gt;ADDR=0, this is not used, as ADDRDET=0;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Checked that SYSAHBCLKCTRL bit 22 is set.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Then i'm sending data to modem and can see RXDATA and RXDATASTAT changes after modem answers.&lt;/P&gt;&lt;P&gt;Data seems to be correct there.&lt;/P&gt;&lt;P&gt;So this is seemingly not i/o level or pin configuration issue.&lt;/P&gt;&lt;P&gt;What i'm missing?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;BR,&lt;/P&gt;&lt;P&gt;Ergo&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 28 Jul 2016 14:08:30 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPC11E68-Serial-port-3-RX-interrupt/m-p/550029#M13934</guid>
      <dc:creator>sirurx</dc:creator>
      <dc:date>2016-07-28T14:08:30Z</dc:date>
    </item>
    <item>
      <title>Re: LPC11E68 Serial port 3 RX interrupt.</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC11E68-Serial-port-3-RX-interrupt/m-p/550030#M13935</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I also want to add, that NVIC.ISER = 1000000001000000000000 - ISE_USART2_3, ISE_USART0 are set.&lt;/P&gt;&lt;P&gt;I am using also USART0 and it's RX interrupt works fine. USART0 is used for keyboard interaction only.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 28 Jul 2016 15:19:51 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPC11E68-Serial-port-3-RX-interrupt/m-p/550030#M13935</guid>
      <dc:creator>sirurx</dc:creator>
      <dc:date>2016-07-28T15:19:51Z</dc:date>
    </item>
    <item>
      <title>Re: LPC11E68 Serial port 3 RX interrupt.</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC11E68-Serial-port-3-RX-interrupt/m-p/550031#M13936</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;UPDATE.&lt;/P&gt;&lt;P&gt;Seems like receiving byte and getting interrupt are separate HW channels on chip.&lt;/P&gt;&lt;P&gt;This means that on i/o pin byte can be received but interrupt still not triggered.&lt;/P&gt;&lt;P&gt;First i thought that RXDATA register change triggers interrupt but it is in more lower level. So NVIC monitors also physical signal not USART registers.&lt;/P&gt;&lt;P&gt;I replaced modem with other serial device and now i'm getting interrupts too. I am investigating further what is the difference between modem and other serial device.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 29 Jul 2016 11:09:04 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPC11E68-Serial-port-3-RX-interrupt/m-p/550031#M13936</guid>
      <dc:creator>sirurx</dc:creator>
      <dc:date>2016-07-29T11:09:04Z</dc:date>
    </item>
    <item>
      <title>Re: LPC11E68 Serial port 3 RX interrupt.</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC11E68-Serial-port-3-RX-interrupt/m-p/550032#M13937</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;UPDATE&lt;/P&gt;&lt;P&gt;I found that MCU sends at 9600 baud rate byte with length of 932us and external device 936us. The difference is 0.4%.&lt;/P&gt;&lt;P&gt;Looped back MCU to itself (connected RX and TX pins) - no interrupt!&lt;/P&gt;&lt;P&gt;So what it means that MCU can't recognize it's own data. Tested with 9600 and 115200 baud rates. And yes i checked with scope, the data is actually looped back.&lt;/P&gt;&lt;P&gt;I am getting amazed :smileyshocked:.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 29 Jul 2016 12:52:20 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPC11E68-Serial-port-3-RX-interrupt/m-p/550032#M13937</guid>
      <dc:creator>sirurx</dc:creator>
      <dc:date>2016-07-29T12:52:20Z</dc:date>
    </item>
    <item>
      <title>Re: LPC11E68 Serial port 3 RX interrupt.</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC11E68-Serial-port-3-RX-interrupt/m-p/550033#M13938</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Ergo,&lt;/P&gt;&lt;P&gt;What's the issue going on? And I was wondering if you can describe the current issue in details.&lt;/P&gt;&lt;P&gt;I'm looking forward to your reply.&lt;BR /&gt;Have a great day,&lt;BR /&gt;Ping&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;-----------------------------------------------------------------------------------------------------------------------&lt;BR /&gt;Note: If this post answers your question, please click the Correct Answer button. Thank you!&lt;BR /&gt;-----------------------------------------------------------------------------------------------------------------------&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 02 Aug 2016 08:54:03 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPC11E68-Serial-port-3-RX-interrupt/m-p/550033#M13938</guid>
      <dc:creator>jeremyzhou</dc:creator>
      <dc:date>2016-08-02T08:54:03Z</dc:date>
    </item>
    <item>
      <title>Re: LPC11E68 Serial port 3 RX interrupt.</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC11E68-Serial-port-3-RX-interrupt/m-p/550034#M13939</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Ping,My latest theory is that by receiving more than 1 byte in series causes the problem - no interrupt. It is maybe because serials 1-4 do not seem to have hardware FIFO. At least it's not mentioned in datasheet.&lt;/P&gt;&lt;P&gt;I'll try to test my theory out soon. Maybe these serials must be used with DMA only?BR,&lt;/P&gt;&lt;P&gt;Ergo&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 02 Aug 2016 13:58:40 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPC11E68-Serial-port-3-RX-interrupt/m-p/550034#M13939</guid>
      <dc:creator>sirurx</dc:creator>
      <dc:date>2016-08-02T13:58:40Z</dc:date>
    </item>
    <item>
      <title>Re: LPC11E68 Serial port 3 RX interrupt.</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC11E68-Serial-port-3-RX-interrupt/m-p/550035#M13940</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;UPDATE&lt;/P&gt;&lt;P&gt;Same results with USART1.&lt;/P&gt;&lt;P&gt;Also fixed logic level potential issue. So now the level is &amp;gt;=0.9VCC and no change.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 02 Aug 2016 17:35:17 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPC11E68-Serial-port-3-RX-interrupt/m-p/550035#M13940</guid>
      <dc:creator>sirurx</dc:creator>
      <dc:date>2016-08-02T17:35:17Z</dc:date>
    </item>
    <item>
      <title>Re: LPC11E68 Serial port 3 RX interrupt.</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC11E68-Serial-port-3-RX-interrupt/m-p/550036#M13941</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;New findings: When i use external serial data then first character never gets interrupt, only starting from second character.&lt;BR /&gt; For loopback situation it never gets interrupt.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 02 Aug 2016 18:52:22 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPC11E68-Serial-port-3-RX-interrupt/m-p/550036#M13941</guid>
      <dc:creator>sirurx</dc:creator>
      <dc:date>2016-08-02T18:52:22Z</dc:date>
    </item>
    <item>
      <title>Re: LPC11E68 Serial port 3 RX interrupt.</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC11E68-Serial-port-3-RX-interrupt/m-p/550037#M13942</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Ergo,&lt;/P&gt;&lt;P&gt;Thanks for your reply.&lt;/P&gt;&lt;P&gt;I was wondering if you can share the whole the demo and what evaluation you run on, then I can replicate the issue on my site and accelerate to figure out the root cause.&lt;BR /&gt;Have a great day,&lt;BR /&gt;Ping&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;-----------------------------------------------------------------------------------------------------------------------&lt;BR /&gt;Note: If this post answers your question, please click the Correct Answer button. Thank you!&lt;BR /&gt;-----------------------------------------------------------------------------------------------------------------------&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 03 Aug 2016 02:43:20 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPC11E68-Serial-port-3-RX-interrupt/m-p/550037#M13942</guid>
      <dc:creator>jeremyzhou</dc:creator>
      <dc:date>2016-08-03T02:43:20Z</dc:date>
    </item>
    <item>
      <title>Re: LPC11E68 Serial port 3 RX interrupt.</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC11E68-Serial-port-3-RX-interrupt/m-p/550038#M13943</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Ping,&lt;/P&gt;&lt;P&gt;I am using custom PCB. MCU is LPC11E68JBD48 There is two USART-s in use.&lt;/P&gt;&lt;P&gt;USART0 is connected to outside world through USB to SERIAL converter. Currently connected to PC, running terminal program (Putty).&lt;/P&gt;&lt;P&gt;USART1 (or USART3) is connected to modem(through level converters). Currently i disconnected it from modem and connected RX and TX together to form loopback. Also i can measure signal from there with scope.&lt;/P&gt;&lt;P&gt;MCU is running at 48MHz, Redlib(none), No optimizations. Pasted code below.&lt;/P&gt;&lt;P&gt;//----------------------------------------------------------------------------------------------------------------------&lt;/P&gt;&lt;P&gt;//main.c:&lt;/P&gt;&lt;P&gt;#include "chip.h"&lt;/P&gt;&lt;P&gt;#include &amp;lt;stdio.h&amp;gt;&lt;/P&gt;&lt;P&gt;#include &amp;lt;define.h&amp;gt;&lt;/P&gt;&lt;P&gt;#include "debug.h"&lt;/P&gt;&lt;P&gt;#include "modem.h"&lt;/P&gt;&lt;P&gt;#include "time.h"&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;volatile static int32_t ticks;&lt;/P&gt;&lt;P&gt;volatile static uint8_t rtcWake, rtcAlarm;&lt;/P&gt;&lt;P&gt;volatile static uint8_t us_timeout;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void SysTick_Handler(void)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ticks++;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void system_pause(uint32_t pause_ms)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int32_t last_ticks;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (pause_ms)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; last_ticks = ticks;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(last_ticks == ticks);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pause_ms--;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void InitSysTick()&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Enable SysTick Timer, block if failed, this shall trigger WDT reset in future&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(SysTick_Config(SystemCoreClock / TICKRATE_HZ))&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(1);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;int main(void)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint32_t i;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //uint8_t buf[RESPONSE_BUFF_ITEM_SIZE+10];&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //uint8_t b2[5], j;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; void * pbuf;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Read clock settings and update SystemCoreClock variable&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SystemCoreClockUpdate();&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Enable IOCON clock - needed for Pinmux command&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_Clock_EnablePeriphClock(SYSCTL_CLOCK_IOCON);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_GPIO_Init(LPC_GPIO);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Init systick timer for delays&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; InitSysTick();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; InitDebugSerial();&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PrintLog("\r\nTesting modem uart\r\n");&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ModemInit();&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (1) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pbuf = debug_read_response();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (pbuf != NULL)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ModemSendCommand(pbuf);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; debug_responses_clear();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ModemSendCommand("\r\n");&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //ModemSendCommand("a");&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; system_pause(1);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (i = 0; i &amp;lt; RESPONSE_BUFF_SIZE; i++) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pbuf = read_response((uint8_t) i);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (pbuf != NULL) {&lt;/P&gt;&lt;P&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;&amp;nbsp;&amp;nbsp; PrintLog(pbuf);&lt;/P&gt;&lt;P&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;&amp;nbsp;&amp;nbsp; PrintLog("\r\n");&lt;/P&gt;&lt;P&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;&amp;nbsp;&amp;nbsp; mark_response_read(i);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;//----------------------------------------------------------------------------------------------------------------------&lt;/P&gt;&lt;P&gt;/*&lt;/P&gt;&lt;P&gt; * debug.c&lt;/P&gt;&lt;P&gt; *&lt;/P&gt;&lt;P&gt; *&amp;nbsp; Created on: 16. juuni 2016&lt;/P&gt;&lt;P&gt; *&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Author: ergo&lt;/P&gt;&lt;P&gt; */&lt;/P&gt;&lt;P&gt;#include "debug.h"&lt;/P&gt;&lt;P&gt;#include "time.h"&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;volatile static char debug_rx_buffer[DEBUG_RX_BUFF_SIZE];&lt;/P&gt;&lt;P&gt;volatile static int16_t debug_rx_buffer_len = 0;&lt;/P&gt;&lt;P&gt;volatile static uint8_t debug_handling_rx = 0;&lt;/P&gt;&lt;P&gt;volatile static RESPONSE_LINE_T debug_response_buffer[DEBUG_RESPONSE_BUFF_SIZE]; //52*39 = 2028bytes&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void debug_responses_clear()&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint32_t i;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; NVIC_DisableIRQ(MODEM_USART_IRQNUM);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //wait until rx receive procedure ends&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(debug_handling_rx)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; system_pause(1);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; debug_rx_buffer_len = 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(i=0; i&amp;lt; DEBUG_RESPONSE_BUFF_SIZE; i++)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; debug_response_buffer[i].r_new = 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; NVIC_EnableIRQ(DEBUG_USART_IRQNUM);&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void debug_response_add(char *s)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint32_t i, len;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint8_t result;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; result = 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; len = strlen(s);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //If string is too long, truncate&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(len &amp;gt; (RESPONSE_BUFF_ITEM_SIZE -1))&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; len = RESPONSE_BUFF_ITEM_SIZE -1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Copy response to first free slot as we don't care about response order&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(i=0; i&amp;lt; DEBUG_RX_BUFF_SIZE; i++)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(debug_response_buffer[i].r_new == 0)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; memcpy((char*)&amp;amp;debug_response_buffer[i].data,s,len);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; debug_response_buffer[i].data[len] = '\0';&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; debug_response_buffer[i].r_new = 1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; result = 1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //If buffer is full, new item is ignored at moment&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(result == 0)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PrintLog("ERROR: debug_response_buffer full\r\n");&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;char * debug_read_response()&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(debug_response_buffer[0].r_new != 1)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return NULL;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return debug_response_buffer[0].data;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void debug_update_rx_buffer(uint8_t db) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ((db == (char) 0x0D) || (db == (char) 0x0A) || (db == (char) 0)) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (debug_rx_buffer_len &amp;gt; 0) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; debug_rx_buffer[debug_rx_buffer_len] = (char) 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; debug_response_add(debug_rx_buffer);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; debug_rx_buffer_len = 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else if (debug_rx_buffer_len &amp;lt;= (MODEM_RX_BUFF_SIZE - 1)) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; debug_rx_buffer[debug_rx_buffer_len] = (char) db;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; debug_rx_buffer_len++;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void USART0_IRQHandler(void)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint32_t IIRValue, LSRValue;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint8_t Dummy;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; debug_handling_rx = 1;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IIRValue = DEBUG_UART-&amp;gt;IIR;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(IIRValue &amp;amp; UART0_IIR_INTID_RLS)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LSRValue = DEBUG_UART-&amp;gt;LSR;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (LSRValue &amp;amp; (LSR_OE | LSR_PE | LSR_FE | LSR_RXFE | LSR_BI))&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dummy = (uint8_t)DEBUG_UART-&amp;gt;RBR;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Dummy read on RX to clear interrupt&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; debug_handling_rx = 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (LSRValue &amp;amp; LSR_RDR)&amp;nbsp;&amp;nbsp;&amp;nbsp; // Receive Data Ready&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; debug_update_rx_buffer((uint8_t)DEBUG_UART-&amp;gt;RBR);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if(IIRValue &amp;amp; UART0_IIR_INTID_RDA)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; debug_update_rx_buffer((uint8_t)DEBUG_UART-&amp;gt;RBR);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if(IIRValue &amp;amp; UART0_IIR_INTID_CTI)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Character timeout indicator&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if(IIRValue &amp;amp; UART0_IIR_INTID_THRE)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //THRE, transmit holding register empty&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //LPC_UART0D_API-&amp;gt;uart_isr(uartHandle);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; debug_handling_rx = 0;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void InitDebugSerial()&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; debug_responses_clear();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; debug_rx_buffer_len = 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; debug_handling_rx = 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Chip_Clock_SetUSARTNBaseClockRate((DEBUG_UART_SPEED * 48), true);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_IOCON_PinMuxSet(LPC_IOCON, IO_ISP_RX.Port, IO_ISP_RX.Pin, IO_ISP_RX.Mode);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_IOCON_PinMuxSet(LPC_IOCON, IO_ISP_TX.Port, IO_ISP_TX.Pin, IO_ISP_TX.Mode);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_UART0_Init(DEBUG_UART);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_UART0_SetBaud(DEBUG_UART, DEBUG_UART_SPEED);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_UART0_ConfigData(DEBUG_UART, (UART0_LCR_WLEN8 | UART0_LCR_SBS_1BIT));&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Chip_UART0_SetupFIFOS(DEBUG_UART, (UART0_FCR_FIFO_EN | UART0_FCR_TRG_LEV2));&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_UART0_TXEnable(DEBUG_UART);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_UART0_IntEnable(DEBUG_UART, UARTN_INTEN_RXRDY);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; NVIC_EnableIRQ(DEBUG_USART_IRQNUM);&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void PrintLog(char *str)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint32_t len;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; len = strlen(str);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (len != 0)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while ( !(DEBUG_UART-&amp;gt;LSR &amp;amp; LSR_THRE) );&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DEBUG_UART-&amp;gt;THR = *str;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; str++;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; len--;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Chip_UART0_SendByte(DEBUG_UART, *str++);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;//----------------------------------------------------------------------------------------------------------------------&lt;/P&gt;&lt;P&gt;//modem.c&lt;/P&gt;&lt;P&gt;/*&lt;/P&gt;&lt;P&gt; * Modem functions&lt;/P&gt;&lt;P&gt; * */&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;#include "define.h"&lt;/P&gt;&lt;P&gt;#include "time.h"&lt;/P&gt;&lt;P&gt;#include "debug.h"&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;volatile static char modem_rx_buffer[MODEM_RX_BUFF_SIZE];&lt;/P&gt;&lt;P&gt;volatile static int16_t modem_rx_buffer_len = 0;&lt;/P&gt;&lt;P&gt;volatile static uint8_t modem_handling_rx = 0;&lt;/P&gt;&lt;P&gt;volatile static RESPONSE_LINE_T response_buffer[RESPONSE_BUFF_SIZE]; //52*39 = 2028bytes&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;const char* LF = "\r\n";&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void responses_clear()&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint32_t i;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(modem_handling_rx)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; system_pause(1);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; modem_rx_buffer_len = 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(i=0; i&amp;lt; RESPONSE_BUFF_SIZE; i++)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; response_buffer[i].r_new = 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void response_add(char *s)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint32_t i, len;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint8_t result;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; result = 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; len = strlen(s);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //If string is too long, truncate&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(len &amp;gt; (RESPONSE_BUFF_ITEM_SIZE -1))&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; len = RESPONSE_BUFF_ITEM_SIZE -1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Copy response to first free slot as we don't care about response order&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(i=0; i&amp;lt; RESPONSE_BUFF_SIZE; i++)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(response_buffer[i].r_new == 0)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; memcpy((char*)&amp;amp;response_buffer[i].data,s,len);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; response_buffer[i].data[len] = '\0';&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; response_buffer[i].r_new = 1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; result = 1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //If buffer is full, new item is ignored at moment&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(result == 0)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PrintLog("ERROR: response_buffer full\r\n");&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;//Searches first response containing strin filter&lt;/P&gt;&lt;P&gt;//marks it as read/cleared if mark_as_read set&lt;/P&gt;&lt;P&gt;//returns index of matching response, if not found, return 0xff&lt;/P&gt;&lt;P&gt;uint8_t find_response(char * filter, bool mark_as_read)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint32_t i, flen;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint8_t result, idx;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; result = 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; flen = strlen(filter);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(i=0; i&amp;lt; RESPONSE_BUFF_SIZE; i++)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(response_buffer[i].r_new == 1 &amp;amp;&amp;amp; flen &amp;lt;= strlen(response_buffer[i].data) &amp;amp;&amp;amp; strstr(response_buffer[i].data, filter) != NULL)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(mark_as_read)&lt;/P&gt;&lt;P&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;&amp;nbsp;&amp;nbsp; response_buffer[i].r_new = 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; idx = i;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; result = 1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(result)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return idx;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0xff;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;//Searches response containing strin filter&lt;/P&gt;&lt;P&gt;//marks these as read/cleared if mark_as_read set&lt;/P&gt;&lt;P&gt;//returns count of matching responses&lt;/P&gt;&lt;P&gt;uint8_t find_responses(char * filter, bool mark_as_read)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint32_t i, flen;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint8_t count;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; count = 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; flen = strlen(filter);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(i=0; i&amp;lt; RESPONSE_BUFF_SIZE; i++)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(response_buffer[i].r_new == 1 &amp;amp;&amp;amp; flen &amp;lt;= strlen(response_buffer[i].data) &amp;amp;&amp;amp; strstr(response_buffer[i].data, filter) != NULL)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(mark_as_read)&lt;/P&gt;&lt;P&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;&amp;nbsp;&amp;nbsp; response_buffer[i].r_new = 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; count++;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return count;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;//Return response data pointer by id&lt;/P&gt;&lt;P&gt;char * read_response(uint8_t id)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(response_buffer[id].r_new != 1)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return NULL;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return response_buffer[id].data;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void mark_response_read(uint8_t id)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; response_buffer[id].r_new = 0;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;//Adds symbols to RX buffer rxCommandBuff until new line symbol or 0 received.&lt;/P&gt;&lt;P&gt;//If new line, then adds content of RX buffer to response list with Response_Add() function and resets RX buf len&lt;/P&gt;&lt;P&gt;void update_rx_buffer(uint8_t db) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ((db == (char) 0x0D) || (db == (char) 0x0A) || (db == (char) 0)) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (modem_rx_buffer_len &amp;gt; 0) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; modem_rx_buffer[modem_rx_buffer_len] = (char) 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; response_add(modem_rx_buffer);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; modem_rx_buffer_len = 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else if (modem_rx_buffer_len &amp;lt;= (MODEM_RX_BUFF_SIZE - 1)) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; modem_rx_buffer[modem_rx_buffer_len] = (char) db;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; modem_rx_buffer_len++;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;//void USART2_3_IRQHandler(void)&lt;/P&gt;&lt;P&gt;void USART1_4_IRQHandler(void)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint32_t IIRValue, LSRValue;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //uint8_t Dummy;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; modem_handling_rx = 1;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IIRValue = MODEM_USART-&amp;gt;INTSTAT;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(IIRValue == UARTN_INTEN_RXRDY)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; update_rx_buffer((uint8_t) MODEM_USART-&amp;gt;RXDATA &amp;amp; 0x000001FF);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (IIRValue &amp;amp; UART0_IIR_INTID_RLS) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LSRValue = MODEM_USART-&amp;gt;LSR;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (LSRValue &amp;amp; (LSR_OE | LSR_PE | LSR_FE | LSR_RXFE | LSR_BI)) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dummy = (uint8_t) MODEM_USART-&amp;gt;RBR;// Dummy read on RX to clear interrupt&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (LSRValue &amp;amp; LSR_RDR)&amp;nbsp;&amp;nbsp;&amp;nbsp; // Receive Data Ready&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; update_rx_buffer((uint8_t) MODEM_USART-&amp;gt;RBR);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else if (IIRValue &amp;amp; UART0_IIR_INTID_RDA) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; update_rx_buffer((uint8_t) MODEM_USART-&amp;gt;RBR);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else if (IIRValue &amp;amp; UART0_IIR_INTID_CTI) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Character timeout indicator&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else if (IIRValue &amp;amp; UART0_IIR_INTID_THRE) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //THRE, transmit holding register empty&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Chip_UARTN_IRQRBHandler(LPC_USART, &amp;amp;rxring, &amp;amp;txring);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //modem_rx_buffer, modem_rx_buffer_len&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //update_rx_buffer();&lt;/P&gt;&lt;P&gt;*/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; modem_handling_rx = 0;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void ModemInit()&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; responses_clear();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; modem_rx_buffer_len = 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; modem_handling_rx = 0;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; NVIC_DisableIRQ(USART1_4_IRQn);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_Clock_SetUSARTNBaseClockRate((MODEM_USART_BAUD * 48), true);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_IOCON_PinMuxSet(LPC_IOCON, IO_MDM_RX.Port, IO_MDM_RX.Pin, IO_MDM_RX.Mode);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_IOCON_PinMuxSet(LPC_IOCON, IO_MDM_TX.Port, IO_MDM_TX.Pin, IO_MDM_TX.Mode);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_IOCON_PinMuxSet(LPC_IOCON, IO_MDM_RX_RESERV.Port, IO_MDM_RX_RESERV.Pin, IO_MDM_RX_RESERV.Mode);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_IOCON_PinMuxSet(LPC_IOCON, IO_MDM_TX_RESERV.Port, IO_MDM_TX_RESERV.Pin, IO_MDM_TX_RESERV.Mode);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_UARTN_Init(MODEM_USART);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_UARTN_ConfigData(MODEM_USART, UARTN_CFG_DATALEN_8 | UARTN_CFG_PARITY_NONE | UARTN_CFG_STOPLEN_1);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_UARTN_SetBaud(MODEM_USART, MODEM_USART_BAUD);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_UARTN_Enable(MODEM_USART);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_UARTN_TXEnable(MODEM_USART);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; NVIC_EnableIRQ(MODEM_USART_IRQNUM);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_UARTN_IntEnable(MODEM_USART, UARTN_INTEN_RXRDY);&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void ModemDeinit()&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_UARTN_IntDisable(MODEM_USART, UARTN_INTEN_RXRDY);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; NVIC_DisableIRQ(MODEM_USART_IRQNUM);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_UARTN_DeInit(MODEM_USART);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_IOCON_PinMuxSet(LPC_IOCON, IO_MDM_RX.Port, IO_MDM_RX.Pin, IOCON_FUNC0);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_IOCON_PinMuxSet(LPC_IOCON, IO_MDM_TX.Port, IO_MDM_TX.Pin, IOCON_FUNC0);&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void ModemSendCommand(uint8_t * s)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint32_t len;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint8_t ch;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; len = strlen(s);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_UARTN_IntDisable(MODEM_USART, UARTN_INTEN_TXRDY);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while ( len != 0 )&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while ( !(MODEM_USART-&amp;gt;STAT &amp;amp; UARTN_STAT_TXRDY) );&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ch = *s;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MODEM_USART-&amp;gt;TXDATA = ch;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; s++;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; len--;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_UARTN_IntEnable(MODEM_USART, UARTN_INTEN_TXRDY);&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;//----------------------------------------------------------------------------------------------------------------------&lt;/P&gt;&lt;P&gt;/*&lt;/P&gt;&lt;P&gt; * define.h&lt;/P&gt;&lt;P&gt; *&lt;/P&gt;&lt;P&gt; *&amp;nbsp; Created on: 17. juuni 2016&lt;/P&gt;&lt;P&gt; *&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Author: ergo&lt;/P&gt;&lt;P&gt; */&lt;/P&gt;&lt;P&gt;#include "chip.h"&lt;/P&gt;&lt;P&gt;#include &amp;lt;stdio.h&amp;gt;&lt;/P&gt;&lt;P&gt;#include &amp;lt;string.h&amp;gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;#ifndef DEFINE_H_&lt;/P&gt;&lt;P&gt;#define DEFINE_H_&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;//Replaces define.h&lt;/P&gt;&lt;P&gt;#define BOOLEAN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint8_t&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;#define OFF&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;/P&gt;&lt;P&gt;#define ON&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;//Systick timer parameters --------------------------&lt;/P&gt;&lt;P&gt;#define TICKRATE_HZ (1000)&amp;nbsp;&amp;nbsp;&amp;nbsp; // tick per millisecond&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;//Debug Serial used to program the device and also put out log for inspection and bug-finding&lt;/P&gt;&lt;P&gt;#define DEBUG_UART LPC_USART0&lt;/P&gt;&lt;P&gt;#define DEBUG_USART_IRQNUM USART0_IRQn&lt;/P&gt;&lt;P&gt;#define DEBUG_UART_SPEED 115200&lt;/P&gt;&lt;P&gt;#define DEBUG_RX_BUFF_SIZE 100&lt;/P&gt;&lt;P&gt;#define DEBUG_RESPONSE_BUFF_SIZE 2&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;//I/O definitions ---------------------------------------------------------------------&lt;/P&gt;&lt;P&gt;typedef struct io_pin{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint8_t Port;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint8_t Pin;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint32_t Mode;&lt;/P&gt;&lt;P&gt;}IO_PIN_T;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;static const struct io_pin IO_ISP_RX = {.Port=0, .Pin=18, .Mode=(IOCON_FUNC1 | IOCON_MODE_INACT | IOCON_DIGMODE_EN)};&lt;/P&gt;&lt;P&gt;static const struct io_pin IO_ISP_TX = {.Port=0, .Pin=19, .Mode=(IOCON_FUNC1 | IOCON_MODE_INACT | IOCON_DIGMODE_EN)};&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;//static const struct io_pin IO_MDM_RX = {.Port=2, .Pin=3, .Mode=(IOCON_FUNC1 | IOCON_MODE_INACT | IOCON_DIGMODE_EN)};&lt;/P&gt;&lt;P&gt;//static const struct io_pin IO_MDM_TX = {.Port=2, .Pin=4, .Mode=(IOCON_FUNC1 | IOCON_MODE_INACT | IOCON_DIGMODE_EN)};&lt;/P&gt;&lt;P&gt;static const struct io_pin IO_MDM_RX_RESERV = {.Port=2, .Pin=3, .Mode=(IOCON_FUNC0 | IOCON_MODE_INACT | IOCON_DIGMODE_EN)};&lt;/P&gt;&lt;P&gt;static const struct io_pin IO_MDM_TX_RESERV = {.Port=2, .Pin=4, .Mode=(IOCON_FUNC0 | IOCON_MODE_INACT | IOCON_DIGMODE_EN)};&lt;/P&gt;&lt;P&gt;static const struct io_pin IO_MDM_RX = {.Port=0, .Pin=13, .Mode=(IOCON_FUNC4 | IOCON_MODE_INACT | IOCON_DIGMODE_EN)};&lt;/P&gt;&lt;P&gt;static const struct io_pin IO_MDM_TX = {.Port=0, .Pin=14, .Mode=(IOCON_FUNC4 | IOCON_MODE_INACT | IOCON_DIGMODE_EN)};&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;//#define MODEM_USART LPC_USART3&lt;/P&gt;&lt;P&gt;//#define MODEM_USART_IRQNUM USART2_3_IRQn&lt;/P&gt;&lt;P&gt;//#define MODEM_USART_BAUD 115200&lt;/P&gt;&lt;P&gt;#define MODEM_USART LPC_USART1&lt;/P&gt;&lt;P&gt;#define MODEM_USART_IRQNUM USART1_4_IRQn&lt;/P&gt;&lt;P&gt;#define MODEM_USART_BAUD 115200&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;#define MODEM_RX_BUFF_SIZE 200&lt;/P&gt;&lt;P&gt;#define RESPONSE_BUFF_ITEM_SIZE 50&lt;/P&gt;&lt;P&gt;//Defines one response line&lt;/P&gt;&lt;P&gt;typedef struct response_line{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint8_t r_id;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint8_t r_new;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint8_t data[RESPONSE_BUFF_ITEM_SIZE];&lt;/P&gt;&lt;P&gt;}RESPONSE_LINE_T;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;//Maximum size of received modem response, parsed into lines, separated by 0-s&lt;/P&gt;&lt;P&gt;#define RESPONSE_BUFF_SIZE 39&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;#define IER_RBR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x01&lt;/P&gt;&lt;P&gt;#define IER_THRE&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x02&lt;/P&gt;&lt;P&gt;#define IER_RLS&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x04&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;#define IIR_PEND&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x01&lt;/P&gt;&lt;P&gt;#define IIR_RLS&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x03&lt;/P&gt;&lt;P&gt;#define IIR_RDA&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x02&lt;/P&gt;&lt;P&gt;#define IIR_CTI&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x06&lt;/P&gt;&lt;P&gt;#define IIR_THRE&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x01&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;#define LSR_RDR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x01&lt;/P&gt;&lt;P&gt;#define LSR_OE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x02&lt;/P&gt;&lt;P&gt;#define LSR_PE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x04&lt;/P&gt;&lt;P&gt;#define LSR_FE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x08&lt;/P&gt;&lt;P&gt;#define LSR_BI&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x10&lt;/P&gt;&lt;P&gt;#define LSR_THRE&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x20&lt;/P&gt;&lt;P&gt;#define LSR_TEMT&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x40&lt;/P&gt;&lt;P&gt;#define LSR_RXFE&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x80&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;#endif /* DEFINE_H_ */&lt;/P&gt;&lt;P&gt;//----------------------------------------------------------------------------------------------------------------------&lt;/P&gt;&lt;P&gt;/*&lt;/P&gt;&lt;P&gt; * debug.h&lt;/P&gt;&lt;P&gt; *&lt;/P&gt;&lt;P&gt; *&amp;nbsp; Created on: 16. juuni 2016&lt;/P&gt;&lt;P&gt; *&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Author: ergo&lt;/P&gt;&lt;P&gt; */&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;#ifndef DEBUG_H_&lt;/P&gt;&lt;P&gt;#define DEBUG_H_&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;#include &amp;lt;define.h&amp;gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void debug_responses_clear();&lt;/P&gt;&lt;P&gt;char * debug_read_response();&lt;/P&gt;&lt;P&gt;void InitDebugSerial();&lt;/P&gt;&lt;P&gt;void PrintLog(char *);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;#endif /* DEBUG_H_ */&lt;/P&gt;&lt;P&gt;//----------------------------------------------------------------------------------------------------------------------&lt;/P&gt;&lt;P&gt;/*&lt;/P&gt;&lt;P&gt; * modem.h&lt;/P&gt;&lt;P&gt; *&lt;/P&gt;&lt;P&gt; *&amp;nbsp; Created on: 16. juuni 2016&lt;/P&gt;&lt;P&gt; *&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Author: ergo&lt;/P&gt;&lt;P&gt; */&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;#ifndef MODEM_H_&lt;/P&gt;&lt;P&gt;#define MODEM_H_&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void ModemEnablePower(void);&lt;/P&gt;&lt;P&gt;void ModemInit(void);&lt;/P&gt;&lt;P&gt;void ModemDeinit(void);&lt;/P&gt;&lt;P&gt;void ModemSendCommand(uint8_t *);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void responses_clear(void);&lt;/P&gt;&lt;P&gt;void response_add(char *);&lt;/P&gt;&lt;P&gt;uint8_t find_response(char *, bool);&lt;/P&gt;&lt;P&gt;uint8_t find_responses(char *, bool);&lt;/P&gt;&lt;P&gt;char * read_response(uint8_t);&lt;/P&gt;&lt;P&gt;void mark_response_read(uint8_t);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;#endif /* MODEM_H_ */&lt;/P&gt;&lt;P&gt;//----------------------------------------------------------------------------------------------------------------------&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I cleaned code up a lot but i think there is still lot's of not needed functionality for this test :smileyhappy:&lt;/P&gt;&lt;P&gt;So please ignore as much you need.&lt;/P&gt;&lt;P&gt;BR,&lt;/P&gt;&lt;P&gt;Ergo&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 03 Aug 2016 11:25:18 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPC11E68-Serial-port-3-RX-interrupt/m-p/550038#M13943</guid>
      <dc:creator>sirurx</dc:creator>
      <dc:date>2016-08-03T11:25:18Z</dc:date>
    </item>
    <item>
      <title>Re: LPC11E68 Serial port 3 RX interrupt.</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC11E68-Serial-port-3-RX-interrupt/m-p/550039#M13944</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Ergo,&lt;/P&gt;&lt;P&gt;Oh gosh, the code seems to be complicated.&lt;/P&gt;&lt;P&gt;I've attached a simple demo which about the sending and receiving message with USART0/1, and please refer to it for details.&lt;BR /&gt;Have a great day,&lt;BR /&gt;Ping&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;-----------------------------------------------------------------------------------------------------------------------&lt;BR /&gt;Note: If this post answers your question, please click the Correct Answer button. Thank you!&lt;BR /&gt;-----------------------------------------------------------------------------------------------------------------------&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 04 Aug 2016 09:14:10 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPC11E68-Serial-port-3-RX-interrupt/m-p/550039#M13944</guid>
      <dc:creator>jeremyzhou</dc:creator>
      <dc:date>2016-08-04T09:14:10Z</dc:date>
    </item>
    <item>
      <title>Re: LPC11E68 Serial port 3 RX interrupt.</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC11E68-Serial-port-3-RX-interrupt/m-p/550040#M13945</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Ping,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanx. I will check out your example.&lt;/P&gt;&lt;P&gt;If still having an issue, i will trim down my code to point that it's minimalistic :smileyhappy:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;BR,&lt;/P&gt;&lt;P&gt;Ergo&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 04 Aug 2016 09:42:09 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPC11E68-Serial-port-3-RX-interrupt/m-p/550040#M13945</guid>
      <dc:creator>sirurx</dc:creator>
      <dc:date>2016-08-04T09:42:09Z</dc:date>
    </item>
    <item>
      <title>Re: LPC11E68 Serial port 3 RX interrupt.</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC11E68-Serial-port-3-RX-interrupt/m-p/550041#M13946</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Ping,&lt;/P&gt;&lt;P&gt;I checked out your code and basically it was same as mine so i started to wonder what else could be wrong.&lt;/P&gt;&lt;P&gt;I commented out USART0 functions and interrupt works now.&lt;/P&gt;&lt;P&gt;I would say that the current topic is closed but i will investigate how the using of two serials in same time affect interrupts.&lt;/P&gt;&lt;P&gt;It might be interrupt priority issue.&lt;/P&gt;&lt;P&gt;Anyway thank you for your support and i will follow the rabbit hole :smileyhappy:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;BR,&lt;/P&gt;&lt;P&gt;Ergo&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 04 Aug 2016 16:13:07 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPC11E68-Serial-port-3-RX-interrupt/m-p/550041#M13946</guid>
      <dc:creator>sirurx</dc:creator>
      <dc:date>2016-08-04T16:13:07Z</dc:date>
    </item>
  </channel>
</rss>

