<?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>LIBUARTE on ble_app_uart with DMA</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/47685/libuarte-on-ble_app_uart-with-dma</link><description>Hi All, 
 I have 2 boards nrf52840 pc10056 and I need to run ble_app_uart using LIBUARTE with DMA in order to obtain a more robust uart communication 
 I would like to use an uart DMA that will work in background saving the byte received in a buffer </description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Wed, 07 Apr 2021 08:30:09 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/47685/libuarte-on-ble_app_uart-with-dma" /><item><title>RE: LIBUARTE on ble_app_uart with DMA</title><link>https://devzone.nordicsemi.com/thread/303390?ContentTypeID=1</link><pubDate>Wed, 07 Apr 2021 08:30:09 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:369cef2b-6d1c-40a8-8f3d-5a7919970f94</guid><dc:creator>Jonathan_NB</dc:creator><description>&lt;p&gt;Hi Barl,&lt;br /&gt;&lt;br /&gt;Would you be able to share with me your LIBUARTE on ble_app_uart with DMA example?&amp;nbsp;&lt;br /&gt;&lt;br /&gt;Best regards,&lt;br /&gt;Jonathan&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: LIBUARTE on ble_app_uart with DMA</title><link>https://devzone.nordicsemi.com/thread/249320?ContentTypeID=1</link><pubDate>Tue, 12 May 2020 00:30:48 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:2f1323f4-9205-424f-84a5-224dec9f7a64</guid><dc:creator>Sal Garcia</dc:creator><description>&lt;p&gt;How did you get this sorted? I have followed your same steps and getting the same error, even with all the correct timer and RTC enabled in sdk_config.h&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: LIBUARTE on ble_app_uart with DMA</title><link>https://devzone.nordicsemi.com/thread/248851?ContentTypeID=1</link><pubDate>Fri, 08 May 2020 06:38:09 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:c594c680-dbf6-4f18-8f17-918029936da8</guid><dc:creator>Simonr</dc:creator><description>&lt;p&gt;I suggest creating a ticket of your own where you describe your problem in detail. If you think this case is relevant, feel free to link to it in your ticket.&lt;/p&gt;
