搜索
bottom↓
回复: 44

强大,LGT8跑外部30M晶振,ICC流水灯工程

[复制链接]

出0入8汤圆

发表于 2012-5-9 15:45:21 | 显示全部楼层 |阅读模式
ICC代码如下:
//ICC-AVR application builder : 2012-5-9
// Target : M164P
// Crystal: 30.000Mhz

#include <iom164pv.h>
#include <iolgt8f0xa.h>
#include <macros.h>

#define uint unsigned int
uint fi;

void port_init(void)
{
PORTA = 0xff;
DDRA  = 0xff;
PORTB = 0x00;
DDRB  = 0x00;
DDRC = 0x00;
PORTC = 0x00;
PORTD = 0x00;
DDRD  = 0x00;
}

void init_devices(void)
{
  port_init();
  PMCR=0x35;         //使能外部晶振
  delay_nms(10);     //延时10ms等待晶振输入稳定
  PMCR=0x34;         //切换为外部晶振
}

void delay_1us(void)                 //1us延时函数
{
   asm("nop");
}

void delay_nus(uint n)       //N us延时函数
{
    uint i=0;
    for (i=0;i<n;i++)
        delay_1us();
}
void delay_1ms(void)                 //1ms延时函数
{
    uint i;
    for (i=0;i<1140;i++);
}

void delay_nms(uint n)       //N ms延时函数
{
    uint i=0;
    for (i=0;i<n;i++)
        delay_1ms();
}


void main(void)
{
  init_devices();
  fi=0;
  DDRA = 0XFF;                                                                                        //设置A为输出模式
  PORTA = 0XFF;                                                                                        //A端口全部输出为高电平.
  delay_nms(250);                                                                                        //延时一会
  PORTA = 0X00;
  delay_nms(250);
  while(1)
    {                                                                                                //超级循环
      PORTA = 0X01;                                                                                //开始右移.端口输出为OB0000 0001开始
      for(fi=0;fi<8;++fi)
            {                                                                        //循环8次
          delay_nms(250);
          PORTA = PORTA<<1;                                                                //端口右移一位
        }

      delay_nms(250);
      PORTA = 0X80;                                                                                //开始左移.端口输出为OB1000 0000开始
      for(fi=0;fi<8;++fi)
            {
          delay_nms(250);
          PORTA = PORTA>>1;                                                                //端口右移一位
        }
      delay_nms(250);
      PORTA = 0XFF;                                                                                //端口A输出为OB1111 1111
      delay_nms(250);
      PORTA = 0XF0;                                                                                //端口A输出为OB1111 0000
      delay_nms(250);
      PORTA = 0X0F;                                                                                //端口A输出为OB0000 1111
      delay_nms(250);
      PORTA = 0XFF;                                                                                //端口A输出为OB1111 1111
      delay_nms(250);        

    }
}

有一个步骤不能忘记,就是把阿莫提供的LGT8头文件放到ICC的头文件目录中
这里是ICC工程文件:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2012-5-9 22:07:18 | 显示全部楼层
跑一下其它外设,看看性能是否稳定,比如PWM,USART。
头像被屏蔽

出0入0汤圆

发表于 2012-5-9 22:29:05 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

发表于 2012-5-9 22:32:31 | 显示全部楼层
30M强大,以前最高好像跑过stc的24m,再高不敢了~

出0入0汤圆

发表于 2012-5-10 00:12:10 | 显示全部楼层
xinzhi1986 发表于 2012-5-9 22:32
30M强大,以前最高好像跑过stc的24m,再高不敢了~

stc我一直用24M晶振开6T。相当于51的48M。avr的4M。。。。额、、、

出0入0汤圆

发表于 2012-5-10 00:13:08 | 显示全部楼层
不是不想上更高频率  只是STC不能用三泛音的晶振,有源晶振手头又木有。

出0入0汤圆

发表于 2012-5-10 08:15:12 | 显示全部楼层
wx85105157 发表于 2012-5-10 00:13
不是不想上更高频率  只是STC不能用三泛音的晶振,有源晶振手头又木有。

