
详细电路图(PDF, 776KB)
图1. MAXQ1850评估电路板
MAXQ1850评估电路板和JTAG电路板都有很多跳线需要进行配置。如果需要了解跳线及其功能的详细信息,请参考各自的数据手册。对于本应用笔记,请按照以下要求来配置跳线:
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,或者改变点亮时间,更快或者更慢的闪烁。
main.c函数中,把Delay函数的延时计数从200000改为2000。for(i=0;i < 2000; i++) ;
现在,选择Build
Build and Debug,构建并运行应用程序。工具包会重新构建工程,装入新程序,开始运行。注意,LED为始终点亮状态,而非闪烁状态。
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”最终值,因此,您会看到循环结束。
以及您感兴趣的其他调试功能:
Disassembly将同时显示C代码和生成的汇编代码。这样,用户可以进入汇编代码,而不是C代码,执行时,同时显示C代码。
Debug Windows
Call Stack将显示应用程序到达当前位置时所调用的函数。如果在Delay()函数中暂停执行,其显示如图10所示。
Stop停止调试,观察右侧的Targets窗口。确定Maxim Serial JTAG Adapter Properties以粗体字显示,观察Properties Window下部的信息。如果没有显示Maxim Serial JTAG Adapter Properties,从下拉菜单中选择它。您将看到属性列表及其设置,如图11所示。使用滚动条看到所有信息。Connection标题下的一个属性是Port Name。如果您使用串口,而不是默认的COM1,那么,可以在这里改变这一选项。 
图10. 在Delay()函数中运行时调用堆栈
图11. Properties窗口
#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++) ; }
SPI是Motorola, Inc.的商标。
凡《网络安全与数据治理》(原《信息技术与网络安全》)录用的文章,如作者没有关于汇编权、翻译权、印刷权及电子版的复制权、信息网络传播权与发行权等版权的特殊声明,即视作该文章署名作者同意将该文章的汇编权、翻译权、印刷权及电子版的复制权、信息网络传播权与发行权授予本刊,本刊有权授权本刊合作数据库、合作媒体等合作伙伴使用。同时,本刊支付的稿酬已包含上述使用的费用,特此声明。