采用MAXQ1850评估套件(EV kit)和面向MAXQ3

通信设计应用

63人已加入

描述

摘要:本应用笔记介绍怎样针对MAXQ1850高性能、RISC、安全微控制器开发、构建并调试应用程序。实例采用了MAXQ1850评估套件(EV kit)和Rowley Associates公司提供的CrossWorks C编译器。

引言

Maxim Integrated Products的MAXQ1850是高性能、安全、小封装、32位RISC微控制器,设计用于电子商务、银行和数据安全应用。微控制器执行16位指令,有一个32位数据通道。MAXQ1850在一个时钟周期中执行完成大部分指令,是性能非常高的RISC机。MAXQ1850还具有很多重要的安全特性,包括:
  • 支持DES、3DES、AES、SHA-1、SHA-224、SHA-256、RSA、DSA和ECDSA的密码加速器
  • 真正的硬件随机数发生器
  • 8KB低泄漏电池备电NVSRAM
  • 4个自毁输入
  • 防篡改探测,可快速擦除密钥/数据。
  • 能够探测超范围条件的环境传感器(例如,温度、电压)
MAXQ1850评估套件是安全应用原型开发的理想平台。套件提供一个RS-232串口,两个智能卡插槽(一个全尺寸,一个SIM卡),一个USB连接器,一个LCD屏,一个16按键键盘以及原型区。

设置MAXQ1850评估套件

MAXQ1850评估套件威廉希尔官方网站 板如图1所示。下面列出的硬件都包含在评估套件中,用于实现本应用笔记:
  1. MAXQ1850评估套件威廉希尔官方网站 板
  2. JTAG威廉希尔官方网站 板
  3. JTAG电缆(连接MAXQ1850评估套件威廉希尔官方网站 板和JTAG威廉希尔官方网站 板)
  4. 9针串行电缆
  5. 稳压电源(5V、±5%、300mA、中心正极)

详细威廉希尔官方网站 图(PDF, 776KB)
图1. MAXQ1850评估威廉希尔官方网站 板

MAXQ1850评估威廉希尔官方网站 板和JTAG威廉希尔官方网站 板都有很多跳线需要进行配置。如果需要了解跳线及其功能的详细信息,请参考各自的数据手册。对于本应用笔记,请按照以下要求来配置跳线:
  • 在MAXQ1850评估套件威廉希尔官方网站 板上,短接以下跳线:JU3 (靠近Reset开关);JU4 (靠近Program开关);JU30 (靠近处理器左下部);JU104 (靠近LCD模块的左下部)。连接跳线JU5 (靠近电池)以及JU20 (靠近电源输入)的引脚1 (PCB上的方形焊盘)和引脚2。连接跳线JU21 (靠近处理器的右上部)的引脚2和引脚3。所有其他跳线应打开。
  • 在JTAG威廉希尔官方网站 板上,短接JH3。这从JTAG威廉希尔官方网站 板为评估套件威廉希尔官方网站 板提供5V电源。对于这一配置,跳线JH1和JH2为“无关项”。
在JTAG威廉希尔官方网站 板和MAXQ1850套件威廉希尔官方网站 板之间连接JTAG电缆。在JTAG威廉希尔官方网站 板上,电缆上的红条应连接至标有引脚1和引脚2的连接器一侧。在MAXQ1850评估套件威廉希尔官方网站 板上,电缆上的红条应连接至标有引脚1和引脚2的连接器一侧(可以通过PCB背面的方形焊盘来识别引脚1)。

注意,在老的MAXQ1850评估威廉希尔官方网站 板设计中,MAXQ1850微控制器可能采用了插槽。如果是这样,把MAXQ1850插入到插槽中,其无铅指示符“+”朝向插槽中一个角(右下)上标出的点。

在您的PC和JTAG威廉希尔官方网站 板之间连接9针串行电缆(不要将其连接至MAXQ1850套件威廉希尔官方网站 板)。最后,将5V电源连接至JTAG威廉希尔官方网站 板的电源连接器(J2)。它也为评估套件威廉希尔官方网站 板提供电源供电。

采用CrossWorks编译器进行设计:WalkLED

在开始使用MAXQ1850评估套件时,我们开发一个简单的应用程序,使威廉希尔官方网站 板上的三个LED闪烁。LED以固定、重复的顺序闪烁,看起来象是在威廉希尔官方网站 板上“走”。因此,该工程被命名为WalkLED。该程序的代码列在附录A中。代码非常短,您甚至能够在相对很短的时间内手动输入这些代码。您还可以从评估套件的CD中获得源代码文件,也可以从Maxim网站下载获得。

