This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

an issue of current consumption of cc1310 with UART

Other Parts Discussed in Thread: CC1310

Hi,

I got a question about the power management of TI-RTOS of CC1310 UART.

I open the RF core and put it to WOR state. The current consumption is really low. But, i open the UART peripheral , and i just close it immediately. The current stays at 900uA. But if i don't open the UART at all. The current will be under 10uA. Why? Maybe there is a problem with the power management ?

There is my code for the UART.

I just called Uart_close() after the Uart_Init();

Thanks,

Mikel

4744.uart.c
#include "uart.h"

UART_Handle Uart_handle;
uint8_t RX_temp_buff[64];

uint8_t Uart_RX_buffer[UART_RX_RINGBUFFER_SIZE];
uint8_t Uart_TX_buffer[UART_TX_RINGBUFFER_SIZE];

ring_buffer_typedef Uart_RX_ringbuffer;
ring_buffer_typedef Uart_TX_ringbuffer;

bool Uart_RXNE_flag = false;

Swi_Handle Uart_write_swi_handler;

bool Uart_TX_idle_flag = true;
static uint8_t Uart_TX_temp_buffer[64], Uart_TX_length;

void Uart_RX_callback(UART_Handle uart_handler, void *buf, size_t count)
{
  Write_ring_buffer(&Uart_RX_ringbuffer, (uint8_t *)buf, count);
  UART_read(Uart_handle, RX_temp_buff, 64);
  core_PostEvent(CORE_EVENT_UART_RECEIVED);
}
void Uart_TX_callback(UART_Handle uart_handler, void *buf, size_t count)
{
  Uart_TX_idle_flag = true;
  Swi_post(Uart_write_swi_handler);
}
void Uart_write_swi_ISR(UArg a0,UArg a1)
{
  if(!Is_ring_buffer_empty(&Uart_TX_ringbuffer))
  {
    Uart_TX_idle_flag = false;
    Uart_TX_length = Read_ring_buffer(&Uart_TX_ringbuffer, Uart_TX_temp_buffer, 64);
    UART_write(Uart_handle, Uart_TX_temp_buffer, Uart_TX_length);
  }
}
void Uart_Init(void)
{
  UART_Params Uart_params;
  UART_Params_init(&Uart_params);
  
  Uart_params.readMode = UART_MODE_CALLBACK;
  Uart_params.readDataMode = UART_DATA_BINARY;
  Uart_params.readCallback = (UART_Callback)Uart_RX_callback;
  
  Uart_params.writeMode = UART_MODE_CALLBACK;
  Uart_params.writeDataMode = UART_DATA_BINARY;
  Uart_params.writeCallback = (UART_Callback)Uart_TX_callback;
  
  Uart_params.baudRate = 9600;
 
  Uart_handle = UART_open(Board_UART, &Uart_params);
  //Open RX timeout (32-bit period no data)
  if(UART_STATUS_SUCCESS != UART_control(Uart_handle, UARTCC26XX_CMD_RETURN_PARTIAL_ENABLE, NULL))
  {
    while(1);
  }
  if(Uart_handle == NULL)
  {
    while(1);
  }
  Init_ring_buffer(&Uart_RX_ringbuffer, Uart_RX_buffer, UART_RX_RINGBUFFER_SIZE);
  Init_ring_buffer(&Uart_TX_ringbuffer, Uart_TX_buffer, UART_TX_RINGBUFFER_SIZE);
  
  Swi_Params SWI_PARAM;
  Swi_Params_init(&SWI_PARAM);
  SWI_PARAM.arg0 = 1;
  SWI_PARAM.arg1 = 0;
  SWI_PARAM.priority = 1;
  SWI_PARAM.trigger = 0;
  Uart_write_swi_handler = Swi_create(Uart_write_swi_ISR,&SWI_PARAM,NULL);
  
  UART_read(Uart_handle, RX_temp_buff, 64);
}
void Uart_close(void)
{
  UART_readCancel(Uart_handle);
  UART_close(Uart_handle);
}
void Uart_change_baud(uint8_t baud, uint8_t parity)
{
  UART_close(Uart_handle);
  UART_Params Uart_params;
  UART_Params_init(&Uart_params);
  
  Uart_params.readMode = UART_MODE_CALLBACK;
  Uart_params.readDataMode = UART_DATA_BINARY;
  Uart_params.readCallback = (UART_Callback)Uart_RX_callback;
  
  Uart_params.writeMode = UART_MODE_CALLBACK;
  Uart_params.writeDataMode = UART_DATA_BINARY;
  Uart_params.writeCallback = (UART_Callback)Uart_TX_callback;
  switch(baud)
  {
    case 0:
    {
      Uart_params.baudRate = 1200;
      break;
    }
    case 1:
    {
      Uart_params.baudRate = 2400;
      break;
    }
    case 2:
    {
      Uart_params.baudRate = 4800;
      break;
    }
    case 3:
    {
      Uart_params.baudRate = 9600;
      break;
    }
    case 4:
    {
      Uart_params.baudRate = 19200;
      break;
    }
    case 5:
    {
      Uart_params.baudRate = 38400;
      break;
    }
    case 6:
    {
      Uart_params.baudRate = 57600;
      break;
    }
    case 7:
    {
      Uart_params.baudRate = 115200;
      break;
    }
  }
  switch(parity)
  {
    case 0:
    {
      Uart_params.parityType = UART_PAR_NONE;
      break;
    }
    case 1:
    {
      Uart_params.parityType = UART_PAR_EVEN;
      break;
    }
    case 2:
    {
      Uart_params.parityType = UART_PAR_ODD;
      break;
    }
    case 3:
    {
      Uart_params.parityType = UART_PAR_NONE;
      break;
    }
  }
  Uart_handle = UART_open(Board_UART, &Uart_params);
  if(Uart_handle == NULL)
  {
    while(1);
  }
  //Open RX timeout (32-bit period no data)
  if(UART_STATUS_SUCCESS != UART_control(Uart_handle, UARTCC26XX_CMD_RETURN_PARTIAL_ENABLE, NULL))
  {
    while(1);
  }
}
void Uart_Write_data(uint8_t *pBuffer, uint8_t length)
{
  Write_ring_buffer(&Uart_TX_ringbuffer, pBuffer, length);
  if(Uart_TX_idle_flag)
  {
    Uart_TX_idle_flag = false;
    Uart_TX_length = Read_ring_buffer(&Uart_TX_ringbuffer, Uart_TX_temp_buffer, 64);
    UART_write(Uart_handle, Uart_TX_temp_buffer, Uart_TX_length);
  }
}
void Uart_discard_data(void)
{
  Uart_RX_ringbuffer.next_in = Uart_RX_ringbuffer.next_out;
}
0358.uart.h