jianjun42 发表于 2012-5-9 15:45:21

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

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工程文件:

logicgreen 发表于 2012-5-9 22:07:18

跑一下其它外设,看看性能是否稳定,比如PWM,USART。

armok 发表于 2012-5-9 22:29:05

xinzhi1986 发表于 2012-5-9 22:32:31

30M{:funk:}强大,以前最高好像跑过stc的24m,再高不敢了~

wx85105157 发表于 2012-5-10 00:12:10

xinzhi1986 发表于 2012-5-9 22:32 static/image/common/back.gif
30M强大,以前最高好像跑过stc的24m,再高不敢了~

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

wx85105157 发表于 2012-5-10 00:13:08

不是不想上更高频率只是STC不能用三泛音的晶振,有源晶振手头又木有。

xinzhi1986 发表于 2012-5-10 08:15:12

wx85105157 发表于 2012-5-10 00:13 static/image/common/back.gif
不是不想上更高频率只是STC不能用三泛音的晶振,有源晶振手头又木有。

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

loveavr999 发表于 2012-5-10 08:26:30

疑问,LGT应该是单指令周期

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

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

{:shy:}

Halley 发表于 2012-5-10 08:31:20

只跑个IO能说明啥

jianjun42 发表于 2012-5-10 08:31:37

在LGT的测试中发现这样一个问题,通过JTAGICE将程序烧入芯片后,程序不能运行,需要拔掉JTAGICE,然后关闭实验板电源重新通电,程序才能顺利运行。每次烧写都要如此,不论是默认的内部RC,还是外部晶振

skylly3 发表于 2012-5-10 08:33:23

不知楼主延时1ms和延时1us的函数准不准?

jianjun42 发表于 2012-5-10 08:37:02

skylly3 发表于 2012-5-10 08:33 static/image/common/back.gif
不知楼主延时1ms和延时1us的函数准不准?

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

jianjun42 发表于 2012-5-10 08:44:15

Halley 发表于 2012-5-10 08:31 static/image/common/back.gif
只跑个IO能说明啥

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

kejiren123 发表于 2012-5-10 09:06:10

谢谢,有时间想用LGT试试。

wx85105157 发表于 2012-5-10 14:05:27

xinzhi1986 发表于 2012-5-10 08:15 static/image/common/back.gif
我是24M,1T。。。。。。要你这么算。。。相当于51的288M

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

inter_zhou 发表于 2012-5-10 14:15:52

以前用过一颗8位MCU,厂家给的参数144M(PLL倍频),实际可以跑到200M,单周期,8051

inter_zhou 发表于 2012-5-10 14:16:26

估计LGT可以跑更快

kation122 发表于 2012-5-10 14:25:33

LGT 什么时候能提供16K FLASH 20TSSOP 封装的就好了。

jianjun42 发表于 2012-5-11 08:03:46

armok 发表于 2012-5-9 22:29 static/image/common/back.gif
不要开看门狗,连续运行它一个星期看看有没有死机现象 :)

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

jianjun42 发表于 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工程文件:

rootxie 发表于 2012-5-11 10:43:31

说明在30MHz的时候,MCU局部功能已经出现不稳定现象,所以厂家才会那么标参数!

jianjun42 发表于 2012-5-11 10:59:37

rootxie 发表于 2012-5-11 10:43 static/image/common/back.gif
说明在30MHz的时候,MCU局部功能已经出现不稳定现象,所以厂家才会那么标参数! ...

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

iProduct 发表于 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引脚的波形是否稳定。

loveavr999 发表于 2012-5-11 11:53:45

欢迎官方的 iProduct 加入
呵呵,又多了一位高人指点

iProduct 发表于 2012-5-11 12:44:36

loveavr999 发表于 2012-5-11 11:53 static/image/common/back.gif
欢迎官方的 iProduct 加入
呵呵,又多了一位高人指点

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

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

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

jianjun42 发表于 2012-5-11 14:38:44

iProduct 发表于 2012-5-11 12:44 static/image/common/back.gif
XD太抬举偶了,可不敢称为高人,只是我们做的东西自己是最清楚的,

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

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