我们使用的工具包是Rowley Associates公司提供的CrossStudio。编写本文档时,工具包是面向MAXQ30的CrossWorks,版本2.0.0.2008063000.2293。这是本文档中用于产生截屏的版本。为确定是否是最新版本,请访问Rowley & Associates网站,或者发送电子邮件至 micro.support@maxim-ic.com (English only)。

在建立新方案时,点击File 编译器 New 编译器 New Project。在New Project弹出框中,填写底部的Name和Location框,从Project Templates窗口中选择Executable类,和A C可执行文件(图2)。我们将调用工程WalkLED_demo,将其放到目录C:workmaxqMAXQ1850WalkLED_demo中。

编译器
图2. 新工程

单击Next继续,您将看到Project Properties弹出框(图3)。Target处理器可能是MAXQ1103。双击处理器序列号,选择MAXQ1850处理器。这一页面的所有其他部分以及后续页面都选择默认,因此,选择MAXQ1850后,点击Finish,建立工程。如果需要,您可以单击Next,选择其他的工程选项。

编译器
图3. 选择MAXQ1850处理器

在建立工程时,Project Explorer窗口(图4)会出现一个新工程,通常位于应用程序窗口的右上。打开它,您将看到两个文件夹,Source Files和System Files。打开Source Files,将看到main.c,这是您的应用程序源代码。双击它,打开。

编译器
图4. Project Explorer窗口

现在,输入附录A的应用代码,或者从上面提到的来源中,将代码剪切并粘贴到main.c文件中,替换所有当前内容。

当应用程序执行时,您会看到LED DS1、DS2和DS3 (位于套件威廉希尔官方网站 板原型区左侧)按顺序不断闪烁。而在应用程序运行前,必须首先“构建”它。选择Build 编译器 Build WalkLED_demo,或者按下F7。如果一切都正确构建,您将在Output窗口看到消息“Build complete”,它旁边有一个对勾(图5)。如果有错,请确定您输入的代码是否正确。

编译器
图5. 工程构建后的输出

现在可以运行应用程序。对此,单击Debug 编译器 Build and Debug,程序将启动,不断运行。单击Pause按钮(Break Execution,如代码窗口上面和左侧所示),程序在当前位置暂停,等待用户的下一动作。如果没有Build和Debug选项,找到“targets”窗口;单击Maxim Serial JTAG Adapter;然后,单击Connect按钮(窗口左上角)。这样,通过JTAG威廉希尔官方网站 板连接工具包和评估套件,使能调试功能。工具包调试功能被使能后,单击Step Over按钮就可以开始调试过程,如图6所示。

编译器
图6. Step Over按钮

按下Step Over按钮,程序启动后,CrossStudio通过JTAG威廉希尔官方网站 把应用程序下载到MAXQ1850中,Output窗口显示状态消息。应用程序开始运行,然后,在代码第一行停止(左侧空白区显示黄色箭头)。从这一点运行应用程序时,选择Debug 编译器 Go (或者单击Play按钮)。现在,请确定MAXQ1850威廉希尔官方网站 板上的LED正在闪烁。您可能希望能够在一定程度上修改应用程序;按照相反的顺序来闪烁LED,或者改变点亮时间,更快或者更慢的闪烁。

使用CrossStudio调试应用程序

现在,让我们了解一下MAXQ1850和CrossStudio工具的调试功能。MAXQ1850有内置JTAG引擎,支持在实际芯片上进行调试,从而不需要昂贵的仿真器或者有可能出错的模拟器。注意,MAXQ1850还提供安全锁定机制,在元件锁定时,防止JTAG工作。这样,当MAXQ1850器件用在敏感应用中时,保证了JTAG调试引擎不会带来安全威胁。

考虑WalkLED_demo应用程序。作为一次试验,在main.c函数中,把Delay函数的延时计数从200000改为2000。

for(i=0;i < 2000; i++) ;
现在,选择Build 编译器 Build and Debug,构建并运行应用程序。工具包会重新构建工程,装入新程序,开始运行。注意,LED为始终点亮状态,而非闪烁状态。

选择Pause按钮(或者选择Debug 编译器 Break),程序在当前代码行暂停执行,左侧空白区出现一个黄色箭头。由于程序大部分时间都花在Delay函数的“for”循环上,因此代码很有可能停在这里(参见图7)。

编译器
图7. 在Delay函数中,代码停止运行

观察右侧的Locals窗口(如果看不到该窗口,单击Debug 编译器 Debug Windows 编译器 Locals)。该窗口将显示“i”变量的当前值。现在,按下Step Over按钮。让程序运行一秒,然后,再次按下Pause按钮。您应该看到“i”值增加了。