&lt;p&gt;This will make it much easier to get a good overview, as starting over in an already existing thread can get messy quickly.&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Simon&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: LIBUARTE on ble_app_uart with DMA</title><link>https://devzone.nordicsemi.com/thread/248740?ContentTypeID=1</link><pubDate>Thu, 07 May 2020 13:39:49 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:0e597428-eaa9-48c5-b142-8d42c0f82ff7</guid><dc:creator>tblock</dc:creator><description>&lt;p&gt;Hello,&lt;br /&gt;I am working on a project and need to use&amp;nbsp;DMA and detect end of data reception before the DMA buffer is full. Therefore I tried to start with libuarte. &lt;/p&gt;
&lt;p&gt;I have added in sdk_config.h&lt;/p&gt;
&lt;p&gt;#define NRF_LIBUARTE_UARTE0 1&lt;/p&gt;
&lt;p&gt;#define NRFX_PRS_BOX_4_ENABLED 0&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;In added&lt;/p&gt;
&lt;p align="LEFT"&gt;&lt;span style="color:#7f0055;font-size:small;"&gt;&lt;b&gt;#include&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size:small;"&gt; &lt;/span&gt;&lt;span style="color:#2a00ff;font-size:small;"&gt;&amp;quot;nrf_libuarte_async.h&amp;quot;&lt;/span&gt;&lt;/p&gt;
&lt;p align="LEFT"&gt;NRF_LIBUARTE_ASYNC_DEFINE(libuarte, 0, 0, 0, NRF_LIBUARTE_PERIPHERAL_NOT_USED, 255, 3);&lt;/p&gt;
&lt;p&gt;to my source code and when I compile I get many compile errors.&lt;/p&gt;
&lt;p&gt;I guess I need to define some timers&lt;/p&gt;
&lt;p&gt;also I get something like:&lt;/p&gt;
&lt;p&gt;7&amp;gt; ../../../../../../components/libraries/balloc/nrf_balloc.h:219:9: sorry, unimplemented: non-trivial designated initializers not supported&lt;/p&gt;
&lt;p&gt;So can you tell me what configuration e.g. in sdk_config.h you have used to be able&amp;nbsp; to come some steps further?&lt;/p&gt;
&lt;p&gt;I appreciate any hint.&lt;/p&gt;
&lt;p&gt;Thanks in advance&lt;/p&gt;
&lt;p&gt;Thomas&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: LIBUARTE on ble_app_uart with DMA</title><link>https://devzone.nordicsemi.com/thread/244099?ContentTypeID=1</link><pubDate>Wed, 08 Apr 2020 14:00:46 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:ab8c7daa-2388-4fda-8178-8f5a4b713322</guid><dc:creator>bama</dc:creator><description>&lt;p&gt;I&amp;#39;m working on a projekt where I also want to use the libuarte but now i have the same issue with the &amp;quot;not enabled time instance&amp;quot; but i have set the instace in sdk_config to true. Can yu please share what you have done to fix this issue?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: LIBUARTE on ble_app_uart with DMA</title><link>https://devzone.nordicsemi.com/thread/196658?ContentTypeID=1</link><pubDate>Thu, 04 Jul 2019 17:18:21 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:c7bf11fa-0f8b-4c95-ba30-1204a928299e</guid><dc:creator>Bar1</dc:creator><description>&lt;p&gt;Hello,&lt;/p&gt;
&lt;p&gt;I have changed the priority interrupt in libuarte_async.c from 1 to 5 and it now works. Work means that it does not stop anymore sending data from the peripheral to the central. The problem now is how these data are sent, because the buffer that I receive from the UART (peripheral side) is changing continuously length.....even if the packet length is fixed and the buffer has same size or bigger (I tried every thing).&lt;/p&gt;
&lt;p&gt;Today I saw the post of&amp;nbsp; RoyCreemers, I thought could be same problem so I did what was indicated there....result is that it does not work.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Another problem (very big actually) is that the board works just in debug mode. The weird thing is that even the experiment_libuarte that is in SDK_15.3 does not work in modality DEBUG (On segger embedded studio), but just on Release. Very strange stuff. I think I give up, I cannot spend more time on it even because every day I discover a new bug.&lt;/p&gt;
&lt;p&gt;Anyway thanks a lot for your help and your time.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Regards&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: LIBUARTE on ble_app_uart with DMA</title><link>https://devzone.nordicsemi.com/thread/196341?ContentTypeID=1</link><pubDate>Wed, 03 Jul 2019 20:12:13 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:003a793a-6bd2-416f-9948-843349e28d74</guid><dc:creator>RoyCreemers</dc:creator><description>&lt;p&gt;Please check the following topic about libuarte:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devzone.nordicsemi.com/f/nordic-q-a/48321/using-libuarte-during-flash-operations"&gt;https://devzone.nordicsemi.com/f/nordic-q-a/48321/using-libuarte-during-flash-operations&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;We also had some issues with libuarte in combination with soft device. There seemed to be some issues in the code. Nordic provided some patches for this code in this topic.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: LIBUARTE on ble_app_uart with DMA</title><link>https://devzone.nordicsemi.com/thread/196191?ContentTypeID=1</link><pubDate>Wed, 03 Jul 2019 08:57:21 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:a2efaced-ce24-4891-a9ef-5cdb643ae9ae</guid><dc:creator>Simonr</dc:creator><description>&lt;p&gt;Hi&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;You might be seeing a&amp;nbsp;SoftDevice assert because you won&amp;#39;t be able to step debug the application code when the&amp;nbsp;SoftDevice&amp;nbsp;is enabled. If you want to step through the code you need to use what is called Monitor Mode Debugging that you can read&amp;nbsp;&lt;/span&gt;&lt;a href="https://github.com/NordicPlayground/j-link-monitoring-mode-debugging/blob/master/pca10040/s132/arm5_no_packs/README.md"&gt;here&lt;/a&gt;&lt;span&gt;.&amp;nbsp;You need&amp;nbsp;to get a&amp;nbsp;return value from &lt;a href="https://infocenter.nordicsemi.com/index.jsp?topic=%2Fcom.nordic.infocenter.s140.api.v6.1.0%2Fgroup___b_l_e___g_a_t_t_s___f_u_n_c_t_i_o_n_s.html&amp;amp;anchor=ga313fe43c2e93267da668572e885945db"&gt;sd_ble_gatts_hvx&lt;/a&gt; for us to be able to see what exactly goes wrong.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Are you employing double buffering in your application? I found &lt;a href="https://devzone.nordicsemi.com/f/nordic-q-a/14116/nrf52-saadc-double-buffering"&gt;this thread&lt;/a&gt; which explains this quite well. Could you try implementing something like that,&amp;nbsp;and&amp;nbsp;fill one RX buffer while the other one is transferring and emptying?&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Best regards,&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Simon&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: LIBUARTE on ble_app_uart with DMA</title><link>https://devzone.nordicsemi.com/thread/195965?ContentTypeID=1</link><pubDate>Tue, 02 Jul 2019 11:44:39 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:52bd2698-fa84-4a98-8cd0-799627f8e0f7</guid><dc:creator>Bar1</dc:creator><description>&lt;p&gt;Hello,&lt;/p&gt;
&lt;p&gt;I left the central in the way that it is on SDK 15.3 that Nordic released. The only thing I changed was to commented out the ECHO function in order to do not send back data to the peripheral. My idea was to work before on the peripheral and, once it works, moving on the central.&lt;/p&gt;
&lt;p&gt;The program stops here:&lt;/p&gt;
&lt;p&gt;SVCALL(SD_BLE_GATTS_HVX, uint32_t, sd_ble_gatts_hvx(uint16_t conn_handle, ble_gatts_hvx_params_t const *p_hvx_params));&lt;/p&gt;
&lt;p&gt;Assuming that the packet is long, for example, 75 characters. If I set a rx_buffer of 150 characters, from the &amp;quot;central&amp;quot; side I will see only 2 packets.&lt;/p&gt;
&lt;p&gt;NRF_LIBUARTE_ASYNC_DEFINE(libuarte, 0, 3, 0, 4, &lt;strong&gt;150&lt;/strong&gt;, 3);&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Basically the programs will call the following function 3 times:&lt;/p&gt;
&lt;p&gt;return sd_ble_gatts_hvx(conn_handle, &amp;amp;hvx_params);&lt;/p&gt;
&lt;p&gt;the first 2 times it works, in the third it will hang (On the peripheral side).&lt;/p&gt;
&lt;p&gt;If I increase the RX_buffer for example at 225 (3x75)&lt;/p&gt;
&lt;p&gt;&lt;span&gt;NRF_LIBUARTE_ASYNC_DEFINE(libuarte, 0, 3, 0, 4,&amp;nbsp;&lt;/span&gt;&lt;strong&gt;225&lt;/strong&gt;&lt;span&gt;, 3);&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;the program will call 4 times &amp;quot;&lt;span&gt;sd_ble_gatts_hvx&amp;quot; but on the 4th it will stop. But from this function I cannot get any error because the program never return from there.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;The path of the error is:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;img src="https://devzone.nordicsemi.com/resized-image/__size/320x240/__key/communityserver-discussions-components-files/4/pastedimage1562067530846v1.png" alt=" " /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;It will finish in:&amp;nbsp; &amp;quot;&lt;/span&gt;&lt;strong&gt;Unknown function at 0x00000A60&lt;/strong&gt;&amp;quot;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: LIBUARTE on ble_app_uart with DMA</title><link>https://devzone.nordicsemi.com/thread/195255?ContentTypeID=1</link><pubDate>Fri, 28 Jun 2019 06:03:36 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:e69f9c68-9448-4aa2-8779-49628194158e</guid><dc:creator>Simonr</dc:creator><description>&lt;p&gt;What about the RX buffer on the central side? Do you clear that one after printing as well, or does it just fill up?&lt;/p&gt;
&lt;p&gt;Have you stepped through your code to see why you never reach the APP_ERROR_CHECK()? If you set the check outside of the if-loop so you get it no matter what the error code, you should be able to see it.&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Simon&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: LIBUARTE on ble_app_uart with DMA</title><link>https://devzone.nordicsemi.com/thread/195129?ContentTypeID=1</link><pubDate>Thu, 27 Jun 2019 12:05:21 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:7474bd41-95b3-4a83-ac45-e9385ad62cb7</guid><dc:creator>Bar1</dc:creator><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;I do not use any TX buffer (not that I know). Because in this case I&amp;#39;m not writing on the UART, I&amp;#39;m just reading, sending to the central and make free the RX buffer.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I cannot get an error code. In the code that I put back here, there is APP_ERROR_CHECK(err_code), but the program does not go there.&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;void uart_event_handler(void * context, nrf_libuarte_async_evt_t * p_evt)
{
    nrf_libuarte_async_t * p_libuarte = (nrf_libuarte_async_t *)context;
    uint32_t       err_code;
    ret_code_t ret;

    switch (p_evt-&amp;gt;type)
    {
        case NRF_LIBUARTE_ASYNC_EVT_ERROR:
            bsp_board_led_invert(1);
            break;
        case NRF_LIBUARTE_ASYNC_EVT_RX_DATA:
            bsp_board_led_invert(2);
            err_code= ble_nus_data_send(&amp;amp;m_nus, p_evt-&amp;gt;data.rxtx.p_data, &amp;amp;p_evt-&amp;gt;data.rxtx.length, m_conn_handle);
            do
            {
                if ((err_code != NRF_ERROR_INVALID_STATE) &amp;amp;&amp;amp;
                    (err_code != NRF_ERROR_RESOURCES) &amp;amp;&amp;amp;
                    (err_code != NRF_ERROR_NOT_FOUND))
                {
                    APP_ERROR_CHECK(err_code);
                }
            } while (err_code == NRF_ERROR_RESOURCES);
            nrf_libuarte_async_rx_free(p_libuarte, p_evt-&amp;gt;data.rxtx.p_data , p_evt-&amp;gt;data.rxtx.length);    // if I remove this line of code I will have more or less the same behavior 
            break;
        case NRF_LIBUARTE_ASYNC_EVT_TX_DONE:
            bsp_board_led_invert(3);
            break;
        default:
            break;
    }
}&lt;/pre&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: LIBUARTE on ble_app_uart with DMA</title><link>https://devzone.nordicsemi.com/thread/194679?ContentTypeID=1</link><pubDate>Tue, 25 Jun 2019 13:32:15 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:75fc67ea-ad0f-4029-9ddc-a42ed68ab787</guid><dc:creator>Simonr</dc:creator><description>&lt;p&gt;Hi&lt;/p&gt;
&lt;p&gt;Thank you for the clarification! Is by any chance the TX buffer not cleared after sending a message, and that is what is causing this error? If not, are you able to get an error code so we can see where exactly this error originates?&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Simon&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: LIBUARTE on ble_app_uart with DMA</title><link>https://devzone.nordicsemi.com/thread/194593?ContentTypeID=1</link><pubDate>Tue, 25 Jun 2019 10:20:05 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:925edbba-dd1a-436f-bf24-2b80e04f9045</guid><dc:creator>Bar1</dc:creator><description>&lt;p&gt;Hi Simonr,&lt;/p&gt;
&lt;p&gt;In this moment I&amp;#39;m able to receive the data from the micro-controller to the peripheral via UART (I&amp;#39;m sending a fixed length packet from micro to peripheral). Once that I receive this packet I&amp;#39;ve tried to do 2 things:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1)&amp;nbsp;The peripheral receive the DATA from the micro-controller via UART and print them again on its own UART (I print the packet received on the terminal, in order to have a&amp;nbsp;visual of what is happening and if the peripheral is receiving good the data from the micro-controller).&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;void uart_event_handler(void * context, nrf_libuarte_async_evt_t * p_evt)
{
    nrf_libuarte_async_t * p_libuarte = (nrf_libuarte_async_t *)context;
    uint32_t       err_code;
    ret_code_t ret;

    switch (p_evt-&amp;gt;type)
    {
        case NRF_LIBUARTE_ASYNC_EVT_ERROR:
            bsp_board_led_invert(1);
            break;
        case NRF_LIBUARTE_ASYNC_EVT_RX_DATA:
            bsp_board_led_invert(2);
            ret = nrf_libuarte_async_tx(p_libuarte, p_evt-&amp;gt;data.rxtx.p_data, p_evt-&amp;gt;data.rxtx.length);
            nrf_libuarte_async_rx_free(p_libuarte, p_evt-&amp;gt;data.rxtx.p_data , p_evt-&amp;gt;data.rxtx.length);    // if I remove this line of code I will have more or less the same behavior 
            break;
        case NRF_LIBUARTE_ASYNC_EVT_TX_DONE:
            bsp_board_led_invert(3);
            break;
        default:
            break;
    }
}&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;The important code lines are:&lt;/p&gt;
&lt;p&gt;-&amp;nbsp; &amp;nbsp; &amp;nbsp;ret = nrf_libuarte_async_tx(p_libuarte, p_evt-&amp;gt;data.rxtx.p_data, p_evt-&amp;gt;data.rxtx.length);&lt;br /&gt;-&amp;nbsp; &amp;nbsp; &amp;nbsp;nrf_libuarte_async_rx_free(p_libuarte, p_evt-&amp;gt;data.rxtx.p_data , p_evt-&amp;gt;data.rxtx.length);&lt;/p&gt;
&lt;p&gt;I&lt;strong&gt;n this case it works perfectly&lt;/strong&gt; (It means I can see on the terminal the packet that I&amp;#39;m sending from the micro-controller).&lt;/p&gt;
&lt;p&gt;For instance, if I&amp;nbsp;comment out the line where I make free the buffer:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;-&amp;nbsp; &amp;nbsp; &amp;nbsp;ret = nrf_libuarte_async_tx(p_libuarte, p_evt-&amp;gt;data.rxtx.p_data, p_evt-&amp;gt;data.rxtx.length);&lt;/span&gt;&lt;br /&gt;&lt;span&gt;-&amp;nbsp; &amp;nbsp;//&amp;nbsp; nrf_libuarte_async_rx_free(p_libuarte, p_evt-&amp;gt;data.rxtx.p_data , p_evt-&amp;gt;data.rxtx.length);&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;What will happen is that I will see on terminal a number of packets that is proportional to the RX buffer before to stop working. Rx that I set here:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;- NRF_LIBUARTE_ASYNC_DEFINE (libuarte, 0, 3, 0, 4, &amp;quot;&lt;strong&gt;RX&lt;/strong&gt;&amp;quot;, 3);&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;It means that, if I have a bigger RX buffer I&amp;#39;ll see more packet on the terminal before it stops.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration:underline;"&gt;&lt;strong&gt;Conclusion on this point:&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;- If I want to print on terminal what I&amp;#39; m receiving from micro-controller is important to make free the RX buffer. In that case everything is working good and reliable.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2) The peripheral will send the packets that it receives, from the micro-controller via UART, to the central over bluetooth. The central, once got the packet, will print it&amp;nbsp;on the terminal.&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;pre class="ui-code" data-mode="text"&gt;void uart_event_handler(void * context, nrf_libuarte_async_evt_t * p_evt)
{
    nrf_libuarte_async_t * p_libuarte = (nrf_libuarte_async_t *)context;
    uint32_t       err_code;
    ret_code_t ret;

    switch (p_evt-&amp;gt;type)
    {
        case NRF_LIBUARTE_ASYNC_EVT_ERROR:
            bsp_board_led_invert(1);
            break;
        case NRF_LIBUARTE_ASYNC_EVT_RX_DATA:
            bsp_board_led_invert(2);
            err_code= ble_nus_data_send(&amp;amp;m_nus, p_evt-&amp;gt;data.rxtx.p_data, &amp;amp;p_evt-&amp;gt;data.rxtx.length, m_conn_handle);
            do
            {
                if ((err_code != NRF_ERROR_INVALID_STATE) &amp;amp;&amp;amp;
                    (err_code != NRF_ERROR_RESOURCES) &amp;amp;&amp;amp;
                    (err_code != NRF_ERROR_NOT_FOUND))
                {
                    APP_ERROR_CHECK(err_code);
                }
            } while (err_code == NRF_ERROR_RESOURCES);
            nrf_libuarte_async_rx_free(p_libuarte, p_evt-&amp;gt;data.rxtx.p_data , p_evt-&amp;gt;data.rxtx.length);    // if I remove this line of code I will have more or less the same behavior 
            break;
        case NRF_LIBUARTE_ASYNC_EVT_TX_DONE:
            bsp_board_led_invert(3);
            break;
        default:
            break;
    }
}&lt;/pre&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Important lines:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;-&amp;nbsp; &amp;nbsp; err_code= ble_nus_data_send(&amp;amp;m_nus, p_evt-&amp;gt;data.rxtx.p_data, &amp;amp;p_evt-&amp;gt;data.rxtx.length, m_conn_handle);&lt;br /&gt;-&amp;nbsp; &amp;nbsp; nrf_libuarte_async_rx_free(p_libuarte, p_evt-&amp;gt;data.rxtx.p_data , p_evt-&amp;gt;data.rxtx.length); &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In this case the peripheral start to sends packets to the central, but after a while it stops and crash.&lt;/p&gt;
&lt;p&gt;The number of packets sent, like in the 1) case, is proportional to the RX buffer size that I&amp;#39;ve set here:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;-&amp;nbsp;&lt;/span&gt;&lt;span&gt;NRF_LIBUARTE_ASYNC_DEFINE (libuarte, 0, 3, 0, 4, &amp;quot;&lt;/span&gt;&lt;strong&gt;RX&lt;/strong&gt;&lt;span&gt;&amp;quot;, 3);&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;All of this happens&lt;strong&gt; without&lt;/strong&gt; commenting out:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;-&amp;nbsp; &amp;nbsp;&lt;strong&gt;nrf_libuarte_async_rx_free(p_libuarte, p_evt-&amp;gt;data.rxtx.p_data , p_evt-&amp;gt;data.rxtx.length);&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;So, it&amp;#39;s like that the RX_buffer cannot be cleaned once that I send data over bluetooth with &amp;quot;&lt;strong&gt;ble_nus_data_send&amp;quot;.&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;b&gt;So, my problem is that when I try to send the packet from the peripheral to the central over bluetooth, it stops after a while. The behaviour&amp;nbsp;in the case 2 is the one where I&amp;#39;m asking you help. The case 1 is just a case where&amp;nbsp;the problem seems to have the same behaviour once that I comment out the &amp;quot;&lt;strong&gt;nrf_libuarte_async_rx_free&amp;quot;.&lt;/strong&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: LIBUARTE on ble_app_uart with DMA</title><link>https://devzone.nordicsemi.com/thread/194548?ContentTypeID=1</link><pubDate>Tue, 25 Jun 2019 08:33:07 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:f5efafe7-ed92-4892-8d04-80f7fcbd6241</guid><dc:creator>Simonr</dc:creator><description>&lt;p&gt;Hi&lt;/p&gt;
&lt;p&gt;I&amp;#39;m having some trouble understanding what exactly you mean. Is it the UART or the BLE communication you&amp;#39;re having trouble with? It seems to me that you&amp;#39;re able to receive the UART data filling up your buffer to the peripheral, and then sending this data to the central. Are you having trouble clearing the RX buffer from the peripheral before receiving a new &amp;quot;batch&amp;quot; of UART data?&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Simon&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: LIBUARTE on ble_app_uart with DMA</title><link>https://devzone.nordicsemi.com/thread/194456?ContentTypeID=1</link><pubDate>Mon, 24 Jun 2019 17:44:57 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:39c264b8-0628-4d85-b208-23456b5fb13c</guid><dc:creator>Bar1</dc:creator><description>&lt;p&gt;Hi All,&lt;/p&gt;
&lt;p&gt;I have partially solved the problem. When I try to send the data over Bluetooth, from the other side I get them, but the peripheral stops at certain point to send data.&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;void uart_event_handler(void * context, nrf_libuarte_async_evt_t * p_evt)
{
    nrf_libuarte_async_t * p_libuarte = (nrf_libuarte_async_t *)context;
    uint32_t       err_code;
    ret_code_t ret;

    switch (p_evt-&amp;gt;type)
    {
        case NRF_LIBUARTE_ASYNC_EVT_ERROR:
            bsp_board_led_invert(1);
            break;
        case NRF_LIBUARTE_ASYNC_EVT_RX_DATA:
            bsp_board_led_invert(2);
            err_code= ble_nus_data_send(&amp;amp;m_nus, p_evt-&amp;gt;data.rxtx.p_data, &amp;amp;p_evt-&amp;gt;data.rxtx.length, m_conn_handle);
            do
            {
                if ((err_code != NRF_ERROR_INVALID_STATE) &amp;amp;&amp;amp;
                    (err_code != NRF_ERROR_RESOURCES) &amp;amp;&amp;amp;
                    (err_code != NRF_ERROR_NOT_FOUND))
                {
                    APP_ERROR_CHECK(err_code);
                }
            } while (err_code == NRF_ERROR_RESOURCES);
            nrf_libuarte_async_rx_free(p_libuarte, p_evt-&amp;gt;data.rxtx.p_data , p_evt-&amp;gt;data.rxtx.length);    
            break;
        case NRF_LIBUARTE_ASYNC_EVT_TX_DONE:
            bsp_board_led_invert(3);
            break;
        default:
            break;
    }
}&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;Exactly sends the data based on the size of the buffer when I define the NRF_LIBUARTE (the &lt;strong&gt;RX&lt;/strong&gt; in this case). The larger the buffer the greater the number of packets sent, then it stops to send packets.&lt;/p&gt;
&lt;p&gt;NRF_LIBUARTE_ASYNC_DEFINE (libuarte, 0, 3, 0, 4, &amp;quot;&lt;strong&gt;RX&lt;/strong&gt;&amp;quot;, 3);&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;The same thing happen if for example, in stead to send the data received from UART to the central, I print them again on the UART of the peripheral and I do not make free the RX buffer:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;quot;nrf_libuarte_async_rx_free(p_libuarte, p_evt-&amp;gt;data.rxtx.p_data , p_evt-&amp;gt;data.rxtx.length);&amp;nbsp;&lt;/strong&gt;&amp;nbsp;&amp;quot;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;See the code below:&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;void uart_event_handler(void * context, nrf_libuarte_async_evt_t * p_evt)
{
    nrf_libuarte_async_t * p_libuarte = (nrf_libuarte_async_t *)context;
    uint32_t       err_code;
    ret_code_t ret;

    switch (p_evt-&amp;gt;type)
    {
        case NRF_LIBUARTE_ASYNC_EVT_ERROR:
            bsp_board_led_invert(1);
            break;
        case NRF_LIBUARTE_ASYNC_EVT_RX_DATA:
            bsp_board_led_invert(2);
            ret = nrf_libuarte_async_tx(p_libuarte, p_evt-&amp;gt;data.rxtx.p_data, p_evt-&amp;gt;data.rxtx.length);
//          err_code= ble_nus_data_send(&amp;amp;m_nus, p_evt-&amp;gt;data.rxtx.p_data, &amp;amp;p_evt-&amp;gt;data.rxtx.length, m_conn_handle);
            do
            {
                if ((err_code != NRF_ERROR_INVALID_STATE) &amp;amp;&amp;amp;
                    (err_code != NRF_ERROR_RESOURCES) &amp;amp;&amp;amp;
                    (err_code != NRF_ERROR_NOT_FOUND))
                {
                    APP_ERROR_CHECK(err_code);
                }
            } while (err_code == NRF_ERROR_RESOURCES);
            nrf_libuarte_async_rx_free(p_libuarte, p_evt-&amp;gt;data.rxtx.p_data , p_evt-&amp;gt;data.rxtx.length);    // if I remove this line of code I will have more or less the same behavior 
            break;
        case NRF_LIBUARTE_ASYNC_EVT_TX_DONE:
            bsp_board_led_invert(3);
            break;
        default:
            break;
    }
}&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Any help is appreciated&lt;/span&gt; ;)&amp;nbsp;&lt;span class="emoticon" data-url="https://devzone.nordicsemi.com/cfs-file/__key/system/emoji/1f643.svg" title="Upside down"&gt;&amp;#x1f643;&lt;/span&gt;&lt;span class="emoticon" data-url="https://devzone.nordicsemi.com/cfs-file/__key/system/emoji/1f643.svg" title="Upside down"&gt;&amp;#x1f643;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Thank you all&amp;nbsp;&lt;span class="emoticon" data-url="https://devzone.nordicsemi.com/cfs-file/__key/system/emoji/1f642.svg" title="Slight smile"&gt;&amp;#x1f642;&lt;/span&gt;&lt;span class="emoticon" data-url="https://devzone.nordicsemi.com/cfs-file/__key/system/emoji/1f642.svg" title="Slight smile"&gt;&amp;#x1f642;&lt;/span&gt;&lt;span class="emoticon" data-url="https://devzone.nordicsemi.com/cfs-file/__key/system/emoji/1f642.svg" title="Slight smile"&gt;&amp;#x1f642;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: LIBUARTE on ble_app_uart with DMA</title><link>https://devzone.nordicsemi.com/thread/192655?ContentTypeID=1</link><pubDate>Thu, 13 Jun 2019 11:24:01 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:ad2e850f-4f92-4561-b55b-e0904f39d7d8</guid><dc:creator>run_ar</dc:creator><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;I have to admit it&amp;#39;s been a while since I worked with libuarte. but the Libuarte driver is a bit special given that it uses a timer to stop RX if the peer does not send date for a certain amount of time. This means that if you send multiple short packets with a given delay inbetween your application might not be able to read the data from the RX buffer before it is switced to the next buffer and then back again. the pointer for DMA will typically be updated between the rx events. Also this means that the other part of the uart communication has to respect these limitations. so if it want to send a lot of data to one buffer that has to be completed within a certain time (you cannot wait to send more data as the rx timer will expire). Or if you want to send short packets you have to wait for the timeout to occur, before sending the next one.&lt;/p&gt;
&lt;p&gt;If it&amp;#39;s possible to use HW flow control, you could disable the timer and use that instead. Not sure if this is possible with the driver at this stage. Note that the timeout was added to make it possible to transimt at high baudrates without hwfc.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: LIBUARTE on ble_app_uart with DMA</title><link>https://devzone.nordicsemi.com/thread/192177?ContentTypeID=1</link><pubDate>Tue, 11 Jun 2019 22:07:02 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:c58ef3f7-c19b-4f11-a648-65a4a89d2dac</guid><dc:creator>Bar1</dc:creator><description>&lt;p&gt;Hello,&lt;/p&gt;
&lt;p&gt;&lt;span&gt;I managed to implement libuarte in ble_app_uart and, finally I have no problems compiling and I can send data from the &amp;quot;peripheral&amp;quot; to the &amp;quot;central&amp;quot;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Obviously sending the data I have a lot of errors yet that I hope you will be able to help me.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;For now I have focused only on the &amp;quot;peripheral&amp;quot; side, which means that the central remained as from SDK 15.3 (except for the fact that I removed the ECHO of the data, so the data received are not sent back).&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Of course I&amp;rsquo;ve modified something in the sdk_config.h and the main in the ble_app_uart example.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;In the MAIN, compare to the ble_app_uart example, I&amp;rsquo;ve changed the init of the UART:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;pre class="ui-code" data-mode="text"&gt;//UART INIT:
…………………
NRF_LIBUARTE_ASYNC_DEFINE(libuarte, 0, 3, 0, 4, 75, 3);
………………………………………………………..

