CSR8670 Rx Tx 是怎么传输数据的?
哪位哥哥那边有CSR8670串口相关的材料啊!?麻烦能发我一份吗!?万分感谢!:):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):):) 本帖最后由 xiayelianqu 于 2014-12-3 14:47 编辑
/****************************************************************
初始化串口任务函数
****************************************************************/
void PilAppUARTInit(void)
{
int lSize = sizeof(Uart_TaskData) ;
theSink.UART_Task = mallocPanic(lSize);
memset(theSink.UART_Task, 0, lSize);
theSink.UART_Task->uart_task.handler = uart_handler;
MessageSinkTask(StreamUartSink(),&theSink.UART_Task->uart_task);
StreamUartConfigure(VM_UART_RATE_9K6 ,VM_UART_STOP_ONE,VM_UART_PARITY_NONE);
}
串口发送子函数
****************************************************************/
void uart_send(const char *data, uint16 lenth)
{
Sink uart = StreamUartSink();
if (uart == 0)
{
/*SppTxData(uart_send_data_fail,strlen(uart_send_data_fail));*/
return;
}
if(SinkClaim(uart, lenth) != 0xFFFF)
{
memcpy(SinkMap(uart), data, lenth);
(void) PanicZero(SinkFlush(uart, lenth));
}
}
/****************************************************************
串口任务处理函数
****************************************************************/
void uart_handler(Task task, MessageId id, Message message)
{
switch(id)
{
case SEND_UART_DATA: /*发送 */
{
uart_send(u8SendBuf, 7);
MessageCancelAll(task, SEND_UART_DATA);
}
break;
case MESSAGE_MORE_DATA: /*接收 类似中断*/
{
Source source = StreamUartSource();
uint16 size = SourceSize(source);
uint8* data = (uint8*)SourceMap(source);
uint16 i;
/*DEBUG(("uart received bytes: %d\r\n", size));*/
/* for(i = 0; i < size; i++) DEBUG(("%d\r\n", data));*/
SourceDrop(source, size);
}
break;
default:
break;
}
}另外;
有几处PSK和xide属性也需修改。
在xide平台属性将transport设置为RAW, 再用pstool配置波特、以及host inteface选择vm access to uart
/*********************************************************************************/
PilAppUARTInit放在主函数里就可以了,上电运行。
发送就直接调用uart_send函数,(也可以释放ID号 MessageSend(&theSink.UART_Task->uart_task,SEND_UART_DATA,0); )
收到数据自动进 case MESSAGE_MORE_DATA:
/***********************头文件*****************************************/
sink_private.h 文件hsTaskData结构体里面添加 Uart_TaskData *UART_Task;
/* Sink application data */
typedef struct
{
/* Main task */
TaskData task;
Uart_TaskData *UART_Task; /*添加添加添加添加添加添加添加*/
/* Config variables */
ButtonsTaskData *theButtonsTask;
...
}
/*至少包含如下头文件*/
#include "sink_private.h"
#include <panic.h>
#include <stddef.h>
#include <led.h>
#include <string.h>
#include <stream.h>
#include <message.h>
自定义头文件
typedef struct
{
TaskData uart_task;
}
Uart_TaskData;
enum
{
SEND_UART_DATA
};
不错不错,很给力的说明 xiayelianqu 发表于 2014-12-2 16:57
/****************************************************************
添加串口任务函数
*************** ...
首先谢谢你,我还想问一下这三个函数怎么用,设置好后直接调用这三个函数?包涵那些头文件呢? xiayelianqu 发表于 2014-12-2 16:57
/****************************************************************
初始化串口任务函数
************* ...
C:\Documents and Settings\Administrator\桌面 为什么我这边没有办法选择RAW??????是我弄错地方了?
xiayelianqu 发表于 2014-12-2 16:57
/****************************************************************
初始化串口任务函数
************* ...
麻烦问一下transport如果设置RAW,没有选项给设置! adk2.0上我没有调通,3.5上调试ok.打开编译环境xIDE for xxx,在打开你的工程项目,然后选择project->properties 在里面可以找到transport,设置RAW即可。 xiayelianqu 发表于 2014-12-2 16:57
/****************************************************************
初始化串口任务函数
************* ...
u8SendBuf,
这个变量是哪里定义的,编译报错