本文档主要讲解SDK中uart例子,首先找到SDK中的uartio工程:
打开后,我们先看开发工具界面左侧的文件:
Byte_queue.c—主要处理一些数据buffer,纯C语音代码,与UART操作无直接关系,本文不做过多说明;
Main.c—主函数;
Uartio.c—包含UART操作函数。
首先,我们打开main.c文件,第一个函数void AppPowerOnReset(void),函数体为空,跟我们之前讲到的一样,一般此函数都为空;
第二个函数:
其中SleepModeChage将sleep_mode设置为never,如果芯片进入sleep,则可能会丢失部分UART收到的数据,所以,将其设置为永不休眠;当然,这样会导致芯片功耗上升,在一些低功耗应用场合,我们可以通过其他手段来即保证平时的低功耗,又保证能正确接受到数据,比如可以增加唤醒IO。
接下去的函数Start(),直接配置UART并结束AppInit函数。
Start()函数在uartio.c文件中,为了方便说明,这里把说明写在代码中:
void Start(sleep_state last_sleep_state)
{
//初始化UART,第一个和第二个参数是设置callback函数的,函数名称可以自己定义,每当收到或发送对应数量字节后会调用此callback函数;
//rx_buff、tx_buff为存放数据的缓存,RX_BUFF_SIZE、TX_BUFF_SIZE为buff长度
// uart_data_unpacked为数据不打包,一般都设置为此方式。
UartInit(uartRxDataCallback,
uartTxDataCallback,
rx_buffer, RX_BUFFER_SIZE,
tx_buffer, TX_BUFFER_SIZE,
uart_data_unpacked);
//使能Uart
UartEnable(TRUE);
//设置UART收到1byte就自动触发Callback函数
UartRead(1, 0);
//发送Clear screen命令,此命令为PC软件端,对于CSR1010来说只是一个普通的字符,具体可以查看vt100ClearScreen函数是怎么写的
vt100ClearScreen();
//同样,此函数也只是打印一个sleep状态信息,对于芯片来说就是一个字符串
printSleepState(last_sleep_state);
const uint8 message[] = “\r\nType something: “;
//将发送数据添加到队列中
BQForceQueueBytes(message, sizeof(message)/sizeof(uint8));
//此函数将Quenue中的数据拿出来放到Uart缓存中发送
sendPendingData();
}
上面提到的sendPendingData函数中,有一个函数我们需要看一下:
UartWrite很好理解,就是将要发送的数据写入底层,写入正确返回TRUE。
在UART操作中,另外两个重要的函数如下:
uartRxDataCallback和uartTxDataCallback函数就是前面我们设置的Callback函数,关于在整个代码中的作用,代码的注释写非常清楚了,用户可以在这两个函数中增加自己的代码。
另外,关于UART的API函数,可以查看API的说明文档:
其中UartConfig可以设置UART的速率,以及一些其他参数,比如奇偶校验,停止位等等。。。
好了,代码分析就到这,当然,整个工程中还有很多写的不错的地方,特别是Byte_queue.c,用户有空可以研究一下此代码。