我是24M,1T。。。。。。要你这么算。。。相当于51的288M

出0入0汤圆

发表于 2012-5-10 08:26:30 | 显示全部楼层
疑问,LGT应该是单指令周期

void delay_1us(void)                 //1us延时函数
{
   asm("nop");
}

延时是不是应该是  1/30000000 ,1us不准

出0入0汤圆

发表于 2012-5-10 08:31:20 | 显示全部楼层
只跑个IO能说明啥

出0入8汤圆

 楼主| 发表于 2012-5-10 08:31:37 | 显示全部楼层
在LGT的测试中发现这样一个问题,通过JTAGICE将程序烧入芯片后,程序不能运行,需要拔掉JTAGICE,然后关闭实验板电源重新通电,程序才能顺利运行。每次烧写都要如此,不论是默认的内部RC,还是外部晶振

出0入0汤圆

发表于 2012-5-10 08:33:23 | 显示全部楼层
不知楼主延时1ms和延时1us的函数准不准?

出0入8汤圆

 楼主| 发表于 2012-5-10 08:37:02 | 显示全部楼层
skylly3 发表于 2012-5-10 08:33
不知楼主延时1ms和延时1us的函数准不准?

没用过30M晶振,现在只是在做初步测试,这个几个延时函数肯定不准,需要不断调校。

出0入8汤圆

 楼主| 发表于 2012-5-10 08:44:15 | 显示全部楼层
Halley 发表于 2012-5-10 08:31
只跑个IO能说明啥

这只是一个例程,不能说明什么问题,我现在正在用30M外部晶振测试pwm,的确不是很稳定,回头把测试代码贴上来

出0入0汤圆

发表于 2012-5-10 09:06:10 | 显示全部楼层
谢谢,有时间想用LGT试试。

出0入0汤圆

发表于 2012-5-10 14:05:27 | 显示全部楼层
xinzhi1986 发表于 2012-5-10 08:15
我是24M,1T。。。。。。要你这么算。。。相当于51的288M

而且stc的1T单片机的机器周期好像是1.5个时钟周期。。。。

出0入0汤圆

发表于 2012-5-10 14:15:52 | 显示全部楼层
以前用过一颗8位MCU,厂家给的参数144M(PLL倍频),实际可以跑到200M,单周期,8051

出0入0汤圆

发表于 2012-5-10 14:16:26 | 显示全部楼层
估计LGT可以跑更快

出0入0汤圆

发表于 2012-5-10 14:25:33 | 显示全部楼层
LGT 什么时候能提供16K FLASH 20TSSOP 封装的就好了。

出0入8汤圆

 楼主| 发表于 2012-5-11 08:03:46 | 显示全部楼层
armok 发表于 2012-5-9 22:29
不要开看门狗,连续运行它一个星期看看有没有死机现象 :)

目前已经连续运行48小时一切正常,

出0入8汤圆

 楼主| 发表于 2012-5-11 08:12:56 | 显示全部楼层
另附上pwm的ICC测试程序:
//ICC-AVR application builder : 2012-5-9
// Target : M164P
// Crystal: 30.000Mhz

#include <iom164pv.h>
#include <iolgt8f0xa.h>
#include <macros.h>
#define uint unsigned int

void port_init(void)
{
PORTA = 0xff;
DDRA  = 0xff;
PORTB = 0x00;
DDRB  = 0x00;
DDRC = 0x00;
PORTC = 0x00;
DDRD =0x30;        //PD4、PD5设置为输出
TCCR1A = 0xa3;      //快速10位pwm
TCCR1B = 0x09;                //1分频
}

void init_devices(void)
{
  port_init();
  PMCR =0x35;         //置位,使能外部晶振
  delay_nms(10);     //延时10ms等待晶振输入稳定
  PMCR=0x34;         //关闭内部RC
  //PMCR &=~BIT(0);
   
  CLKPR =0x81;       //置位MASK_CLKPCE,4个周期内修改分频系数
  CLKPR=0x80;        //1分频,默认是2分频(0x01)
  CLKPR =0x00;    //清除 MASK_CLKPCE
}


