摘要:本应用笔记介绍怎样针对MAXQ1850高性能、RISC、安全微控制器开发、构建并调试应用程序。实例采用了MAXQ1850评估套件(EV kit)和Rowley Associates公司提供的CrossWorks C编译器。
详细电路图(PDF, 776KB)
图1. MAXQ1850评估电路板
MAXQ1850评估电路板和JTAG电路板都有很多跳线需要进行配置。如果需要了解跳线及其功能的详细信息,请参考各自的数据手册。对于本应用笔记,请按照以下要求来配置跳线:
注意,在老的MAXQ1850评估电路板设计中,MAXQ1850微控制器可能采用了插槽。如果是这样,把MAXQ1850插入到插槽中,其无铅指示符“+”朝向插槽中一个角(右下)上标出的点。
在您的PC和JTAG电路板之间连接9针串行电缆(不要将其连接至MAXQ1850套件电路板)。最后,将5V电源连接至JTAG电路板的电源连接器(J2)。它也为评估套件电路板提供电源供电。
我们使用的工具包是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,或者改变点亮时间,更快或者更慢的闪烁。
考虑WalkLED_demo应用程序。作为一次试验,在main.c函数中,把Delay函数的延时计数从200000改为2000。
选择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”最终值,因此,您会看到循环结束。
以及您感兴趣的其他调试功能:
图10. 在Delay()函数中运行时调用堆栈
图11. Properties窗口
引言
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评估套件
MAXQ1850评估套件电路板如图1所示。下面列出的硬件都包含在评估套件中,用于实现本应用笔记:详细电路图(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为“无关项”。
注意,在老的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引擎,支持在实际芯片上进行调试,从而不需要昂贵的仿真器或者有可能出错的interwetten与威廉的赔率体系 器。注意,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++) ; }
评论
查看更多