本篇目的
后面开始说XMOS的程序开发-xc语言。
开发环境
- 硬件平台使用官方评估板"xCORE VOCAL FUSION XP-VF3100-BASE"
- IDE开发环境win10 下的 xTIMEcomposer
新建工程
XVF3100评估板新建工程遇到的麻烦
如果用的是普通的XMOS开发板,那么这段可以忽略。因为对普通XMOS开发板来说,不存在这个问题。
自己觉得直接从评估板的SDK源码包熟悉xc语言,难度较大,因为SDK源码比较复杂。我的想法是新建一个工程,从经典的hello world程序熟悉起来比较容易。然而这个板子对应的资料没有新建工程的教程,自己试着新建工程,Target Hardware 选项中没有找到对应板子的选项。曾经问过原厂的技术支持这个评估板怎么新建工程,自己写简单程序熟悉XMOS的开发?得到的答复是不可行,要另外购买普通的XMOS开发板才行。之后自己阅读文档的时候,得到了启发,找到了这个评估板新建工程的方法。
评估板有一段话
Developers who wish to use their own microphone and acoustic DSP libraries
should use the xCORE Microphone Array board5 based on a fully featured two-tile
xCORE-200 XUF216-512-TQ128 device.
这说明可能可以选择XUF216-512-TQ128 device来新建工程,并写出自己的Hello world程序。我又找来了XUF216-512-TQ128 的数据手册,和XVF3100的数据手册做对比,感觉硬件资源是一样的,越来越觉得可行,于是就有了下面的尝试,结果是成功的。
建立自己的新工程
File -> new -> xTIMEcomposer Project,输入工程名称mytest。Target Hardware按下图设置
Finish之后,建立了新工程,还需要做硬件的配置,配置是在xn文件中的,在IDE中可以查看到这个文件,如图
所用的tile和core,时钟频率,GPIO都在里面做配置,每一项都需要通过查原理图和芯片手册去配置,还是比较麻烦的。
还有可以借鉴官方的评估板的SDK工程,工程中有已经配置好的xn文件。于是用SDK工程中的xn文件,和新建工程的xn文件,两者用比较器对比,如果看过本系列第一节的硬件资源介绍的内容,配置文件一看就了解了。(先关闭mytest工程,修改完xn文件后再打开mytest工程,工程就能认识xn的配置了。一开始我没有关闭,发现修改文件后,在IDE中点开xn文件是不认识配置的)
摘一段xn文件看看里面的内容
<Tile Number="0" Reference="tile[0]"> <Port Location="XS1_PORT_1B" Name="PORT_SQI_CS"/> <Port Location="XS1_PORT_1C" Name="PORT_SQI_SCLK"/> <Port Location="XS1_PORT_4B" Name="PORT_SQI_SIO"/> <!-- Mic related ports --> <Port Location="XS1_PORT_1E" Name="PORT_PDM_CLK"/> <Port Location="XS1_PORT_8B" Name="PORT_PDM_DATA"/> <Port Location="XS1_PORT_1F" Name="PORT_PDM_MCLK"/> <!-- LED ports --> <Port Location="XS1_PORT_8C" Name="PORT_LED0_TO_7"/> <Port Location="XS1_PORT_1K" Name="PORT_LED8"/> <Port Location="XS1_PORT_1L" Name="PORT_LED9"/> <Port Location="XS1_PORT_8D" Name="PORT_LED10_TO_12"/> <!-- Button ports --> <Port Location="XS1_PORT_4A" Name="PORT_BUT_A_TO_D"/> <!-- I2C slave --> <Port Location="XS1_PORT_1I" Name="PORT_I2C_SDA"/> <Port Location="XS1_PORT_1J" Name="PORT_I2C_SCL"/> <!-- SPI --> <Port Location="XS1_PORT_1G" Name="PORT_SPI_CLK"/> <Port Location="XS1_PORT_1H" Name="PORT_SPI_SS"/> <Port Location="XS1_PORT_1I" Name="PORT_SPI_MISO"/> <Port Location="XS1_PORT_1J" Name="PORT_SPI_MOSI"/> <!-- Expansion header ports --> <Port Location="XS1_PORT_1G" Name="PORT_EXPANSION_1"/> <Port Location="XS1_PORT_1H" Name="PORT_EXPANSION_3"/> <Port Location="XS1_PORT_1A" Name="PORT_EXPANSION_5"/> <Port Location="XS1_PORT_1D" Name="PORT_EXPANSION_7"/> <Port Location="XS1_PORT_1I" Name="PORT_EXPANSION_9"/> <Port Location="XS1_PORT_1P" Name="PORT_EXPANSION_10"/> <Port Location="XS1_PORT_1J" Name="PORT_EXPANSION_12"/> </Tile>
摘选的一段是tile0那一片的Port配置,Port Location中的名称和本系列第一节说的硬件资源的GPIO pin是一致的,还有别的硬件资源,也在xn文件中做了配置,因此必须知道硬件资源的使用情况,才能正确配置。
配置xn文件后,工程会自动产生platform.h文件,写程序如果要访问硬件资源,自然要include这个头文件。
到此新工程建立完成了。
如果建立工程的时候,勾选了“Create Empty xC File”,那么工程的src文件夹中,会产生一个空的mytest.xc文件。
Hello World 程序
xc语言是c语言的扩展语言。先按照c语言的方法写hello world试试。
修改mytest.xc,如下:
#include <stdio.h>
#include <platform.h>
int main () {
printf("Hello World\n");
return 0;
}
按照上一篇说的编译,配置好运行配置,运行,看到了Hello World的打印。如下图
评估板的软件开发环境就算搭好了,后面就可以在上面学习xc语言的编程了。可以建立新工程,从简单的程序起学习XMOS的软件开发了。
后续这系列的文章,都用简单的小程序去说明XMOS的并发多任务,任务间通讯,GPIO的输入输出,定时器,I2C操作等不同于一般的C语言的知识,并在评估板上实现效果。