65.9K
CodeProject 正在变化。 阅读更多。
Home

Intel® Quark™ D1000 – 按键中断服务程序 (ISR) 示例

starIconstarIconstarIconstarIconstarIcon

5.00/5 (1投票)

2015 年 12 月 16 日

CPOL

9分钟阅读

viewsIcon

22278

本指南涵盖了 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”并配置主机的路径。

图 1 FW - D1000 编程示例的对象转储屏幕 – 在硬件事件的 ISR 中发送字符

在检查“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 了。

图 2 D1000 CRB 的 OpenOCD 控制台

当您成功建立到 D1000 CRB 的 JTAG 连接后,请转到 Eclipse* IDE 中的“FW - D1000”项目进行构建。如果没有编译错误,您将在 Binaries 文件夹下看到“FW - D1000.elf”,并且可以通过选择配置为通过 OpenOCD 使用 gdb 的调试视图来烧写构建的映像到 D1000 CRB。请参阅下面的调试配置。

图 3 使用 OpenOCD 对 D1000 CRB 的调试器配置

当调试器成功将映像烧写到 D1000 CRB 时,您将在 OpenOCD 控制台上看到完成消息。请参阅图 2。在此示例中,调试器将在“main”函数处暂停执行,以逐行检查执行。下面的图 4 显示了如何在“main”的入口点设置断点,然后调试器将完成映像烧写和加载,并在“main”函数的开头停止处理器,准备开始执行。请参阅图 4。

图 4 在“main”函数设置断点

在此示例中,我们需要使用 Putty 打开串行控制台来检查 UART 消息,以便在 D1000 接收到“RTC”或“ButtonPress”的硬件事件时通过 UART 发送字符。当连接 D1000 CRB 时,有两个 USB 设备已配置,一个是用于 OpenOCD JTAG 连接的 Dual RS232 HS,另一个是 USB 转串行端口。在“PushButton”应用程序自由运行时,我们需要使用 Putty 以以下配置打开串行端口:波特率 - 19200,流控制 - XON/XOFF。

调试代码 – 逐行调试场景

当调试器完成烧写并在“main”函数的最开始显示起始过程时,如下所示。在此示例中,我们启用了“PushButton”示例,然后调试器将在调用“PushButton”函数(这是应用程序的主函数)之前等待。您可以检查高级源代码以及显示当前 IP 的每个指令的“反汇编窗口”。现在您可以尝试单步跳过、单步进入、继续。

图 5 调试器在“main”处停止处理器

在这里,我们执行了“单步进入”,然后看到了“PushButton”入口函数的高级源代码,调试器打开“PushButton.c”指向下一个可执行函数。请参阅下面的图 6。

图 6 从 main 单步进入的示例

在 D1000 上运行示例

长远来看,我们可以让处理器自由运行,然后您可以看到 D1000 CRB 的启动日志,以及 D1000 接收 RTC 中断时修改的日志。请参阅下面的图 7。

图 7 来自 D1000 CRB 的日志输出

硬件参考

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
© . All rights reserved.