This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

EasyDMA not working

Hi,

I am trying to use EasyDMA. Is it preferable to use with ...\peripheral\uart or ...\peripheral\serial. With ...\peripheral\uart there are lot of errors. I tried with ...\peripheral\serial and following is my code. But it does not seem to work.

/**
 * Copyright (c) 2016 - 2018, Nordic Semiconductor ASA
 *
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification,
 * are permitted provided that the following conditions are met:
 *
 * 1. Redistributions of source code must retain the above copyright notice, this
 *    list of conditions and the following disclaimer.
 *
 * 2. Redistributions in binary form, except as embedded into a Nordic
 *    Semiconductor ASA integrated circuit in a product or a software update for
 *    such product, must reproduce the above copyright notice, this list of
 *    conditions and the following disclaimer in the documentation and/or other
 *    materials provided with the distribution.
 *
 * 3. Neither the name of Nordic Semiconductor ASA nor the names of its
 *    contributors may be used to endorse or promote products derived from this
 *    software without specific prior written permission.
 *
 * 4. This software, with or without modification, must only be used with a
 *    Nordic Semiconductor ASA integrated circuit.
 *
 * 5. Any software provided in binary form under this license must not be reverse
 *    engineered, decompiled, modified and/or disassembled.
 *
 * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
 * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 */
#include <stdint.h>
#include <stdbool.h>
#include <stddef.h>

#include "nrf.h"
#include "nrf_drv_clock.h"
#include "nrf_gpio.h"
#include "nrf_delay.h"
#include "nrf_log.h"
#include "nrf_log_ctrl.h"
#include "nrf_drv_power.h"
#include "nrf_serial.h"
#include "app_timer.h"

#include "app_error.h"
#include "app_util.h"
#include "boards.h"

#include "nrf_drv_uart.h" //NEW

/** @file
 * @defgroup nrf_serial_example main.c
 * @{
 * @ingroup nrf_serial_example
 * @brief Example of @ref nrf_serial usage. Simple loopback.
 *
 */

//NEW
#ifdef NRF52
#define UART0_USE_EASY_DMA        false
#define UART_EASY_DMA_SUPPORT     1
#define UART_LEGACY_SUPPORT       1
#endif //NRF52

#define OP_QUEUES_SIZE          3
#define APP_TIMER_PRESCALER     NRF_SERIAL_APP_TIMER_PRESCALER

const nrf_drv_uart_t temp = NRF_DRV_UART_INSTANCE(0);

uint8_t *data_RX;
const uint8_t *data_TX;
void uart_handler(nrf_drv_uart_event_t * p_event, void * p_context)
{
    switch(p_event->type)
    {
        case NRF_DRV_UART_EVT_RX_DONE:
		//	APP_ERROR_CHECK(nrf_drv_uart_tx(tx_data, LENGHT_TX));
			APP_ERROR_CHECK(nrf_drv_uart_tx(&temp, data_TX, 1));
        //Here i get the sensor data and do some short modification whit it
        break;
		
		case NRF_DRV_UART_EVT_TX_DONE:
		//		APP_ERROR_CHECK(nrf_drv_uart_rx((uint8_t *)rx_data, LENGHT_RX));
			APP_ERROR_CHECK(nrf_drv_uart_rx(&temp, data_RX, 1));
		break;
			
		case NRF_DRV_UART_EVT_ERROR:  	
			APP_ERROR_HANDLER(p_event->data.error.error_mask);	
		break;
			
		default:
		break;
    }
}

//nrf_drv_uart_t uart_driver_instance = NRF_DRV_UART_INSTANCE(UART0_INSTANCE_INDEX);
//ret_code = nrf_drv_uart_init(&uart_driver_instance, NULL, NULL);
//nrf_drv_uart_rx_enable(&uart_driver_instance);//UART RX is enabled
//nrf_drv_uart_rx(&uart_driver_instance, buffer, 2);//UART RX is still enabled.
//nrf_drv_uart_rx_disable(&uart_driver_instance);

