.1111 发表于 2020-7-20 11:38:45

qcc302x uart输出


在adk6.4 earbud 工程中 参考csr8675的uart 使用文档,添加了串口的初始化和发送函数,但是发送数据出不来,使用示波器测量输出io,没有波形输出,有没有大佬搞过这个,可以帮忙指点下,下边是实现代码
<div></div><div>
</div>初始化函数:
void uart_and_region_data_stream_init(void)
{
PioCommonSetFunction(60,pin_function_uart_tx);
PioCommonSetFunction(61,pin_function_uart_rx);
PioCommonSetFunction(80,pin_function_uart_rts);
PioCommonSetFunction(80,pin_function_uart_cts);
/* Assign task message handler */
theUARTStreamTask.task.handler = UARTStreamMessageHandler;
//StreamConfigure(VM_STREAM_UART_CONFIG,VM_STREAM_UART_LATENCY);
/* Configure uart settings */
StreamUartConfigure(VM_UART_RATE_115K2, VM_UART_STOP_ONE, VM_UART_PARITY_NONE);
/* Get the sink for the uart */
theUARTStreamTask.uart_sink = StreamUartSink();
PanicNull(theUARTStreamTask.uart_sink);
/* Get the source for the uart */
// theUARTStreamTask.uart_source = StreamUartSource();
// PanicNull(theUARTStreamTask.uart_source);

// PanicFalse(SinkConfigure(theUARTStreamTask.uart_sink,VM_SINK_MESSAGES,VM_MESSAGES_NONE));

/* Register uart source with task */
MessageStreamTaskFromSink( theUARTStreamTask.uart_sink,
theUARTStreamTask.client);
}

发送函数:

void uart_data_stream_tx_data(const uint8 *data, uint16 length)
{
uint16 offset = 0;
uint8 *dest = NULL;
/* Claim space in the sink, getting the offset to it */
offset = SinkClaim(theUARTStreamTask.uart_sink, length);
if(offset == 0xFFFF) Panic();
/* Map the sink into memory space */
dest = SinkMap(theUARTStreamTask.uart_sink);
PanicNull(dest);
/* Copy data into the claimed space */
memcpy(dest, data, length);
/* Flush the data out to the uart */
/*PanicZero*/(SinkFlush(theUARTStreamTask.uart_sink, length));
DEBUG_LOG("send success");
}



basketcase 发表于 2020-7-20 11:38:46

本帖最后由 basketcase 于 2020-9-8 01:01 编辑

给你个参考吧,头文件自己补全就行了。IO随便指定都可以,htf不需要配置

/*! \brief UI task structure */
typedef struct
{
    /*! The UART task */
    TaskData   task;
    /*! The UART task status */
    bool            initialised;
    /*! The UART Source */
    Source      source;
    /*! The UART Sink */
    Sink            sink;
}uartTaskData;



#define BOARD_UART_TX0xa
#define BOARD_UART_RX0xb
#define BOARD_UART_RTS 0x0
#define BOARD_UART_CTS 0x0
void appUartSendToSink(const char *cmd)
{
    uint16 cmd_len = strlen(cmd);
   
    if(uartData.sink && (SinkSlack(uartData.sink)) >= cmd_len)
    {
      /* Claim space in the sink, getting the offset to it. */
      uint16 offset = SinkClaim(uartData.sink, cmd_len);

      /* Check we have a valid offset */
      if (offset != 0xFFFF)
      {
            /* Map the sink into memory space. */
            uint8 *snk = SinkMap(uartData.sink);
            
            if(snk == NULL)
            {
                //DEBUG_LOG("Invalid Sink pointer");
            }
            (void) PanicNull(snk);

            /* Copy the string into the claimed space. */
            memcpy(snk+offset, cmd, cmd_len);
            
            /* Flush the data out to the UART. */
            PanicZero(SinkFlush(uartData.sink, cmd_len));
      }
      else
      {
            //DEBUG_LOG("Invalid sink offset");
      }
    }
    else
    {
      //DEBUG_LOG("Invalid UART Sink or Insufficient space in Sink");
    }
}

/*! UART Message Handler
       Expecting MESSAGE_MORE_DATA for each AT command
*/   
static void appUartHandler(Task task, MessageId id, Message msg)
{
    UNUSED(task);
    UNUSED(msg);
    switch (id)
    {
      case MESSAGE_MORE_DATA:
      {
      }
      break;

      default:
          break;
    }
}

