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);
}
}