void delay_1ms(void)                 //1ms延时函数
{
    uint i;
    for (i=0;i<2280;i++);
}

void delay_nms(uint n)       //N ms延时函数
{
    uint i=0;
    for (i=0;i<n;i++)
        delay_1ms();
}


void main(void)
{
  init_devices();
  
  OCR1A =  100;
  
}

经实测,在外置30M晶振的情况下,pwm1a实际输出频率只有20KHZ左右,而且极不稳定,数值变化很大,不知是何原因。
这里是ICC工程文件:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2012-5-11 10:43:31 | 显示全部楼层
说明在30MHz的时候,MCU局部功能已经出现不稳定现象,所以厂家才会那么标参数!

出0入8汤圆

 楼主| 发表于 2012-5-11 10:59:37 | 显示全部楼层
rootxie 发表于 2012-5-11 10:43
说明在30MHz的时候,MCU局部功能已经出现不稳定现象,所以厂家才会那么标参数! ...

是的,我测试了外置8M、16M和30M的晶振的pwm输出频率,8M时7.5KHZ左右很稳定,16M时15KHZ左右数字跳变比较厉害,不是很稳定了,上30M时输出只有20KHZ左右(理论上应该可以到30KHZ),跳变更加剧烈,及其不稳定,请厂方详细测试一下

出0入0汤圆

发表于 2012-5-11 11:32:34 | 显示全部楼层
轻微修改LS的程序如下:

void init_devices(void)
{
  port_init();

  PMCR =0x15; // PMCR =0x35;        
      //先不要置位bit5

  delay_nms(10);     //延时10ms等待晶振输入稳定

  PMCR =0x35;  // 置位bit5, 切换系统时钟到外部晶振

  PMCR=0x34;         //关闭内部RC
  //PMCR &=~BIT(0);
   
  //CLKPR =0x81;       //置位MASK_CLKPCE,4个周期内修改分频系数      

  CLKPR=0x80;        //1分频,默认是2分频(0x01)
  CLKPR =0x00;    //清除 MASK_CLKPCE
}

有关CLKPR的设置,是我们的文档没有描述清楚,稍后会更新文档。

CLKPCE:对CLKPR写入0x80才会置位CLKPCE,写CLKPR4个时钟之后或者CLKPCE为高时再次设置CLKPR都会清零CLKPCE。

LS的本意是保持CLKPS的值不变同时置位CLKPCE,再写入新的CLKPS值,最后清零CLKPCE,

实际的运行结果会是:对CLKPR写入0x81不会置位CLKPCE,同时4个时钟之后CLKPCE会被清零,

再写入0x80时才会置位CLKPCE,但CLKPCE会提前被清零因为前面写入0x81时已经开始4个时钟的计数了,

再写入0x00时CLKPCE已经被硬件清零了,导致CLKPS的值设置不成功。

这是我们文档没有描述清楚所致,由此给大家带来的不便,在此向大家表示歉意。

LS的程序我们有测试过,外部时钟用的是32MHz的晶振,实测OC1A的输出是稳定的31.25KHz PWM波形,

占空比为 3.2us/(32us-3.2us),与计算符合。

LS可以检查一下XTAL1/2引脚的波形是否稳定。

出0入0汤圆

发表于 2012-5-11 11:53:45 | 显示全部楼层
欢迎官方的 iProduct 加入
呵呵,又多了一位高人指点

出0入0汤圆

发表于 2012-5-11 12:44:36 | 显示全部楼层
loveavr999 发表于 2012-5-11 11:53
欢迎官方的 iProduct 加入
呵呵,又多了一位高人指点

XD太抬举偶了,可不敢称为高人,只是我们做的东西自己是最清楚的,