bool appUartInitConnection(void)
{
    /* Assign the appropriate PIOs to be used by UART. */
    bool status = FALSE;
    uint32 bank = 0;
    uint32 mask = (1<<BOARD_UART_RTS) | (1<<BOARD_UART_CTS) | (1<<BOARD_UART_TX) | (1<<BOARD_UART_RX);

    if (!uartData.initialised)
    {
      //DEBUG_LOG("appUartInitConnection start");
      status = PioSetMapPins32Bank(bank, mask, 0);
      PanicNotZero(status);
      
      PioSetFunction(BOARD_UART_RTS, UART_RTS);
      PioSetFunction(BOARD_UART_CTS, UART_CTS);
      PioSetFunction(BOARD_UART_TX, UART_TX);
      PioSetFunction(BOARD_UART_RX, UART_RX);

      StreamUartConfigure(VM_UART_RATE_1382K4, VM_UART_STOP_ONE, VM_UART_PARITY_NONE);

      uartData.sink = StreamUartSink();
      PanicNull(uartData.sink);
      /* Configure the sink such that messages are not received */
      SinkConfigure(uartData.sink, VM_SINK_MESSAGES, VM_MESSAGES_NONE);

      uartData.source = StreamUartSource();
      PanicNull(uartData.source);
      /* Configure the source for getting all the messages */
      SourceConfigure(uartData.source, VM_SOURCE_MESSAGES, VM_MESSAGES_ALL);

      /* Associate the task with the stream source */
      uartData.task.handler = appUartHandler;
      MessageStreamTaskFromSink(StreamSinkFromSource(uartData.source), (Task) &uartData.task);
      //DEBUG_LOG("appUartInitConnection end");

      uartData.initialised=TRUE;
    }
    else
    {
      //DEBUG_LOG("UART Already Initialised");
    }
   
    return uartData.initialised;
}

423165987 发表于 2020-7-20 13:31:03

参考这个试试:
http://www.52bluetooth.com/article-163-1.html

hyz_yongzhi 发表于 2020-7-20 13:53:22

参考这个试试:
https://blog.csdn.net/qq_29225913/article/details/102775806
https://blog.csdn.net/jgw2008/article/details/70312964

.1111 发表于 2020-7-21 10:59:06

btdev 发表于 2020-7-20 13:31
参考这个试试:
http://www.52bluetooth.com/article-163-1.html

这个我也看过了,函数实现基本一致,但是现在串口数据就是出不来,不知道哪里有问题

.1111 发表于 2020-7-21 11:02:45

hyz_yongzhi 发表于 2020-7-20 13:53
参考这个试试:
https://blog.csdn.net/qq_29225913/article/details/102775806
https://blog.csdn.net/j ...

我现在函数实现和那些文档基本类似,编译都没问题,就是数据发不出来,不知道哪里少了某项配置还是,希望有个做过3020串口可以指点下

hyz_yongzhi 发表于 2020-7-21 11:31:52

.1111 发表于 2020-7-21 11:02
我现在函数实现和那些文档基本类似,编译都没问题,就是数据发不出来,不知道哪里少了某项配置还是,希望 ...

IO脚 map了吗

.1111 发表于 2020-7-21 15:25:53

hyz_yongzhi 发表于 2020-7-21 11:31
IO脚 map了吗

我在subsys0_config2.htf文件中使用UartPinsConfig = ,以及在初始化函数中使用
PioCommonSetFunction(60,pin_function_uart_tx);
    PioCommonSetFunction(61,pin_function_uart_rx);
    PioCommonSetFunction(80,pin_function_uart_rts);
    PioCommonSetFunction(80,pin_function_uart_cts);
不知道是不是还差哪个配置

hzbesta 发表于 2020-9-7 16:44:45

搞定没有?后面怎么解决, 我也卡在这里了 ,:L:(

.1111 发表于 2020-9-8 13:55:51

hzbesta 发表于 2020-9-7 16:44
搞定没有?后面怎么解决, 我也卡在这里了 ,

解决了,IO配置 不需要在配置文件配置,在初始化的时候使用
pioSetMapPins32Bank(UART_BANK,UART_MASK,0);
PioCommonSetFunction(pin,pin_function_uart_tx);
这两个函数初始化和映射引脚就没问题
页: [1] 2
查看完整版本: qcc302x uart输出