jianjun42 发表于 2012-5-11 15:02:06

iProduct 发表于 2012-5-11 12:44 static/image/common/back.gif
XD太抬举偶了,可不敢称为高人,只是我们做的东西自己是最清楚的,

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

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

bozai 发表于 2012-5-11 15:17:40

看了这帖,找了几个高频率晶振 简单测试UART 发现36M也可以工作。
64M的晶振会工作在1/3频率上。 其它高点的晶振就没有了。

iProduct 发表于 2012-5-11 15:20:13

jianjun42 发表于 2012-5-11 15:02 static/image/common/back.gif
经过测试,确如您所说,按照您提供的参数设置,用30M外置晶振pwm输出稳定的工作在34khz,再次表示感谢 ...

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

jianjun42 发表于 2012-5-11 15:46:49

iProduct 发表于 2012-5-11 15:20 static/image/common/back.gif
没问题就好,我们更要感谢你们的检验和支持,这是我们前进的一大动力。 ...

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

iProduct 发表于 2012-5-11 16:20:46

jianjun42 发表于 2012-5-11 15:46 static/image/common/back.gif
pwm没有问题了,但是现在对SPI工作方式的设置还有很多疑问,实验了N次都没有成功,不知道能不能提供设置 ...

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

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

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

shark 发表于 2012-5-11 16:33:29

iProduct 发表于 2012-5-11 16:20 static/image/common/back.gif
你可以参考下我们提供的例程

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


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

iProduct 发表于 2012-5-11 16:49:21

shark 发表于 2012-5-11 16:33 static/image/common/back.gif
搭车问下: LGT的数据手册为什么没有电特性参数呢?

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

jianjun42 发表于 2012-5-11 17:12:55

iProduct 发表于 2012-5-11 16:20 static/image/common/back.gif
你可以参考下我们提供的例程

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


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

iProduct 发表于 2012-5-11 20:48:00

jianjun42 发表于 2012-5-11 17:12 static/image/common/back.gif
这个例程看不太懂,是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

}

jianjun42 发表于 2012-5-11 21:15:32

iProduct 发表于 2012-5-11 20:48 static/image/common/back.gif
提供简单示例代码如下:

#include


谢谢,明天试试

jianjun42 发表于 2012-12-5 10:03:51

logicgreen 发表于 2012-5-9 22:07 static/image/common/back.gif
跑一下其它外设,看看性能是否稳定,比如PWM,USART。

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

logicgreen 发表于 2012-12-5 17:50:55

本帖最后由 logicgreen 于 2012-12-5 17:53 编辑

参考Datasheet的描述

logicgreen 发表于 2012-12-5 17:54:16

本帖最后由 logicgreen 于 2012-12-5 17:57 编辑

参考Datasheet的描述

jianjun42 发表于 2012-12-5 20:28:13

logicgreen 发表于 2012-12-5 17:54 static/image/common/back.gif
参考Datasheet的描述

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

jianjun42 发表于 2012-12-5 20:30:03

iProduct 发表于 2012-5-11 20:48 static/image/common/back.gif
提供简单示例代码如下:

#include


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

qq1806765274 发表于 2012-12-5 20:32:14

观摩学习

pupist 发表于 2013-2-18 17:40:45

iProduct 发表于 2012-5-11 16:20 static/image/common/back.gif
你可以参考下我们提供的例程

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


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

logicgreen 发表于 2013-2-19 14:36:59

pupist 发表于 2013-2-18 17:40 static/image/common/back.gif
请问 类似这样的链接怎么能找到呢?

你可以链接最新website:

www.lgtic.com查找

pupist 发表于 2013-2-19 15:30:56

logicgreen 发表于 2013-2-19 14:36 static/image/common/back.gif
你可以链接最新website:

www.lgtic.com查找

通过什么方式能找到那个例程呢我看了半天没有哦 *_*
页: [1]
查看完整版本: 强大,LGT8跑外部30M晶振,ICC流水灯工程