有些地方没有表述清楚给大家添了麻烦,有什么问题我们都会尽快给大家回复,希望能帮到大家。

做好产品和好服务都是我们的宗旨。

出0入8汤圆

 楼主| 发表于 2012-5-11 14:38:44 | 显示全部楼层
iProduct 发表于 2012-5-11 12:44
XD太抬举偶了,可不敢称为高人,只是我们做的东西自己是最清楚的,

有些地方没有表述清楚给大家添了麻烦 ...

稍后我测试一下,先谢谢了,新事物都是要经过不断的检验和修正才会逐渐趋于完美,加油!支持LGT

出0入8汤圆

 楼主| 发表于 2012-5-11 15:02:06 | 显示全部楼层
iProduct 发表于 2012-5-11 12:44
XD太抬举偶了,可不敢称为高人,只是我们做的东西自己是最清楚的,

有些地方没有表述清楚给大家添了麻烦 ...

经过测试,确如您所说,按照您提供的参数设置,用30M外置晶振pwm输出稳定的工作在34khz,再次表示感谢

出0入0汤圆

发表于 2012-5-11 15:17:40 | 显示全部楼层
看了这帖,找了几个高频率晶振 简单测试UART 发现36M也可以工作。
64M的晶振会工作在1/3频率上。 其它高点的晶振就没有了。

出0入0汤圆

发表于 2012-5-11 15:20:13 | 显示全部楼层
jianjun42 发表于 2012-5-11 15:02
经过测试,确如您所说,按照您提供的参数设置,用30M外置晶振pwm输出稳定的工作在34khz,再次表示感谢 ...

没问题就好,我们更要感谢你们的检验和支持,这是我们前进的一大动力。

出0入8汤圆

 楼主| 发表于 2012-5-11 15:46:49 | 显示全部楼层
iProduct 发表于 2012-5-11 15:20
没问题就好,我们更要感谢你们的检验和支持,这是我们前进的一大动力。 ...

pwm没有问题了,但是现在对SPI工作方式的设置还有很多疑问,实验了N次都没有成功,不知道能不能提供设置代码或例程

出0入0汤圆

发表于 2012-5-11 16:20:46 | 显示全部楼层
jianjun42 发表于 2012-5-11 15:46
pwm没有问题了,但是现在对SPI工作方式的设置还有很多疑问,实验了N次都没有成功,不知道能不能提供设置 ...

你可以参考下我们提供的例程

http://www.mcugreen.com/LGT8F0XA/tools/LGT8F0XABSP_v1.1.rar

这个SPI是三线的,slave select需要软件来处理。

出0入0汤圆

发表于 2012-5-11 16:33:29 | 显示全部楼层
iProduct 发表于 2012-5-11 16:20
你可以参考下我们提供的例程

http://www.mcugreen.com/LGT8F0XA/tools/LGT8F0XABSP_v1.1.rar

搭车问下: LGT的数据手册为什么没有电特性参数呢?

出0入0汤圆

发表于 2012-5-11 16:49:21 | 显示全部楼层
shark 发表于 2012-5-11 16:33
搭车问下: LGT的数据手册为什么没有电特性参数呢?

电气特性参数还需要等待进一步的测量,我们测好了就会更新的。

出0入8汤圆

 楼主| 发表于 2012-5-11 17:12:55 | 显示全部楼层
iProduct 发表于 2012-5-11 16:20
你可以参考下我们提供的例程

http://www.mcugreen.com/LGT8F0XA/tools/LGT8F0XABSP_v1.1.rar

这个例程看不太懂,是GCC吗?对这种语法不熟悉,有没有ICC的?想测试一下LGT的SPI驱动5110液晶

出0入0汤圆

发表于 2012-5-11 20:48:00 | 显示全部楼层
jianjun42 发表于 2012-5-11 17:12
这个例程看不太懂,是GCC吗?对这种语法不熟悉,有没有ICC的?想测试一下LGT的SPI驱动5110液晶 ...


提供简单示例代码如下:

