Intel® Quark™ D1000 – 按键中断服务程序 (ISR) 示例
本指南涵盖了 Intel® Quark™ D1000 微控制器以及如何使用 Eclipse* IDE 来修改固件中已实现的简单示例。
获取新的 Intel® 物联网开发者套件,这是一个完整的软硬件解决方案,使开发人员能够使用 Intel® Galileo 和 Intel® Edison 开发板创建令人兴奋的新解决方案。请访问 Intel® 物联网开发者中心。
引言
本指南涵盖了 Intel® Quark™ D1000 微控制器以及如何使用 Eclipse* IDE 来修改固件中已实现的简单示例。本指南还演示了如何使用 OpenOCD 检查到 D1000 CRB 的 JTAG 连接,以烧写创建的映像并进行源代码行调试。
编程环境
概述
Intel® Quark™ D1000 由 Intel System Studio for Microcontrollers (ISSM) 支持,该工具包含 C/C++ LLVM - 基于编译器(包括汇编器、链接器和 C/C++ 运行时库)、GDB 调试器和 OpenOCD 片上调试器。它还包括用于 Eclipse IDE 集成的插件,但也可以用作独立工具链。在 ISSM 中打开 FW 项目
在为 Intel® Quark™ D1000 创建项目之前,您应安装所有必需的软件包,例如 Eclipse IDE for C /C++ Developers、ISSM、Putty 和 Zadig,并请详细遵循可在 ISSM 安装目录下的“docs”文件夹中找到的安装指南。本指南还假定您已经完成了 Eclipse IDE 的“Hello World”和“FW”示例的评估。如果没有,请按照 ISSM 安装的“docs”下的用户指南中的“使用 Eclipse* IDE”部分进行操作。
现在,使用参数为您的 Eclipse* IDE 安装路径的批处理脚本 `script(‘runEclipse.bat’)` 启动 Eclipse* IDE,然后您可以选择固件项目,在本指南中,该固件项目的名称为“FW - D1000”,并确保没有构建错误。
成功构建固件后,您可以在项目中的 B inaries 文件夹下查看“FW - D1000.elf”的输出,其内容将与以下屏幕截图类似。如果您看不到带有符号信息的每个映像部分,则需要检查您的主机是否安装了“objdump”实用程序。否则,您可以参考用户指南中“查看 GNU* Elf 和 Map 文件”部分来安装“objdump”并配置主机的路径。
在检查“FW - D1000”的编译后,您可以根据自己的响应修改示例应用程序。在此示例中,我们修改了“FW - D1000”中的“PushButton”应用程序中的日志字符串。转到“FW - D1000”项目下的 Applications 文件夹,该项目包含 10 个 Intel® Quark™ D1000 的示例应用程序,并检查“AppConfig.h”文件以查看启用了哪个应用程序(“PUSH_BUTTON_TEST
”)集成到此项目中。这是在“AppConfig.h”文件中启用“PushButton”应用程序的宏定义。
//#define MAN_DECODING //#define POWER_MANAGEMENT_TEST #define PUSH_BUTTON_TEST //#define ADC2SPI_TEST //#define ADC2GPIO_TEST //#define DDS_TEST //#define OSCILLATOR_RE_TRIM //#define PWM_TESTING //#define MOTOR_CTRL //#define UART_WAKE
接下来,转到 Applications 文件夹下 PushButton 应用程序的应用程序入口文件(“PushButton.c”),并进行简单的修改,以查看您的代码更改是否能在实际硬件平台上正常工作。在此示例中,我们修改了由 RTC 每秒触发的“rtc_interrupt_msg
”字符串。
//////////////////////////////////////////////////////////////////////////////// // this is the real time clock callback function //////////////////////////////////////////////////////////////////////////////// char rtc_interrupt_msg[] = " \ r \ nSean RTC interrupt!" ; void rtc_callback_function_PB ( void ) { PUSH_UART(rtc_interrupt_msg, sizeof (rtc_interrupt_msg),0,0); rtc_callback(rtc_ca llback_function_PB); // re - register callback }
最后,请确保所有更改都已保存并准备好进行编译。编译并烧写映像到 D1000
要将编译后的二进制文件烧写到 D1000 CRB,您需要 JTAG 连接到 CRB,这在用户和参考指南的“开始调试会话”部分中有详细描述。当您尝试在 Eclipse* IDE 中启动 OpenOCD 视图时,请确保 OpenOCD 成功读取了目标 CPU 的“IdCode”,并且其值与“Expected”IdCode 相同。
在此示例中,我们在运行 Eclipse* IDE 之前先启动 OpenOCD 连接,以建立到 D1000 CRB 的 JTAG 连接。有时,它可能无法读取 IdCode 并显示全零值,然后,按重置按钮再试一次,看看 OpenOCD 是否可以正确读取 IdCode。现在,当您看到如下的 IdCode 结果时,就可以将修改后的固件烧写到 D1000 CRB 了。
当您成功建立到 D1000 CRB 的 JTAG 连接后,请转到 Eclipse* IDE 中的“FW - D1000”项目进行构建。如果没有编译错误,您将在 Binaries 文件夹下看到“FW - D1000.elf”,并且可以通过选择配置为通过 OpenOCD 使用 gdb 的调试视图来烧写构建的映像到 D1000 CRB。请参阅下面的调试配置。
当调试器成功将映像烧写到 D1000 CRB 时,您将在 OpenOCD 控制台上看到完成消息。请参阅图 2。在此示例中,调试器将在“main”函数处暂停执行,以逐行检查执行。下面的图 4 显示了如何在“main”的入口点设置断点,然后调试器将完成映像烧写和加载,并在“main”函数的开头停止处理器,准备开始执行。请参阅图 4。
在此示例中,我们需要使用 Putty 打开串行控制台来检查 UART 消息,以便在 D1000 接收到“RTC”或“ButtonPress”的硬件事件时通过 UART 发送字符。当连接 D1000 CRB 时,有两个 USB 设备已配置,一个是用于 OpenOCD JTAG 连接的 Dual RS232 HS,另一个是 USB 转串行端口。在“PushButton”应用程序自由运行时,我们需要使用 Putty 以以下配置打开串行端口:波特率 - 19200,流控制 - XON/XOFF。
调试代码 – 逐行调试场景
当调试器完成烧写并在“main
”函数的最开始显示起始过程时,如下所示。在此示例中,我们启用了“PushButton”示例,然后调试器将在调用“PushButton
”函数(这是应用程序的主函数)之前等待。您可以检查高级源代码以及显示当前 IP 的每个指令的“反汇编窗口”。现在您可以尝试单步跳过、单步进入、继续。
在这里,我们执行了“单步进入”,然后看到了“PushButton”入口函数的高级源代码,调试器打开“PushButton.c”指向下一个可执行函数。请参阅下面的图 6。
在 D1000 上运行示例
长远来看,我们可以让处理器自由运行,然后您可以看到 D1000 CRB 的启动日志,以及 D1000 接收 RTC 中断时修改的日志。请参阅下面的图 7。
硬件参考
CRB V2 集成了 Intel® Quark™ D1000 微控制器、加速计、SPI 闪存、蓝牙® LE 无线模块、串行到 WiFi 模块、USB 转串行和 JTAG 转换器,以及电源和电池充电电路。下面简要介绍可编程组件。
Intel® Quark™ D1000 微控制器
该控制器包含 24 个 GPIO 引脚,其中许多具有多种功能(请参阅下面的 D1000 引脚连接表)。CRB v2 将所有这些引脚连接到类似 Arduino(但并非完全兼容 Arduino)的接口。需要注意的是,有几个引脚也连接到板载外设,在某些情况下不能用作 GPIO。这些引脚在下面的外设描述中有所说明,包括 D1000 引脚名称、Arduino 引脚名称和 CRB v 2 引脚名称。请注意,SPI 接口用于通过引脚 MST_M2SC(SPI 时钟,Arduino - D13,CRB v2 - XPB5)、MST_M2SD(SPI MOSI,Arduino - D11,CRB v2 - XPB3)、MST_S2MD(SPI MISO,Arduino - D12,CRB v2 - XPB4)与所有板载外设进行通信。
其他硬件组件
CRB v2 包含几个其他组件,这些组件无法从 D1000 端进行编程。这些包括
- FTDI FT2232H 双 USB 转串行和 JTAG 转换器 IC。它用于提供 D1000 的 UART/控制台访问,以及使用 JTAG 接口对 D1000 进行编程和调试。LED D6(黄色)和 D7(绿色)连接到 FTDI FT2232H,并在发送或接收数据时闪烁。
- Linear Technologies LTC4414、Texas Instruments BQ24080 和 Maxim Integrated MAX8869 用于电源和电池充电电路。LED D10 和 D11 连接到 BQ24080 并显示电池充电状态。
Intel® Quark™ D1000 CRB v2 上的引脚连接
引脚 | 引脚名称 | 引脚功能 | 注释 | |||||
D1000 | CRB V2 | Arduino | 功能 0 | 功能 1 | 功能 2 | 功能 3 | ||
1 | AI9/GPIO9 | XPC6 | AI[9] | GPIO[9] | SLV_M2SD | AI[9] | BT/ REQN | |
2 | AI10/GPIO10 | XPC7 | AI[10] | GPIO[10] | SLV_S2MD | AI[10] | ||
3 | AI11/GPIO11 | XPB7 | AI[11] | GPIO[11] | SLV_M2SS | AI[11] | ||
4 | AI12/GPIO12 | XPD1 | D1 | AI[12] | GPIO[12] | TXD[1] | AI[12] | UART1 |
5 | AI13/GPIO13 | XPD0 | D0 | AI[13] | GPIO[13] | RXD[1] | AI[13] | UART1 |
6 | AI14/GPIO14 | XPD2 | D2 | AI[14] | GPIO[14] | RTS[1] | AI[14] | |
7 | AI15/GPIO15 | XPB6 | AI[15] | GPIO[15] | CTS[1] | AI[15] | WiFi/ DATARDY | |
8 | AI16/GPIO16 | XPB5 | D13 | AI[16] | GPIO[16] | MST_M2SC | AI[16] | SPI |
9 | AI17/GPIO17 | XPB3 | D11 | AI[17] | GPIO[17] | MST_M2SD | AI[17] | SPI |
10 | AI18/GPIO18 | XPB4 | D12 | AI[18] | GPIO[18] | MST_S2MD | AI[18] | SPI |
11 | GPIO19 | XPD3 | D3 | - | GPIO[19] | TDO | - | |
12 | GPIO20 | XPD4 | D4 | TXD[0] | GPIO[20] | TRST_N | - | |
13 | AR | |||||||
14 | GPIO21 | XPD5 | D5 | RXD[0] | GPIO[21] | TCK | - | |
15 | GPIO22 | XPD6 | D6 | RTS[0] | GPIO[22] | TMS | - | |
16 | GPIO23 | XPD7 | D7 | CTS[0] | GPIO[23] | TDI | - | |
17 | DVDD | |||||||
18 | SEC | |||||||
19 | XTALI0 | |||||||
20 | XTALO0 | |||||||
21 | TAP_SEL | |||||||
22 | XTALI1 | |||||||
23 | XTALO1 | |||||||
24 | RST_N | |||||||
25 | GNDSENSE | |||||||
26 | LX | |||||||
27 | PVDD | |||||||
28 | VSENSE | |||||||
29 | VREN | |||||||
30 | IO_VDD | |||||||
31 | AI0/GPIO0 | XPB2 | D10 | AI[0] | GPIO[0] | MST_M2SS[0] | AI[0] | WiFi/ SSN |
32 | AI1/GPIO1 | XPB0 | D8 | AI[1] | GPIO[1] | MST_M2SS[1] | AI[1] | |
33 | AI2/GPIO2 | XPB1 | D9 | AI[2] | GPIO[2] | MST_M2SS[2] | AI[2] | 加速度计 |
34 | AI3/GPIO3 | XPC0 | A0 AI[3] | GPIO[3] | MST_M2SS[3] | AI[3] | SPI | Flash |
35 | AI4/GPIO4 | XPC1 | A1 | AI[4] | GPIO[4] | - | AI[4] | |
36 | AI5/GPIO5 | XPC2 | A3 | AI[5] | GPIO[5] | MST_S2M_SS | AI[5] | BT/ RDYN |
37 | AI6/GPIO6 | XPC5 | A5 | AI[6] | GPIO[6] | SCL | AI[6] | |
38 | AI7/GPIO7 | XPC4 | A4 | AI[7] | GPIO[7] | SDA | AI[7] | |
39 | AI8/GPIO8 | XPC3 | A3 | AI[8] | GPIO[8] | SLV_M2SC | AI[8] | |
40 | AVDD | |||||||
PAD | VSS |
Intel® Quark™ D1000 CRB v2 布局
参考
- Intel® System Studio for Microcontrollers 安装指南发行说明:Intel® System Studio for microcontrollers D1000 固件
- Intel® Quark™ D1000 微控制器用户指南
http://www.intel.com/content/dam/www/public/us/en/documents/guides/quark - d1000 - user - guide.pdf - Intel® Quark™ D1000 微控制器数据手册
http://www.intel.com/content/dam/www/public/us/en/documents/datasheets/quark - d1000 - datasheet.pdf