强大,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工程文件: 跑一下其它外设,看看性能是否稳定,比如PWM,USART。 30M{:funk:}强大,以前最高好像跑过stc的24m,再高不敢了~ xinzhi1986 发表于 2012-5-9 22:32 static/image/common/back.gif
30M强大,以前最高好像跑过stc的24m,再高不敢了~
stc我一直用24M晶振开6T。相当于51的48M。avr的4M。。。。额、、、 不是不想上更高频率只是STC不能用三泛音的晶振,有源晶振手头又木有。 wx85105157 发表于 2012-5-10 00:13 static/image/common/back.gif
不是不想上更高频率只是STC不能用三泛音的晶振,有源晶振手头又木有。
我是24M,1T。。。。。。要你这么算。。。相当于51的288M 疑问,LGT应该是单指令周期
void delay_1us(void) //1us延时函数
{
asm("nop");
}
延时是不是应该是1/30000000 ,1us不准
{:shy:} 只跑个IO能说明啥 在LGT的测试中发现这样一个问题,通过JTAGICE将程序烧入芯片后,程序不能运行,需要拔掉JTAGICE,然后关闭实验板电源重新通电,程序才能顺利运行。每次烧写都要如此,不论是默认的内部RC,还是外部晶振
不知楼主延时1ms和延时1us的函数准不准? skylly3 发表于 2012-5-10 08:33 static/image/common/back.gif
不知楼主延时1ms和延时1us的函数准不准?
没用过30M晶振,现在只是在做初步测试,这个几个延时函数肯定不准,需要不断调校。 Halley 发表于 2012-5-10 08:31 static/image/common/back.gif
只跑个IO能说明啥
这只是一个例程,不能说明什么问题,我现在正在用30M外部晶振测试pwm,的确不是很稳定,回头把测试代码贴上来 谢谢,有时间想用LGT试试。 xinzhi1986 发表于 2012-5-10 08:15 static/image/common/back.gif
我是24M,1T。。。。。。要你这么算。。。相当于51的288M
而且stc的1T单片机的机器周期好像是1.5个时钟周期。。。。 以前用过一颗8位MCU,厂家给的参数144M(PLL倍频),实际可以跑到200M,单周期,8051 估计LGT可以跑更快 LGT 什么时候能提供16K FLASH 20TSSOP 封装的就好了。
armok 发表于 2012-5-9 22:29 static/image/common/back.gif
不要开看门狗,连续运行它一个星期看看有没有死机现象 :)
目前已经连续运行48小时一切正常,{:smile:} 另附上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工程文件: 说明在30MHz的时候,MCU局部功能已经出现不稳定现象,所以厂家才会那么标参数! 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),跳变更加剧烈,及其不稳定,请厂方详细测试一下 轻微修改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引脚的波形是否稳定。 欢迎官方的 iProduct 加入
呵呵,又多了一位高人指点
loveavr999 发表于 2012-5-11 11:53 static/image/common/back.gif
欢迎官方的 iProduct 加入
呵呵,又多了一位高人指点
XD太抬举偶了,可不敢称为高人,只是我们做的东西自己是最清楚的,
有些地方没有表述清楚给大家添了麻烦,有什么问题我们都会尽快给大家回复,希望能帮到大家。
做好产品和好服务都是我们的宗旨。 iProduct 发表于 2012-5-11 12:44 static/image/common/back.gif
XD太抬举偶了,可不敢称为高人,只是我们做的东西自己是最清楚的,
有些地方没有表述清楚给大家添了麻烦 ...
稍后我测试一下,先谢谢了,新事物都是要经过不断的检验和修正才会逐渐趋于完美,加油!支持LGT iProduct 发表于 2012-5-11 12:44 static/image/common/back.gif
XD太抬举偶了,可不敢称为高人,只是我们做的东西自己是最清楚的,
有些地方没有表述清楚给大家添了麻烦 ...
经过测试,确如您所说,按照您提供的参数设置,用30M外置晶振pwm输出稳定的工作在34khz,再次表示感谢 看了这帖,找了几个高频率晶振 简单测试UART 发现36M也可以工作。
64M的晶振会工作在1/3频率上。 其它高点的晶振就没有了。 jianjun42 发表于 2012-5-11 15:02 static/image/common/back.gif
经过测试,确如您所说,按照您提供的参数设置,用30M外置晶振pwm输出稳定的工作在34khz,再次表示感谢 ...
没问题就好,我们更要感谢你们的检验和支持,这是我们前进的一大动力。 iProduct 发表于 2012-5-11 15:20 static/image/common/back.gif
没问题就好,我们更要感谢你们的检验和支持,这是我们前进的一大动力。 ...
pwm没有问题了,但是现在对SPI工作方式的设置还有很多疑问,实验了N次都没有成功,不知道能不能提供设置代码或例程 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需要软件来处理。 iProduct 发表于 2012-5-11 16:20 static/image/common/back.gif
你可以参考下我们提供的例程
http://www.mcugreen.com/LGT8F0XA/tools/LGT8F0XABSP_v1.1.rar
搭车问下: LGT的数据手册为什么没有电特性参数呢? shark 发表于 2012-5-11 16:33 static/image/common/back.gif
搭车问下: LGT的数据手册为什么没有电特性参数呢?
电气特性参数还需要等待进一步的测量,我们测好了就会更新的。 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液晶 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
}
iProduct 发表于 2012-5-11 20:48 static/image/common/back.gif
提供简单示例代码如下:
#include
谢谢,明天试试 logicgreen 发表于 2012-5-9 22:07 static/image/common/back.gif
跑一下其它外设,看看性能是否稳定,比如PWM,USART。
你好,咨询一个问题,关于LGT芯片输入寄存器端口操作,论坛里有网友发过帖子,但是用的是GCC,我不懂,麻烦您能不能用ICC解释一下 本帖最后由 logicgreen 于 2012-12-5 17:53 编辑
参考Datasheet的描述
本帖最后由 logicgreen 于 2012-12-5 17:57 编辑
参考Datasheet的描述
logicgreen 发表于 2012-12-5 17:54 static/image/common/back.gif
参考Datasheet的描述
谢谢,请问最新版的数据手册在哪里可以找到
iProduct 发表于 2012-5-11 20:48 static/image/common/back.gif
提供简单示例代码如下:
#include
谢谢您的例程,调通了,再请教ICC的ADC例程 观摩学习 iProduct 发表于 2012-5-11 16:20 static/image/common/back.gif
你可以参考下我们提供的例程
http://www.mcugreen.com/LGT8F0XA/tools/LGT8F0XABSP_v1.1.rar
请问 类似这样的链接怎么能找到呢? pupist 发表于 2013-2-18 17:40 static/image/common/back.gif
请问 类似这样的链接怎么能找到呢?
你可以链接最新website:
www.lgtic.com查找 logicgreen 发表于 2013-2-19 14:36 static/image/common/back.gif
你可以链接最新website:
www.lgtic.com查找
通过什么方式能找到那个例程呢我看了半天没有哦 *_*
页:
[1]