void uart_config(void)
{       
    nrf_drv_uart_config_t config;
    config.pselrxd = 12;//UART_RX;
    config.pseltxd = 11;////UART_TX;
    config.pselrts = NULL;//RTS_PIN_NUMBER;
    config.pselcts = NULL;//CTS_PIN_NUMBER;
    config.baudrate = NRF_UART_BAUDRATE_115200;
    config.hwfc = NRF_UART_HWFC_DISABLED;
    config.parity = NRF_UART_PARITY_EXCLUDED;
    config.interrupt_priority = APP_IRQ_PRIORITY_LOWEST;
    config.p_context = NULL;
    config.use_easy_dma = true;
    //APP_ERROR_CHECK(nrf_drv_uart_init(&config, NULL, uart_handler));
	APP_ERROR_CHECK(nrf_drv_uart_init(&temp, &config, uart_handler));
}

//static void sleep_handler(void)
//{
//    __WFE();
//    __SEV();
//    __WFE();
//}

//NRF_SERIAL_DRV_UART_CONFIG_DEF(m_uart0_drv_config,
//                      12,11,//RX_PIN_NUMBER, TX_PIN_NUMBER,
//                      NULL, NULL,/* RTS_PIN_NUMBER, CTS_PIN_NUMBER,*/
//                      NRF_UART_HWFC_DISABLED, NRF_UART_PARITY_EXCLUDED,
//                      NRF_UART_BAUDRATE_460800,
//                      UART_DEFAULT_CONFIG_IRQ_PRIORITY);

//#define SERIAL_FIFO_TX_SIZE 32
//#define SERIAL_FIFO_RX_SIZE 32

//NRF_SERIAL_QUEUES_DEF(serial_queues, SERIAL_FIFO_TX_SIZE, SERIAL_FIFO_RX_SIZE);

//#define SERIAL_BUFF_TX_SIZE 1
//#define SERIAL_BUFF_RX_SIZE 1

//NRF_SERIAL_BUFFERS_DEF(serial_buffs, SERIAL_BUFF_TX_SIZE, SERIAL_BUFF_RX_SIZE);

//NRF_SERIAL_CONFIG_DEF(serial_config, NRF_SERIAL_MODE_IRQ, &serial_queues, &serial_buffs, NULL, sleep_handler);

//NRF_SERIAL_UART_DEF(serial_uart, 0);

//static void serial_event_handler(struct nrf_serial_s const *p_serial, nrf_serial_event_t event)
//{
//	if(event == NRF_SERIAL_EVENT_TX_DONE)//NRF_SERIAL_EVENT_RX_DATA)
//	{
//		char c;
//		APP_ERROR_CHECK(nrf_serial_read(&serial_uart, &c, sizeof(c), NULL, 1000));
//		APP_ERROR_CHECK(nrf_serial_write(&serial_uart, "a", sizeof(c), NULL, 0));
//	}
//}
int main(void)
{
//    ret_code_t ret;

//    ret = nrf_drv_clock_init();
//    APP_ERROR_CHECK(ret);
//    ret = nrf_drv_power_init(NULL);
//    APP_ERROR_CHECK(ret);

//    nrf_drv_clock_lfclk_request(NULL);
//    ret = app_timer_init();
//    APP_ERROR_CHECK(ret);

//    // Initialize LEDs and buttons.
//    bsp_board_init(BSP_INIT_LEDS | BSP_INIT_BUTTONS);

//    ret = nrf_serial_init(&serial_uart, &m_uart0_drv_config, &serial_config);
//    APP_ERROR_CHECK(ret);

//    static char tx_message[] = "Hello nrf_serial!\n\r";

//    ret = nrf_serial_write(&serial_uart, tx_message, strlen(tx_message), NULL, NRF_SERIAL_MAX_TIMEOUT);
//    APP_ERROR_CHECK(ret);

	uart_config();
	printf("\r\nUART example started.\r\n");
    while (true)
    {
//        char c;
//        ret = nrf_serial_read(&serial_uart, &c, sizeof(c), NULL, 1000);
//        if (ret != NRF_SUCCESS)
//        {
////			bsp_board_led_invert(2);
////            nrf_delay_ms(1000);
//            continue;
//        }
//		if (c == 'q' || c == 'Q')
//        {
//			(void)nrf_serial_write(&serial_uart, "a", sizeof(c), NULL, 0);
//        }        
//        (void)nrf_serial_flush(&serial_uart, 0);
    }
}

Parents Reply Children
Related