概述 MAXQ微控制器开发平台得到Rowley Associates的CrossWorks编程工具的支持。本应用笔记说明怎样使用CrossWorks v.1.0和MAXQ2000评估板来创建、构建和调试面向MAXQ平台的C应用程序。这些说明对以后的CrossWorks版本仍然适用。MAXQ2000微控制器的特性会在下面的“设置”部分进行说明。 设置MAXQ2000评估板 写代码前,必须先连接MAXQ2000评估板。
评估板包括3块电路板,其中一块带有小型LCD屏。图1为连接有LCD子板的最大电路板,这就是实际的MAXQ2000评估板,稍后我们将进行讨论。将LCD连接到MAXQ2000评估板(见图1)上标号为J3的接头上。
图1. 安装了LCD板的MAXQ2000评估板
MAXQ2000加载器和调试引擎使用JTAG协议进行通信。因为实际上没有用于个人计算机的商业、通用JTAG适配器,所以Dallas Semiconductor提供了一个串口-JTAG转换电路板,即第三块电路板。使用评估板带的小型10芯电缆,将MAXQ2000评估板上标号为J4的接头与JTAG板上标号为P2的接头连接。见图2。注意,连接器红色一侧对应两个板上的引脚1和2。
图2. MAXQ2000评估板与JTAG板连接
MAXQ2000评估板上应该有3个跳线。连接头JU1的引脚1和2应使用跳线相连。同样,JU2的引脚1和2,以及JU3的引脚1和2也应使用跳线相连。另外,确保高频晶振安装在Y1上(靠近电路板上的微控制器)。本应用笔记的演示代码假定采用16MHz晶振,评估板上安装了该晶振。JTAG电路板应该也在JH1、JH2和JH3接头上安装了3个跳线。
该设置还需要一个中心为正的5V ±5%直流电源。关于电源要求的更多信息请参考MAXQ2000评估板文档。将电源连接到JTAG板的电源插孔J2上。
最后,将PC串口与JTAG板相连。使用常规的9芯直通串口电缆,将计算机的一个串口与JTAG板的串口相连。注意:不要连接到MAXQ2000评估板上的串口。图3所示为正确连接。
图3. 串口电缆与JTAG板的正确连接
现在可以开始使用CrossWorks工具了。 在CrossWorks中创建MAXQ2000工程 Rowley Associates为MAXQ提供全功能CrossWorks (30天评估许可),可以从www.rowley.co.uk/maxq/index.htm下载。按照提示安装,安装位置和其它选项选择缺省值。注意,Rowley Associates的MAXQ CrossWorks目前只有基于Windows平台的版本。需要发电子邮件给Rowley Associates,索取30天产品激活密钥,才能继续安装。遵循Rowley Associates网站“支持” (Support)栏的指导说明:评估CrossWorks (EvaluaTIng CrossWorks)。
安装完成后,按下列 *** 作运行MAXQ CrossWorks,从开始菜单起,依次选择Rowley Associates Limited,然后CrossWorks MAXQ 1.0,最后CrossStudio。主窗口打开后会显示CrossWorks的功能概要。
创建工程时,首先选择File,然后是New,再选择New Project。在出现的对话框中,从模板中选择C Executable,输入新工程的名称和位置,点击OK (见图4)。
图4. 新工程选项对话窗口
在接下来的工程设置对话框(见图5)中,确认Target Processor选项为MAXQ2000。其它设置可以保留缺省值。点击Finish产生新的MAXQ2000工程。
图5. 新工程设置对话窗口
随后,需要输入足够的代码,让MAXQ2000评估板做一些有趣的事情。如果工程管理器窗口没有打开,选择View,然后选择Project Explorer打开它。现在可以在工程管理器窗口内双击打开main.c文件。输入下列代码(先将main.c原来的代码删除)。
#include输入上述代码后,确认MAXQ2000评估板和串口-JTAG板按照上述说明连接完毕和上电。CrossWorks窗口底部的状态栏应指示MAXQ Serial to JTAG,旁边有一黄灯。但是,如果指示Disconnected,旁边带有灰灯,就要通过选择Target,随后选择菜单中的Connect MAXQ Serial to JTAG来连接串口-JTAG板。void main(void) { int i = 0; int j = 0; int k = 1; LCRA = 0x03E0; // Set LCD configuraTIon LCFG = 0xF3; // Set up all segments as outputs, normal operaTIon // mode, and enable display. while (1) { for (i = 0; i < 500; i++) { for (j = 0; j < 500; j++) { // delay loop } } k = (k << 1); if (k == 64) { k = 1; } LCD0 = k; LCD1 = k; LCD2 = k; LCD3 = k; } }
一旦串口-JTAG板连接就绪后,选择Build,然后选择菜单的Build and Run,以创建并执行工程代码。在输出窗口应出现以Verify Completed为结尾的一串消息;MAXQ2000评估板上的LCD段显示器应该随着代码的运行而显示变换信息。
上述代码演示了MAXQ CrossWorks的多种功能。第一,MAXQ2000的所有寄存器都在包含文件MAXQ2000.h中预先定义。CrossWorks出厂时在目录%Program Files%Rowley Associates LimitedCrossWorks MAXQ 1.0include下包含该文件。工程编译时自动搜索该目录,所以不必将MAXQ2000.h复制到包含工程的目录下。
工程里包含MAXQ2000.h文件后,代码就可以直接通过C语言访问所有MAXQ2000内部寄存器,如上所述,这些寄存器为LCRA、LCFG、LCD0、LCD1、LCD2和LCD3。MAXQ2000支持的全部系统和外设寄存器列表参见MAXQ2000用户指南补充资料 (English only)。
注意:名称中包含内置括号的寄存器,如A[0]和DP[0],在CrossWorks中必须用带下划线的名称引用,如A_0和DP_0。另外,可能不能直接用C代码设置独立的寄存器位,例如,不允许出现IMR.0 = 0的情况。 MAXQ2000评估板的功能 在进一步了解CrossWorks调试器之前,我们再创建一个更复杂的应用程序,来展示MAXQ2000评估板的一些功能。本实例代码可以下载。
本应用程序在LCD上显示运行的计数器值,象秒表一样进行连续递增或递减计数。计数器值达到19999 (LCD可显示的最大值)时反转。MAXQ2000评估板上的两个按钮编程为本应用程序的控制开关:
- 按SW5使计数器值复位至0000。
- 按SW4使计数器反向。如果原先递增计数,将变为递减计数,反之亦然。如果计数值低于0,就反转到19999。
现在可以演示MAXQ2000评估板的一个更有用的性能,即复位(RESET)按钮。在MAXQ2000评估板的左下侧有一个标注为SW2和RESET的开关。按下此按钮,观察LCD屏。读数应该立即从0重新开始。该RESET按钮连接至MAXQ2000的复位引脚。如果需要重新启动应用程序,就按此按钮。 初始化MAXQ2000的LCD控制器 MAXQ2000提供一个液晶显示(LCD)硬件控制模块,可运行在全偏压、1/2偏压和1/3偏压模式下,实现静态、x2、x3或x4复用显示方式。也就是说,在x4复用显示器上,MAXQ2000-RAX (COM0到COM3,SEG0到SEG32)上可专用于LCD驱动功能的37条线最多可驱动132个LCD段(33段X 4个公共信号)。
每个打开的LCD段都需要连续的电压波形来驱动,该电压波形由连接该段的段线和公用信号线提供。驱动电压波形使各段按要求打开或关闭,而不会产生可能损坏LCD的直流偏压。MAXQ2000的LCD控制器在后台自动产生这些电压波形。也就是说,当LCD的显示段发生改变时,只需要修改LCD控制器的寄存器内容。
如上例,第一步是初始化用于控制显示的LCD控制器寄存器。
void initLCD(void) { LCRA = 0x03E0; // Set LCD configuration LCFG = 0xF3; // Set up all segments as outputs, normal operation // mode, and enable display. }LCRA寄存器控制3项重要功能:显示形式,本例中为静态;VADJ和地之间的可调电阻,用来修改显示对比度;以及LCD段驱动波形的频率。LCFG寄存器控制LCD控制器的开/关,并控制哪些两用引脚作为端口引脚使用,哪些用作LCD段。 向显示器写入数值 各LCD段分别由一个LCD控制显示寄存器的一位进行控制,与使用的LCD类型和多路复用方式无关。此位置高就打开(黑)该段;清除此位就关闭(透明)该段。我们的MAXQ2000评估板所用的LCD段与存储器映射关系,如图6所示。
图6. LCD段与LCD显示存储寄存器位的映射关系
LCD的各位占用一个LCD显示存储寄存器,各个位的分布形式相同。因此,我们可以使用查找表,找到各位0到9的段寄存器值,并将该数值写到LCD显示寄存器。
#define LCD_PATTERN_0 0x03F #define LCD_PATTERN_1 0x006 #define LCD_PATTERN_2 0x05B #define LCD_PATTERN_3 0x04F #define LCD_PATTERN_4 0x066 #define LCD_PATTERN_5 0x06D #define LCD_PATTERN_6 0x07D #define LCD_PATTERN_7 0x007 #define LCD_PATTERN_8 0x07F #define LCD_PATTERN_9 0x067 int PATTERNS[] = { LCD_PATTERN_0, LCD_PATTERN_1, LCD_PATTERN_2, LCD_PATTERN_3, LCD_PATTERN_4, LCD_PATTERN_5, LCD_PATTERN_6, LCD_PATTERN_7, LCD_PATTERN_8, LCD_PATTERN_9 }; /****************************************************************************** * Returns the value that will need to be placed in one of LCD0-LCD3 to display * a digit 0-9. No bounds checking is done here. If you ask for a digit other * than 0-9, you will get a bogus display. */ int getLCDDigit(int digit) { return PATTERNS[digit]; }这些程序准备好后,我们可以采用以下方法,向显示器写入计数器值(4位,特殊情况下“1”对应第5位):
int show(int value) { if (value >= 10000) LCD4 = 0x40; else LCD4 = 0; LCD3 = getLCDDigit((value / 1000) % 10); LCD2 = getLCDDigit((value / 100) % 10); LCD1 = getLCDDigit((value / 10) % 10); LCD0 = getLCDDigit((value) % 10); return 0; }去抖按钮输入 按钮SW4和SW5是本应用程序的另外两个人机交互元件,分别通过DIP开关部件SW6与端口引脚P5.2和P7.1相连。(RESET开关不需要编程支持,它直接与MAXQ2000低电平有效复位引脚连接)。
所有MAXQ2000端口引脚(对应JTAG 接口的P4.0到P4.3除外)的上电缺省模式都为输入模式,端口引脚和VDDIO之间具有内部弱上拉。SW4和SW5开关的连接方式是当按下时将端口引脚拉到地,因此端口引脚已经是我们需要的配置方式了。端口引脚状态可以非常简单地通过检查端口引脚输入位(SW4为PI5.2,SW5为PI7.1)来获得;位值为0时表示按钮按下,为1时表示按钮松开。
然而,因为这些开关是机械结构的,所以单次按下 *** 作可能造成多次0到1的转换。为避免这种情况发生,可以使用已有的主循环和延迟作为功能模块,实现一些简单的去抖 *** 作。
while(1) { for (i = 0; i < 32000; i++) { // just a delay loop } show(counter); if (((PI5 & 0x04) == 0) && (debounce1 == 0)) { inc *= -1; debounce1 = 20; } if (((PI7 & 0x02) == 0) && (debounce2 == 0)) { counter = 0; debounce2 = 20; } counter += inc; if (counter > 19999) { counter = 0; } if (counter < 0) { counter = 19999; } if ((debounce1 > 0) && ((PI5 & 0x04) == 0x04)) { debounce1--; } if ((debounce2 > 0) && ((PI7 & 0x02) == 0x02)) { debounce2--; } }当开关由高变低时,设置一个去抖计数器。开关的高状态必须保持20个主计数器计数周期,才会接受下一次高向低的转换。去抖计数器除提供开关去抖功能外,还保证了按钮一直按下时不会重复功能 *** 作;开关必须松开以重新按下。 使用CrossWorks调试器 因程序已经在MAXQ2000上运行,我们可以检查CrossWorks调试系统的功能。向MAXQ2000加载代码的JTAG接口还支持许多硬件调试功能。包括以下一些示例:
- 指令单步执行
- 执行地址断点(可以同时有4个有效断点)
- 直接读写寄存器
- 代码和栈存储器浏览
- 数据存储器浏览和直接编辑
CrossWorks使用这些硬件调试功能提供C和汇编级源代码调试,具有完备的调试功能,如设置断点、观察变量和寄存器,以及存储器浏览和编辑模式。要进行程序调试,首先选择Build,接着选择菜单中的Build and Debug。将进行应用程序编译、下载到MAXQ2000评估板,最终在main()函数(见图7)内停止运行。
图7. CrossWorks调试模式
在图7中可看到CrossWorks调试器的多项功能。
- 页面左边有一个黄色箭头表示当前的执行位置。所有可执行位置(不包括注释、空白区和一些括号)由左边的蓝色三角形示出。
- 局部变量和它们的值也在应用代码的右侧示出。这些值可通过点击数值和输入新值来进行编辑。
- Step Into (F11)执行一行,可以单步执行代码。如果该行含有函数调用,将单步进入该函数,转到该函数的开始位置。
- Step Over (F10)也是执行一行,如果该行不包括函数调用的话。如果有函数调用,则连续执行该函数(执行该函数,而不是跳过它),并在该函数调用的下一行停止。
- Step Out (Shift+F11)只能在某一函数(不是最上层函数main())内使用。该功能将连续执行完该函数的其余部分,停在调用该函数行的下一行。
- Run to Cursor (Control+F10)执行到光标所在位置。光标必须处在可执行代码行上,才能使用该功能。
- Break命令(Control+".")将使应用程序立即停止运行,无论当时处在什么位置。
- 左键单击任何可执行代码行的蓝色三角标记,可在应用程序的相应位置设置断点。这样蓝色三角形会变成红色圆圈。应用程序运行到断点后会停止运行,并重新进入调试模式。程序停止或运行时可以设置或清除多达4个断点。(注意,因为不同的步进调试功能占用一个断点,如果采用单步调试模式,只能设置3个断点)。
在调试模式下,有3种不同方法查看应用程序:
-
li>源代码模式(Control+T, S)仅以C代码形式显示程序。
- 汇编模式(Control+T, A)以汇编语言方式显示。单步执行和断点功能可以用于单个汇编行。
- 交错模式(Control+T, I) (见图8)在同一个窗口内同时显示C和汇编代码。
图8. 在交互模式下进行调试 使用寄存器窗口 应用程序在调试模式下停止运行时,可以查看并直接编辑MAXQ2000的寄存器(见图9)。要打开该显示窗口,选择Debug,再选择菜单中的Debug Windows和Registers (1,2,3,4)。可快速浏览4个不同寄存器窗口;通过点击左上部的组(Groups)图标,可以配置窗口以显示不同组的寄存器。
图9. 寄存器窗口 使用Call Stack (堆栈使用)窗口 另一个调试窗口显示了应用程序当前的堆栈使用情况(见图10)。该窗口列出了到达代码当前执行点的所有调用函数。当前正在执行的函数显示在列表最后,调用当前函数的上一个函数显示在上一行。依次类推,一直按这一显示模式进行显示,最后是main()显示在第一行。要打开此窗口,选择Debug,再选择Debug Windows,最后选择Call Stack,或者按下Control+Alt+S。
图10. Call Stack窗口 使用变量和观察窗口 Debug和Debug Windows菜单中还提供其它调试窗口。Locals和Globals窗口分别显示局部变量(当前函数或显示范围内)值和全局变量值。局部变量显示窗口见上面图7。还有一个Watch窗口,不仅可以用来显示变量值,而且可以显示任意C表达式的值(见图11)。然而,这些表达式中不能有MAXQ2000寄存器。可以定义4个Watch窗口,每个都有独自的变量和表达式列表。
图11. 观察(Watch)窗口 查看代码和数据存储器 存储器窗口(选择Debug,再选择Debug Windows,最后选择Memory (1,2,3,4))可以进行配置,以显示任意代码段和数据存储器的当前值。这些值在每步执行后或者停在断点处时都将更新(见图12)。另外,可直接点击数据存储器值并输入新值进行编辑。
图12. 数据存储器窗口 支持选项 MAXQ平台提供多种支持选项。Dallas Semiconductor开发者管理着一个在线讨论论坛 (English only),回答用户提出的问题。该论坛也是开发者的新闻发布窗口,它包含最新的可用工具信息和其它感兴趣的问题。
对不适合公开讨论的问题,Dallas Semiconductor工程师们提供两个email地址。
- micro.software@dalsemi.com (English only)由软件工程师管理,他们可以帮助解决MAXQ微控制器的编程问题,对使用如Rowley Associates'的CrossWorks等软件工具提供帮助。
- micro.support@dalsemi.com (English only)由应用工程师管理,他们可以协助解决电路中使用MAXQ微控制器碰到的硬件和设计问题。
#include
at the start of your application.
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)