要退出函数,应该一直按着Step Over按钮,直到循环结束,但这会浪费很长时间。只要按下Step Out按钮(在Step Into按钮的右边,如图6所示),程序一直执行,直到退出Delay函数,返回到其调用函数main.c。

通过设置断点,也可以获得相似的结果。函数main.c中,在调用Delay函数的任一行上设置断点时,单击该代码行左侧的小三角。它将变为红圈(图8)。现在,再次运行应用程序(Debug 编译器 Go,或者Play按钮)。应用程序会运行到这一点,然后暂停。

编译器
图8. 加入断点

现在,我们了解一下更多的调试功能。按下Step Over按钮几次。每按下一次,C源代码执行一行。您将看到,控制LED的一行代码每执行一次,LED闪烁一下。当暂停在Delay()一行时,按下Step Into按钮(图9)。这会进入该函数,暂停在该函数的第一行。正如前面所演示的,按下Step Out按钮,可以退出Delay()函数。

编译器
图9. Step Into按钮

在运行时,还可以改变变量(和寄存器)。点击GO,然后,点击Pause,程序应再次停止在Delay()函数的中间部分。注意“i”值。现在,把“i”设置为1998 (单击“i”显示的数值,高亮后输入1998)。单击Step Into按钮,由于达到了“i”最终值,因此,您会看到循环结束。

以及您感兴趣的其他调试功能:
  • Debug 编译器 Disassembly将同时显示C代码和生成的汇编代码。这样,用户可以进入汇编代码,而不是C代码,执行时,同时显示C代码。
  • Debug 编译器 Debug Windows 编译器 Call Stack将显示应用程序到达当前位置时所调用的函数。如果在Delay()函数中暂停执行,其显示如图10所示。
  • 使用Debug 编译器 Stop停止调试,观察右侧的Targets窗口。确定Maxim Serial JTAG Adapter Properties以粗体字显示,观察Properties Window下部的信息。如果没有显示Maxim Serial JTAG Adapter Properties,从下拉菜单中选择它。您将看到属性列表及其设置,如图11所示。使用滚动条看到所有信息。Connection标题下的一个属性是Port Name。如果您使用串口,而不是默认的COM1,那么,可以在这里改变这一选项。
编译器
图10. 在Delay()函数中运行时调用堆栈

编译器
图11. Properties窗口

更多信息

软件库和参考设计目前正在由Maxim工程师开发。如果您需要了解库和工具的最新信息,或者对本应用笔记还有其他问题,请联系 microcontroller.support@maxim-ic.com (English only)。

附录A. WalkLED main.c源代码

#include 
#include 
#include "WalkLED.h"

void
main(void)
{
  PD1 = 0x62 ;	// PD1 = In Out Out In   In In Out In
  PO1 = PO1 & PO1_5_0 ;	// U10 Din (P1.5) = 0
  PO1 = PO1 | PO1_1_1 ;	// U10 CS (P1.1) = 1
  PO1 = PO1 & PO1_6_0 ;	// U10 SCLK (P1.6) = 0

  while (1) {
    wr_SPI(0x0700) ;	// U10 P7 (nLED0) = 0
    Delay() ;
    wr_SPI(0x0800) ;	// U10 P8 (nLED1) = 0
    Delay() ;
    wr_SPI(0x0900) ;	// U10 P9 (nLED2) = 0
    Delay() ;
    wr_SPI(0x0701) ;	// U10 P7 (nLED0) = 1
    Delay() ;
    wr_SPI(0x0801) ;	// U10 P8 (nLED1) = 1
    Delay() ;
    wr_SPI(0x0901) ;	// U10 P9 (nLED2) = 1
    Delay() ;
  }
}

void
wr_SPI(short SPI_Dat)	// Write data to SPI™ device U10
{
  int i;

  PO1 = PO1 & PO1_1_0 ;	// U10 CS (P1.1) = 0

  for(i=0;i<16;i++) {	// Set Din for each data bit
    if (SPI_Dat < 0)
      PO1 = PO1 | PO1_5_1 ;	// Din = 1
    else
      PO1 = PO1 & PO1_5_0 ;		// Din = 0
    
    PO1 = PO1 | PO1_6_1 ;	// SCLK = 1
    PO1 = PO1 & PO1_6_0 ;	// SCLK = 0
    PO1 = PO1 & PO1_5_0 ;	// Din = 0
    SPI_Dat = SPI_Dat << 1 ;	// Shift in next bit
  }
  PO1 = PO1 | 0x02 ;	// CS = 1
}

void
Delay(void) {	// Delay to make LEDs visible
  int i = 0 ;
  for(i=0;i < 200000; i++) ;
  
}
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
评论(0)
发评论
sunnylipei 2012-10-16
0 回复 举报
太强大了 收起回复

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分