哈喽大家好,这是该系列博文的第一篇~ 篇~
<<【系列博文索引】快速通道 >>
上一篇我们知道了如何安装电脑USB驱动,方便后续的调试和烧录。这一篇我们就来打通串口的调试吧,(当然通过MDE里面的pydbg调试也是可以的)串口除了可以用于调试,也可以用于串口外设的通信。
一、前言
犹记得,在使用CSR/QCC3000系列研发产品的时候,通过配置IDE的属性,可实现在线调试,方便又实用。但是到了QCC512x/302x系列,这种方式并没有被沿用,而是采用了fw_live_log,实际测试发现新的方式不太稳定,特别log比较多的时候。
二、灵活运用
考虑到QCC3020/512x系列是由CSR系列升级而来,代码沿用度比较高,那能不能将之前实现过的UART通信移植过来用呢?答案应该是可以的。
三、实践出真知
天马行空的想象,不如动手实践——说干就干:
1、新建app_uart.h,如下
#ifndef __APP_UART_H__
#define __APP_UART_H__
#include <message.h>
typedef struct
{
TaskData task
;
Task client
;
Sink uart_sink
;
unsigned uart_src_need_drop
:1;
uint8
* pUartSrcStart
;
uint8
* pUartSrcEnd
;
uint16 send_packet_length
;
}UARTStreamTaskData
;
extern UARTStreamTaskData theUARTTask
;
Sink
UartInit(Task task
);
bool
UartSendData(uint8
*data
, uint16 size
);
void app_uart_handler(Task t
, MessageId id
, Message msg
);
void my_UartInit(Task client
);
#endif
2、新建app_uart.c,如下
#include <message.h>
#include <pio.h>
#include "sink_events.h"
#include "sink_config.h"
#include "sink_configmanager.h"
#include "sink_a2dp.h"
#include "app_uart.h"
#include "sink_debug.h"
UARTStreamTaskData theUARTTask
;
static Sink sUartSink
= 0;
void app_uart_handler(Task t
, MessageId id
, Message payload
)
{
UNUSED(t
);
UNUSED(payload
);
switch(id
)
{
case MESSAGE_MORE_DATA
:
{
}
break;
default:
break;
}
}
Sink
UartInit(Task task
)
{
sUartSink
= StreamUartSink();
if(!sUartSink
)
return 0;
PanicFalse(SinkConfigure(sUartSink
, VM_SINK_MESSAGES
, VM_MESSAGES_NONE
));
StreamConfigure(VM_STREAM_UART_CONFIG
, VM_STREAM_UART_LATENCY
);
StreamUartConfigure(VM_UART_RATE_115K2
, VM_UART_STOP_ONE
, VM_UART_PARITY_NONE
);
MessageStreamTaskFromSink(StreamUartSink(),task
);
return sUartSink
;
}
bool UartSendData(uint8
*data
, uint16 size
)
{
if(!sUartSink
)
{
return FALSE
;
}
if (!data
|| size
== 0)
{
return FALSE
;
}
if(SinkClaim(sUartSink
, size
) != 0xFFFF)
{
memmove(SinkMap(sUartSink
), data
, size
);
(void) PanicZero(SinkFlush(sUartSink
, size
));
return TRUE
;
}
return FALSE
;
}
void AppUartInit(Task client
)
{
theUARTTask
.task
.handler
= app_uart_handler
;
theUARTTask
.client
= client
;
theUARTTask
.uart_sink
= UartInit(&theUARTTask
.task
);
printVmLogsInTestSystem("uartinit\r\n");
}
3、使用配置工具设置两个IO口为串口,比如我选的是PIO60和PIO61,同时勾选PIO Mapping Assignments
4、修改Subsys7_config3.htf,使用#注释掉IIC的配置,如果有IO口冲突。
四、重点来了
1、修改main.c文件中的一行代码
注释掉改为下面这样:
UartSendData((uint8
*)print_buffer
, strlen(print_buffer
));
2、在main函数中调用AppUartInit(&theSink.task);
欧拉——编译测试一下吧。。。