XMOS中的Hello World程序编写以及程序的烧写
1、关于如何安装xTIMEcomposer软件,请去参考下面这篇经验,软件安装后会自动安装好xTAG仿真器的驱动
3如何在64位Win7系统上安装运行xTIMEcomposer
2、1. 新建一个xTIMEcomposer项目,名字:1_GPIO
2. 点选Show devices in target selection,然后从下拉列表框中选择要使用的XMOS器件型号,这里选择XU208-256-QF48-C10
3、下面开始针对该器件做一些简单的项目配置
1. 双击打开XU208-256-QF48-C10.xn文件,这个文件是一个XML格式的器件配置文件,由它会自动导出platform.h这个头文件,用户编程只需要引入这个头文件即可,不用关心底层器件的具体型号
2. XML文件的开头<Network>标签的属性中是一些命名空间的声明,不用修改
3. 往下<Type>标签声明这是个器件Device,器件名字在<Name>中指名
4. <Declarations>标签中证明了两项,分别是关于两个tile资源的声明,一个是XCore,另一个是usb相关的物理层资源,其中USB资源是U系列的XMOS专有的,因此这里不用修改
5. 往下,一个<package>选项卡对应于一片芯片,当前使用的这块芯片中,主要包含两个节点<Node>和一个<Link>,他们针对芯片内部的关键资源,两个Node,一个是XCore,另一个是USB的物理层。一个Link特指芯片内部的xCONNECT模块,通过这个模块可以级联多个XMOS芯片,以实现更多的逻辑核并发工作
6. 每个<Node>都会有一个id号,从0开始,Type表征这个Node的类型,比如Node0就是一个XS2-L8A-256的XCore,Node1就是一个periph:XS1-SU的USB外设
7. 这里需要为Node0指定启动设备
<Boot>
<Source Location="bootFlash" />
</Boot>
8. 并且需要在Tile标签下,声明SPI Flash的引脚具体使用了哪些
<Tile Number="0" Reference="tile[0]">
<!-- SPI Ports -->
<Port Location="XS1_PORT_1A" Name="PORT_SPI_MISO" />
<Port Location="XS1_PORT_1B" Name="PORT_SPI_SS" />
<Port Location="XS1_PORT_1C" Name="PORT_SPI_CLK" />
<Port Location="XS1_PORT_1D" Name="PORT_SPI_MOSI" />
</Tile>
9. 在JTAGChain便签之上,增加一项ExternalDevices,用来声明SPI Flash设备
<ExternalDevices>
<Device NodeId="0" Tile="0" Class="SPIFlash" Name="bootFlash">
<Attribute Name="PORT_SPI_MISO" Value="PORT_SPI_MISO" />
<Attribute Name="PORT_SPI_SS" Value="PORT_SPI_SS" />
<Attribute Name="PORT_SPI_CLK" Value="PORT_SPI_CLK" />
<Attribute Name="PORT_SPI_MOSI" Value="PORT_SPI_MOSI" />
</Device>
</ExternalDevices>
4、双击打开Makefile,这里的Makefile是以图形界面的形式供用户添加配置的,非常友好
1. Target选项用来选择具体使用的芯片型号
2. App Name是本工程的名字
3. Used Modules是需要引用的外部IP核,IP可以是官方提供的,也可以是自己编写的,可以理解为库
4. 往下都是针对一些编译常见的选项配置,比如gcc的flag,Include的路径,Library的路径等
5. 本次工程不需要对其做任何修改
5、开始编写一个简单的LED闪烁实验,打开1_GPIO.xc文件,加入以下内容,可以看到这里导入了之前提到的platform.h头文件:
#include <timer.h>
#include <platform.h>
port p = XS1_PORT_1L;
int main() {
while (1) {
p <: 0;
delay_milliseconds(200);
p <: 1;
delay_milliseconds(200);
}
return 0;
}
6、点击工具栏上的锤子按钮,开始编译,编译成功后会在bin目录下生成1_GPIO.xe文件
7、连接好xTAG和开发板,点击工具栏的运行按钮,会将程序烧写进芯片的RAM中直接运行,可以在示波器上看到,XS1_PORT_1L对应的引脚上产生一个2.5Hz的方波,即周期为400ms,这与我们程序中的内容一致
8、如果要将程序烧写到外置的SPI Flash中,需要在烧写的时候指定一个SPI Flash的具体配置文件。
1. 在工程中新建一个名为MX25L3235E的配置文件,在里面添加如下配置内容:
10, /* 1. libflash device ID */
256, /* 2. Page size */
16384, /* 3. Number of pages */
3, /* 4. Address size */
8, /* 5. Clock divider */
0x9f, /* 6. RDID cmd */
0, /* 7. RDID dummy bytes */
3, /* 8. RDID data size in bytes */
0xc22016, /* 9. RDID manufacturer ID */
0x20, /* 10. SE cmd */
0, /* 11. SE full sector erase */
0x06, /* 12. WREN cmd */
0x04, /* 13. WRDI cmd */
PROT_TYPE_SR, /* 14. Protection type */
{{0x1c,0x0},{0,0}}, /* 15. SR protect and unprotect cmds */
0x02, /* 16. PP cmd */
0x0b, /* 17. READ cmd */
1, /* 18. READ dummy bytes*/
SECTOR_LAYOUT_REGULAR, /* 19. Sector layout */
{4096,{0,{0}}}, /* 20. Sector sizes */
0x05, /* 21. RDSR cmd*/
0x01, /* 22. WRSR cmd */
0x01, /* 23. WIP bit mask */
2. 主要根据具体使用的SPI Flash芯片,查阅datasheet,按照格式填写好几个参数,比如页的大小(256字节),总共多少页,发送的地址最多是多少字节(3个字节),时钟需要几分频,RDID,SE,WREN,WRDI,PP,READ,RDSR,WRSR等命令具体是多少,这些都要仔细翻阅datasheet才能填写上去,不同的SPI Flash都会有所不同(至少厂家,容量会有区别)
3. 这个没有捷径,只能自己编写
9、点击工具栏上的闪电按钮,配置烧写选项,选择好刚才编写的SPI Flash配置文件,然后点击Flash,开始烧写,烧写结束后会显示结果