static void uart_init(void)
{
nrf_libuarte_async_config_tnrf_libuarte_async_config = {
                  .tx_pin     = TX_PIN_NUMBER,
                  .rx_pin     = RX_PIN_NUMBER,
                  .baudrate   = NRF_UARTE_BAUDRATE_115200,
                  .parity     = NRF_UARTE_PARITY_EXCLUDED,
                  .hwfc       = NRF_UARTE_HWFC_DISABLED,
                  .timeout_us = 100,
          };

ret_code_terr_code = nrf_libuarte_async_init(&amp;amp;libuarte, &amp;amp;nrf_libuarte_async_config, uart_event_handler, &amp;amp;libuarte);

          APP_ERROR_CHECK(err_code);

nrf_libuarte_async_enable(&amp;amp;libuarte);

}
&lt;/pre&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;and the &amp;quot;void uart_event_handler&amp;quot; method which I report below:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;pre class="ui-code" data-mode="text"&gt;/**@snippet [UART Initialization] */

//UART_EVENT_HANDLER:
void uart_event_handler(void * context, nrf_libuarte_async_evt_t * p_evt)
{
        nrf_libuarte_async_t * p_libuarte = (nrf_libuarte_async_t *)context;
            uint32_t       err_code;
        ret_code_t ret;
        
        
        switch (p_evt-&amp;gt;type)
            {
                    case NRF_LIBUARTE_ASYNC_EVT_ERROR:
                        bsp_board_led_invert(0);
                        break;
                    case NRF_LIBUARTE_ASYNC_EVT_RX_DATA:
                    	ret=nrf_libuarte_async_tx(p_libuarte,  p_evt-&amp;gt;data.rxtx.p_data , p_evt-&amp;gt;data.rxtx.length);
                    	bsp_board_led_invert(2);
                    
                    //	do
                    //                    {
                    //                        uint16_t length = (uint16_t)index;
                    //                        err_code = ble_nus_data_send(&amp;amp;m_nus, data_array, &amp;amp;length, m_conn_handle);
                    //                        if ((err_code != NRF_ERROR_INVALID_STATE) &amp;amp;&amp;amp;
                    //                            (err_code != NRF_ERROR_RESOURCES) &amp;amp;&amp;amp;
                    //                            (err_code != NRF_ERROR_NOT_FOUND))
                    //                        {
                    //                            APP_ERROR_CHECK(err_code);
                    //                        }
                    //                    } while (err_code == NRF_ERROR_RESOURCES);
                    
                    	nrf_libuarte_async_rx_free(p_libuarte, p_evt-&amp;gt;data.rxtx.p_data,p_evt-&amp;gt;data.rxtx.length);
                    	break;
                    case NRF_LIBUARTE_ASYNC_EVT_TX_DONE:
                        bsp_board_led_invert(3);
                        break;
                        default:
                        break;
            }
}
&lt;/pre&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;The idea is: &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Write from microcontroller on the peripheral UART, the peripheral receives and sends to the central. Before doing this, or using the &amp;quot;ble_nus_data_send&amp;quot; I would like to see what happen in the peripheral side, so,once I received&amp;nbsp; the data on the UART, instead to use &amp;quot;ble_nus_data_send&amp;quot; (that for sure once I remove the comments will give some problem),I print everything on the peripheral UART terminal with &amp;quot;nrf_libuarte_async_tx&amp;quot;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;If with a microcontroller I send a string of &amp;quot;N&amp;quot; characters that ends with &amp;quot;\n&amp;quot; every &amp;quot;s&amp;quot; m_seconds what should happen is:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;As is the program, (considering the commented lines) once the string is received it is printed. The problem is that what I print is not exactly what I send, but it is like that in the buffer something is stored and something is repleced from a new data.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;If I&amp;#39;m sending a buffer like this:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;ABCDEFG\n, for instance I get something &amp;quot;similar&amp;quot;:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ABCDEFG\n&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ABCDEFG\n&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ABCDEFG\n&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ABCDEFABCDEFGABCDEFGABCDEFG\n&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ABCABCDEFG\nABCDEFG&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ABCDEFG\n&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ABCDEFG\n&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I do believe that is something releated to the size of the buffer here:&lt;/p&gt;
&lt;p&gt;&amp;quot;NRF_LIBUARTE_ASYNC_DEFINE(libuarte, 0, 3, 0, 4, 75, 3);&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;But, if I try with the experimental_libuarte it works perfectly. In that example I modified few rows that I report here:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;MAIN experimental_libuarte:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;pre class="ui-code" data-mode="text"&gt;voiduart_event_handler(void * context, nrf_libuarte_async_evt_t * p_evt)
{
nrf_libuarte_async_t * p_libuarte = (nrf_libuarte_async_t *)context;

ret_code_t ret;

switch (p_evt-&amp;gt;type)
    {
case NRF_LIBUARTE_ASYNC_EVT_ERROR:
bsp_board_led_invert(0);
break;
case NRF_LIBUARTE_ASYNC_EVT_RX_DATA:
bsp_board_led_invert(1);
ret = nrf_libuarte_async_tx(p_libuarte, p_evt-&amp;gt;data.rxtx.p_data, p_evt-&amp;gt;data.rxtx.length);
nrf_libuarte_async_rx_free(p_libuarte, p_evt-&amp;gt;data.rxtx.p_data, p_evt-&amp;gt;data.rxtx.length);
break;
case NRF_LIBUARTE_ASYNC_EVT_TX_DONE:
bsp_board_led_invert(2);
break;
default:
break;
    }
}
&lt;/pre&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;This works perfectly.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;What am I doing wrong?&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Am I missing something?&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;To be honest, I didn&amp;#39;t understand how the buffer (DMA size etc) works. Can you help me?&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;For instance, I would like the characters to be stored in the DMA buffer (which I don&amp;#39;t know how to access), and an interrupt to be triggered only when the buffer is filled. Once that the interrupt happens the program goes into the event handler routine in the main and I print the buffer.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;- Another thing is that with the ble_app_uart that I modified, the board works just in debug. If I just flash it in Release or Debug and then I try to use, it does not work.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;-The experimental_libuarte&amp;nbsp;that you released in SDK15.3 in &amp;quot;DEBUG&amp;quot; mode goes directly to NRF_BREAKPOINT_COND, in Release no.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Thanks&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: LIBUARTE on ble_app_uart with DMA</title><link>https://devzone.nordicsemi.com/thread/189953?ContentTypeID=1</link><pubDate>Wed, 29 May 2019 15:09:22 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:cff0b162-3ccb-438c-86b0-2dcfb0e651c5</guid><dc:creator>Bar1</dc:creator><description>&lt;p&gt;Sorted..... :)&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: LIBUARTE on ble_app_uart with DMA</title><link>https://devzone.nordicsemi.com/thread/189915?ContentTypeID=1</link><pubDate>Wed, 29 May 2019 13:57:52 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:8bf54e0f-cdaf-40df-88e9-3ce62cab0034</guid><dc:creator>Bar1</dc:creator><description>&lt;p&gt;Hello&lt;/p&gt;
&lt;p&gt;I got errors in build solution, but I do not how I can solve them.&lt;/p&gt;
&lt;p&gt;&lt;img alt=" " src="https://devzone.nordicsemi.com/resized-image/__size/320x240/__key/communityserver-discussions-components-files/4/2772.ERRORS.PNG" /&gt;&lt;/p&gt;
&lt;p&gt;I&amp;#39;ve just imported the libraries and drivers missing (nrfx_PPI, nrf_rtc, nrf_timer, libuarte, libuarte_async) and then I enabled some stuff (following Libuarte experiment) in sdk_config.&lt;/p&gt;
&lt;p&gt;What those errors can be?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: LIBUARTE on ble_app_uart with DMA</title><link>https://devzone.nordicsemi.com/thread/189774?ContentTypeID=1</link><pubDate>Wed, 29 May 2019 07:39:05 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:d97ee88b-f7bf-495c-b042-117578513795</guid><dc:creator>Simonr</dc:creator><description>&lt;p&gt;Hello&lt;/p&gt;
&lt;p&gt;I don&amp;#39;t know what exactly to assist you with here, as you will just have to work through these errors until you have the libuarte configured correctly. If you get stuck on anything specific, I will, of course, help you out, but this process is something you will have to go through and fix yourself.&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Simon&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: LIBUARTE on ble_app_uart with DMA</title><link>https://devzone.nordicsemi.com/thread/189694?ContentTypeID=1</link><pubDate>Tue, 28 May 2019 15:21:48 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:8734f0a8-1e05-41d2-a3ba-1bed2741e2e3</guid><dc:creator>Bar1</dc:creator><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;I modified the experiment_libuarte for my needs, but when I try to import it in the ble_app_uart I have many many many problems that really I do not know to figure them out. I tried to import the libraries like &amp;quot;nrf_libuarte.h&amp;quot;,&amp;nbsp;&lt;span&gt;&amp;quot;nrf_libuarte.c&amp;quot;,&amp;nbsp;&amp;quot;nrf_libuarte_async.h&amp;quot;.....&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;I tried to modify something in sdk_config of ble_app_uart&amp;nbsp; following the setup of sdk_config in experimental_libuarte.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;In the main of ble_app_uart I removed the previous &amp;quot;uart_event_handle&amp;quot; and replaced it with the one that is in&amp;nbsp;experimental_libuarte (a bit changed for my needs) and then send everything using&amp;nbsp;ble_nus_data_send.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;When I try to build the solution, FOR THE MOMENT, I get these 2 errors:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;-&amp;nbsp;static assertion failed: &amp;quot;Timer instance not enabled&amp;quot;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;-&amp;nbsp;&amp;#39;NRFX_TIMER0_INST_IDX&amp;#39; undeclared here (not in a function); did you mean &amp;#39;NRFX_TIMER_INSTANCE&amp;#39;?&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;but I&amp;#39; m sure that I&amp;#39;ll get something else going forward.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: LIBUARTE on ble_app_uart with DMA</title><link>https://devzone.nordicsemi.com/thread/188979?ContentTypeID=1</link><pubDate>Fri, 24 May 2019 08:39:29 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:c536eac5-cdf7-4106-890b-c23167c01893</guid><dc:creator>Simonr</dc:creator><description>&lt;p&gt;Hi&lt;/p&gt;
&lt;p&gt;This shouldn&amp;#39;t be too hard to accomplish. I suggest you start out with the ble_app_uart example, and implement/replace the UART/UARTE functions with the experimental_libuarte example functions. &lt;a href="https://devzone.nordicsemi.com/f/nordic-q-a/41215/general-libuarte-questions"&gt;This post&lt;/a&gt; is very thorough on the matter of LIBUARTE if anything is unclear, and has a few tips on what to stay alert on when using the peripheral, so I suggest a read through there as you go along.&lt;/p&gt;
&lt;p&gt;For example, be aware that LIBUARTE requires NRFX_PRS_BOX_4 to be disabled for the UARTE0 peripheral since it needs to use its own LIBUARTE UARTE0_UART0_IRQHandler, as it is not fully integrated in the SDK yet.&lt;/p&gt;
&lt;p&gt;Now, we don&amp;#39;t have a finished example where LIBUARTE is integrated in the ble_app_uart example, so you will have to do this yourself, or if you&amp;#39;re lucky, someone on the forum has already made something similar and are willing to share.&lt;/p&gt;
&lt;p&gt;Best of luck and regards,&lt;/p&gt;
&lt;p&gt;Simon&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>