MSP430-169LCD学习笔记:LCD显示驱动Demo code
[复制链接]
一、硬件环境 1.1 MSP430-169LCD概述 MSP430-169LCD是olimex公司一款基于MSP430的开发版,具有如下特性[1],外观示意图见图1: MCU: MSP430F169 with 60K Bytes Program Flash, 256 Bytes data Flash,2K Bytes RAM NOKIA 3310 LCD 84x48 pixels black & white Joystick with 4 directions and push button function SD/MMC card connector two LEDs: status and power RESET switch JTAG connector 32 768 Hz oscillator crystal 8Mhz crystall oscillator power supply voltage regulators and filtering capacitor extension headers for all uC pins PCB: FR-4, 1.5 mm (0,062"), soldermask, white silkscreen component print Dimensions: 67x66 mm (2.65x2.6")
让我感到惊讶的是,官方没有提供这个版子的用户指南(也许我没找到),只给了原理图、LCD的Demo(这些可从[1]下载)。 图1 MSP430-169LCD示意图 1.2 MSP-FET430UIF调试器 MSP-FET430UIF是TI的FLASH仿真工具,这里只是简单用其作为下载器,详情参考官网,MSP-FET430UIF外观示意图如下: 图2 MSP-FET430UIF外观示意图 1.3 软件环境 这里选择用IAR Embedded Workbench for MSP430 5.40.3版本,将上述硬件连接好,就可以进行调试Demo code了。
二、调试运行 2.1 unnamed错误 (1) 错误 从[1]下得Demo code压缩包,解压,打开MSP430_169LCD.eww(devices和Debugger Driver已设置好),make下,会提示如下错误: 图3 unnamed错误示意图 (2) 解决 遇到这种问题,首先全局查找(Find in files, 快捷键Ctrl+Shift+F)未定义的符号,看是不是有头文件没被include进去或者有目录没被preprocessor。否则就是没定义了,本Demo恰是这种情况。 那好,现在把这些位定义就行了。通过分析可知,问题出在寄存器的每一位定义上。例如:Demo假定P3DIR的各位定义为P3DIR_0、P3DIR_1、P3DIR_2……,事实上,io430fx16x.h将P3DIR的各位定位为P0、P1、P2……,部分源代码如下:
- __no_init volatile union
- {
- unsigned char P3DIR; /* Port 3 Direction */
- struct
- {
- unsigned char P0 : 1; /* */
- unsigned char P1 : 1; /* */
- unsigned char P2 : 1; /* */
- unsigned char P3 : 1; /* */
- unsigned char P4 : 1; /* */
- unsigned char P5 : 1; /* */
- unsigned char P6 : 1; /* */
- unsigned char P7 : 1; /* */
- }P3DIR_bit;
- } @0x001A;
现在就简单了,我们诸如P3DIR_0、P3DIR_1、P3DIR_2重定义到P0、P1、P2。这里,我们将其统一放在一个新文件io_redef.h,并在lcd_new.c和main.c包含这个文件。io_redef.h源代码如下:
- //file name:io_redef.h, added by jelline
- #ifndef _IO_REDEF_H_
- #define _IO_REDEF_H_
- #define P3DIR_0 P0
- #define P3DIR_1 P1
- #define P3DIR_2 P2
- #define P3DIR_3 P3
- #define P3DIR_4 P4
- #define P3SEL_0 P0
- #define P3SEL_1 P1
- #define P3SEL_2 P2
- #define P3SEL_3 P3
- #define P3OUT_0 P0
- #define P3OUT_2 P2
- #define P5OUT_4 P4
- #define P5DIR_4 P4
- #define P5DIR_5 P5
- #define P5DIR_6 P6
- #endif
2.2 _HEAP_SIZE未定义 (1) 问题 解决了上述问题,重新make,编译通过,但链接出错,错误提示如下: 图4 _HEAP_SIZE未定义报错 (2) 解决 透过链接的提示信息可以得知,问题出在IAR的链接控制脚本,找到该脚本(我的路径是D:\IAR Systems\Embedded Workbench 6.0 Evaluation\430\config\lnk430f169.xcl)。这里,我们将lnk430f169.xcl拷贝到该工程的文件目录MSP430_169_forweb_modify\下,再修改,我们发现_HEAP_SIZE被注释掉了,如下图,取消注释。 图5 lnk430f169链接控制脚本部分代码 最后一步,将修改过的链接控制脚本覆盖默认的脚本,具体步骤为:project-->options-->linker-->Config选项卡
|