ARM7初学总结_小宁的自由空间_百度空间

ARM学xx结

 

实验环境:

操作系统--Windows XP professional

开发环境--ADS1.2

开发板--周立功Easy ARM21xx系列(NXP LPC21032131 晶振11.0592MHz

调试环境--通过JTAG连接计算机并口,H-JTAG版本0.6.1.0

 

在学习arm7中遇到的问题:

一、ARM连接液晶显示模块的问题

液晶模块:金鹏OCMJ4X8C128*64点阵显示模块,采用ST7920控制器,自带字库,支持文字图形混显

连接方式:串行模式,ARM与液晶模块只使用4条数据线连接,

测试程序:采用金鹏公司给出的C51测试程序,经过简单修改改为ARM适用的C程序

 

问题描述:

硬件连接没有问题。在调试过程中,液晶可以显示,但是显示的字体有的残缺不全,有个别的字可能显示不出来;同一个显示程序多次运行显示的结果不一样,{dy}次残缺的字第二次运行可能正常了,其他字体可能又不正常了,哪些字显示不正常是随机的。

 

解决方法:

在程序中加入适当的延时程序。在最基本的写入程序中加入延时:在两个高低跳变之间加入delay(100)便可。

CODE

void wr_lcd (uint8 dat_comm,uint8 content) //基本的写入函数(驱动)
{
uint8 a,i,j;
delay (100);
a=content;
IO0SET=cs;
IO0CLR=sclk;

IO0SET=std;
delay (100) ;
for(i=0;i<5;i++) //
首先连续送入51,启动传输周期
{
     IO0SET=sclk;
   delay (100) ;
    IO0CLR=sclk;
}
delay (100) ;
   IO0CLR=std;
   IO0SET=sclk;
delay (100) ;
   IO0CLR=sclk; //
指定传输方向,写入0为写
if(dat_comm) //
再下一位决定传输性质,1为写数据,0为写指令
    IO0SET=std;   //data
else
IO0CLR=std;   //command
IO0SET=sclk;
delay (100) ;
IO0CLR=sclk;
IO0CLR=std; //
规定{zh1}一位要写0
IO0SET=sclk;
delay (100) ;
IO0CLR=sclk; //
至此,启动了传输周期,确定了传输方向及传输性质
delay (100) ;

for(j=0;j<2;j++) //
开始写具体的数据(或指令)内容
{
    for(i=0;i<4;i++) //
高四位放在{dy}个字节的高四位,低四位放在第二个字节的高四位。无关位都补0”
    {
      if((a&0x80)==0x80)
           IO0SET=std;
      else
          IO0CLR=std;
       a=a<<1;
      IO0SET=sclk;
   delay (100) ;
      IO0CLR=sclk;
    
    }
    IO0CLR=std;
    for(i=0;i<4;i++)
    {
      IO0SET=sclk;
   delay (100) ; 
      IO0CLR=sclk;
    }
}
}

void delay (uint32 us)   //注:短延时
{
while(us--);
}

另外,在初始化程序中也要加入适当的延时

CODE

/*------------------初始化-----------------*/
void init_lcd (void)
{
IO0SET=rst;
wr_lcd (comm,0x30); /*30---
基本指令动作*/ 
wr_lcd (comm,0x01); /*
清屏,地址指针指向00H*/
delay (0xffff);
wr_lcd (comm,0x06); /*
光标的移动方向*/
wr_lcd (comm,0x0c); /*
开显示,关游标*/
}

 

 

问题总结:该液晶模块默认是连接单片机的,由于ARM较单片机运行速度快了很多,所以如果直接使用单片机的参考程序,可能会出现时序问题。在单片机中,sclk先后置高低,连着的两条指令固有的时间间隔便满足液晶模块的时序要求,但在ARM中这个间隔就太短了。所以在写入过程中,要使sclk人为地维持高一段时间,delay (100) 这个时间段刚好能适用。

 

 

二、ARM开发板连接J-TAG故障问题

连接方式:开发板上JTAG接口——JTAG转接卡——计算机并口

问题描述:ARM开发板使用过程中,AXD调试程序正在运行,芯片突然失去与计算机的连接,AXD提示意思为:不要在程序运行过程中停机。重新通过H-JTAG软件连接芯片多次,失败,不能识别芯片。这样导致开发板直接不能使用。

解决方法:

不能通过并口连接,尝试通过串口连接。

连接方法:

①通过串口延长线把开发板与计算机串口相连接;

②在计算机上安装Philips Flash Utility(飞利浦的Flash工具);

③在开发板上把ISP跳线短接,接通开发板电源;

④打开LPC2000 Flash Utility V2.23 ,选择正确的COM口,点击Read Device ID。如果成功,则在最下面的状态栏显示Read Part ID Successfully,并在Device栏显示器件的相关信息。

l         如果在一个板子上连接不成功,可以换一个底板,把PACK板换到能用的开发板底板上,可能能使ARM芯片起到起死回生的效果。

⑤选择Eraser擦除整个芯片上的数据。然后换回JTAG接口,用H-JTAG连接看能不能成功。


问题总结:

由于某种原因,通过JTAG经由并口连接计算机可能会失败,出现怎么都连不上的现象。经由串口,通过芯片的ISP(在线系统编程)功能连接芯片是一种变通的方法,可以通过这种方法擦除整个芯片中的数据,再试着通过并口连接。经试验这种方法是成功的,使ARM芯片得以“起死回生”。

再者,这种方法也可以向芯片中写入hex格式的数据,如果没有并口只有串口便可以使用这种方式。

 

 

 

 

三、脱机运行程序:

 

1. LPC2000要求用户程序的向量表(32位机器码)累加和为0,才能脱机运行。请参考或使用lpc2100工程模板

2. P0.14口保证复位期间为高电平状态,通常接一个10K的上拉电阻即可。

 

3.“对于LPC2103或者LPC2148来说,它的FlashRam都内置而且不能外扩外部存储器,上电或复位后系统根据配置引脚P0.14(又称ISP使能引脚)的高低电平来选择是进入ISP状态还是系统正常从Flash启动。在系统复位时,若P0.14口为低电平,进入ISP状态,若P0.14口为高电平,正常从Flash启动。硬件上通过跳线来实现。这部分电路很简单,1个上拉电阻,1个跳线,但对于整个系统是必可少的,若缺少这一部分电路,LPC2103或者LPC2148上电后将进入一个未知的状态,导致系统无法正常工作。正常工作情况下,跳线断开。”

 

 

四、EEPROM的使用

 

如果用软件写入EEPROM,则在写入完成后要延时,才能进一步对EEPROM进行操作。否则可能出现读不出、写不如数据的现象。这是应该断电稍等,然后重新写入再加延时。



郑重声明:资讯 【ARM7初学总结_小宁的自由空间_百度空间】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——