#include <iom164pv.h>
#include <iolgt8f0xa.h>
#include <macros.h>
#define uint unsigned int

void spi_init(void)
{
/* 引脚定义
   PB1 --> SPSS;
   PB0 --> SPCK;
   PD1 --> MOSI;
   PD0 --> MISO;
*/

// 软件设置 SPSS 和 SPCK 引脚的方向 及 SPSS 的值
   PORTB |= 0x2; // set SPSS high
   DDRB |= 0x3;  // set SPSS & SPCK direction output

// 设置波特率
   UBRR0H = 0x0;
   UBRR0L = 0x25;
      
// 配置USPI工作模式
   UCSR0C = 0xC0; // SPI主机模式,MSB,SPI Mode 0
   UCSR0B = 0x18; // 使能输入和输出
}

void spi_sendchar(uint data)
{
   while ( !(UCSR0A & 0x20) ); // 等待发送缓冲器为空
   UDR0 = data;                // 写入要发送的数据
   
   while( !(UCSR0A & 0x40) );  // 等待发送结束
   UCSR0A = 0x40;              // 清零TXC
}

void main(void)
{
  spi_init();
  
  PORTB &= ~(1 << PB1);  // 拉低 SPSS
  
  spi_sendchar(0xB4);      // 发送数据 0xB4
  spi_sendchar(0x2d);     // 发送数据  0x2D
  
  PORTB |= (1 << PB1);    // 拉高SPSS
  
}

出0入8汤圆

 楼主| 发表于 2012-5-11 21:15:32 | 显示全部楼层
iProduct 发表于 2012-5-11 20:48
提供简单示例代码如下:

#include

谢谢,明天试试

出0入8汤圆

 楼主| 发表于 2012-12-5 10:03:51 | 显示全部楼层
logicgreen 发表于 2012-5-9 22:07
跑一下其它外设,看看性能是否稳定,比如PWM,USART。

你好,咨询一个问题,关于LGT芯片输入寄存器端口操作,论坛里有网友发过帖子,但是用的是GCC,我不懂,麻烦您能不能用ICC解释一下

出0入0汤圆

发表于 2012-12-5 17:50:55 | 显示全部楼层
本帖最后由 logicgreen 于 2012-12-5 17:53 编辑

参考Datasheet的描述

出0入0汤圆

发表于 2012-12-5 17:54:16 | 显示全部楼层
本帖最后由 logicgreen 于 2012-12-5 17:57 编辑

参考Datasheet的描述

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入8汤圆

 楼主| 发表于 2012-12-5 20:28:13 | 显示全部楼层
logicgreen 发表于 2012-12-5 17:54
参考Datasheet的描述

谢谢,请问最新版的数据手册在哪里可以找到

出0入8汤圆

 楼主| 发表于 2012-12-5 20:30:03 | 显示全部楼层
iProduct 发表于 2012-5-11 20:48
提供简单示例代码如下:

#include

谢谢您的例程,调通了,再请教ICC的ADC例程

出0入0汤圆

发表于 2012-12-5 20:32:14 | 显示全部楼层
观摩学习

出0入0汤圆

发表于 2013-2-18 17:40:45 | 显示全部楼层
iProduct 发表于 2012-5-11 16:20
你可以参考下我们提供的例程

http://www.mcugreen.com/LGT8F0XA/tools/LGT8F0XABSP_v1.1.rar

请问 类似这样的链接怎么能找到呢?

出0入0汤圆

发表于 2013-2-19 14:36:59 | 显示全部楼层
pupist 发表于 2013-2-18 17:40
请问 类似这样的链接怎么能找到呢?

你可以链接最新website:

www.lgtic.com查找

出0入0汤圆

发表于 2013-2-19 15:30:56 | 显示全部楼层
logicgreen 发表于 2013-2-19 14:36
你可以链接最新website:

www.lgtic.com查找

通过什么方式能找到那个例程呢  我看了半天没有哦 *_*
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-3 03:17

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表