Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1673877
  • 博文数量: 124
  • 博客积分: 4078
  • 博客等级: 中校
  • 技术积分: 3943
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-21 11:28
个人简介

新博客:http://sparkandshine.net/

文章分类

全部博文(124)

分类: 嵌入式

2012-03-15 16:19:47

摘要:

    本文讲述MSP430-169LCD上跑自带的LCD显示驱动Demo code遇到的问题,分析解决之,并附上源代码。


    最近小老板给了我MSP430-169LCD板和MSP-FET430UIF调试器,让我将UCOS移植上去。我先把官方的Demo code跑通,再移植UCOS。

一、硬件环境

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……,部分源代码如下:

  1. __no_init volatile union
  2. {
  3.   unsigned char P3DIR; /* Port 3 Direction */

  4.   struct
  5.   {
  6.     unsigned char P0 : 1; /* */
  7.     unsigned char P1 : 1; /* */
  8.     unsigned char P2 : 1; /* */
  9.     unsigned char P3 : 1; /* */
  10.     unsigned char P4 : 1; /* */
  11.     unsigned char P5 : 1; /* */
  12.     unsigned char P6 : 1; /* */
  13.     unsigned char P7 : 1; /* */
  14.   }P3DIR_bit;
  15. } @0x001A;

    现在就简单了,我们诸如P3DIR_0、P3DIR_1、P3DIR_2重定义到P0、P1、P2。这里,我们将其统一放在一个新文件io_redef.h,并在lcd_new.c和main.c包含这个文件。io_redef.h源代码如下:

  1. //file name:io_redef.h, added by jelline
  2. #ifndef _IO_REDEF_H_
  3. #define _IO_REDEF_H_

  4. #define P3DIR_0 P0
  5. #define P3DIR_1 P1
  6. #define P3DIR_2 P2
  7. #define P3DIR_3 P3
  8. #define P3DIR_4 P4

  9. #define P3SEL_0 P0
  10. #define P3SEL_1 P1
  11. #define P3SEL_2 P2
  12. #define P3SEL_3 P3

  13. #define P3OUT_0 P0
  14. #define P3OUT_2 P2

  15. #define P5OUT_4 P4
  16.  
  17. #define P5DIR_4 P4
  18. #define P5DIR_5 P5
  19. #define P5DIR_6 P6

  20. #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选项卡,示意图如下:

图6 覆盖默认链接控制脚本示意图

重新make,没问题了,可以烧进去了:-)


参考资料:

[1] MSP430-169LCD:http://www.olimex.com/dev/msp-169lcd.html

[2] 源代码 MSP430_169_forweb_modify.rar   

阅读(2804) | 评论(0) | 转发(2) |
给主人留下些什么吧!~~