LGT上26M晶振(附带IAR调试设置+附带LGT各种时钟下延时程序)
本帖最后由 uc_c++ 于 2012-4-24 21:51 编辑手上没32M晶振,只有26M的,就用26M试试。
#include "iolgt8f0xa.h"
#include "lgt_delay.h"
int main()
{
DDRC&=~(MASK_PORTC0|MASK_PORTC1); //PC0和PC1为输入
PORTC &=~(MASK_PORTC0|MASK_PORTC1); //PC0和PC1禁止上拉
PMCR = MASK_RC16MEN|MASK_OSCMEN; //使能外部晶振
lgt_delay_ms_8m(10); //延时10ms等待晶振输入稳定
PMCR = MASK_RC16MEN|MASK_OSCMEN|MASK_EXTMSEL; //切换主时钟为外部晶振
PMCR = MASK_OSCMEN|MASK_EXTMSEL; //禁止内部RC
CLKPR |=MASK_CLKPCE; //置位MASK_CLKPCE,4个周期内修改分频系数
CLKPR=MASK_CLKPCE; //1分频
CLKPR &= ~MASK_CLKPCE; //清除 MASK_CLKPCE
PORTA=0x00;
DDRA=0x01;
while(1)
{
PORTA=0x00;
lgt_delay_us_26m(1000);
PORTA=0x01;
lgt_delay_us_26m(1000);
}
}
IAR 调试LGT可以查看LGT独有寄存器。
本帖最后由 uc_c++ 于 2012-4-24 11:36 编辑
附带IAR设置: IAR是比较灵活些。 建议楼主写个IAR的教程哈, 顺便把寄存器定义的文件公布下, 造福人类嘛:) 本帖最后由 uc_c++ 于 2012-4-24 13:23 编辑
附带LGT各种时钟下延时程序:#ifndef __LGT_DELAY_H__
#define __LGT_DELAY_H__
#include "uni_int.h"
#include "uni_int.h"
#include "iar_macro.h"
#include "util_macro.h"
#ifdef __cplusplus
extern "C"{
#endif
#define LGT_DELAY_INLINE_DEF(A,B) \
__always_inline__ void lgt_inline_delay_us_##A##m(uint16 us)\
{\
while(us--)\
{\
B;\
}\
}\
__always_inline__ void lgt_inline_delay_ms_##A##m(uint16 ms)\
{\
while(ms--)\
{\
lgt_inline_delay_us_##A##m(1000);\
}\
}
#define LGT_DELAY_DCL(A) \
void lgt_delay_us_##A##m(uint16 us);\
void lgt_delay_ms_##A##m(uint16 ms)
#define LGT_DELAY_DEF(A) \
void lgt_delay_us_##A##m(uint16 us)\
{\
lgt_inline_delay_us_##A##m(us);\
}\
void lgt_delay_ms_##A##m(uint16 ms)\
{\
lgt_inline_delay_ms_##A##m(ms);\
}\
LGT_DELAY_INLINE_DEF
(
4,
DO_WHILE_0
(
asm("nop");
)
)
LGT_DELAY_INLINE_DEF
(
8,
DO_WHILE_0
(
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
)
)
LGT_DELAY_INLINE_DEF
(
12,
DO_WHILE_0
(
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
)
)
LGT_DELAY_INLINE_DEF
(
16,
DO_WHILE_0
(
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
)
)
LGT_DELAY_INLINE_DEF
(
13,
DO_WHILE_0
(
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
)
)
LGT_DELAY_INLINE_DEF
(
26,
DO_WHILE_0
(
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
)
)
LGT_DELAY_DCL(4);
LGT_DELAY_DCL(8);
LGT_DELAY_DCL(12);
LGT_DELAY_DCL(16);
LGT_DELAY_DCL(13);
LGT_DELAY_DCL(26);
#ifdef __cplusplus
}
#endif
#endif#include "lgt_delay.h"
LGT_DELAY_DEF(4);
LGT_DELAY_DEF(8);
LGT_DELAY_DEF(12);
LGT_DELAY_DEF(16);
LGT_DELAY_DEF(13);
LGT_DELAY_DEF(26);说明:
延时程序采用的是宏定义模板,基本上整数倍MHz时钟下(>=3Mhz),
就可以直接用这个宏模版定义延时函数。
延时函数的NOP个数等于时钟频率(单位Mhz)-3。
即4Mhz时钟下,1个NOP
而26Mhz时钟下,23个NOP
即3Mhz时钟下,0个NOP //0个NOP也要写一条内嵌汇编语句asm("")
下一步,LGT上 C++ LGT 发表于 2012-4-24 11:31 static/image/common/back.gif
IAR是比较灵活些。 建议楼主写个IAR的教程哈, 顺便把寄存器定义的文件公布下, 造福人类嘛:) ...
已经包含在工程文件。
IAR调试就是必须选个型号,这一点,和我本来预计的不一样。
不过仅仅选个型号162,其他如头文件,连接脚本,寄存器调试文件 都使用自定义就行了。 楼主真的是造福人类啊。 uc_c++ 发表于 2012-4-24 11:50 static/image/common/back.gif
已经包含在工程文件。
IAR调试就是必须选个型号,这一点,和我本来预计的不一样。
恩, 是这样。 辛苦楼主。
等我们更新JTAGICE到mkII兼容, 就不用那么麻烦了。 直接选164就好了。 LGT 发表于 2012-4-24 11:57 static/image/common/back.gif
恩, 是这样。 辛苦楼主。
等我们更新JTAGICE到mkII兼容, 就不用那么麻烦了。 直接选164就好了。 ...
请问什么时候更新调试器固件?{:lol:} uc_c++ 发表于 2012-4-24 11:47 static/image/common/back.gif
下一步,LGT上 C++
这个一定要支持下,一直没怎么看过C++写单片机程序,很好奇
其好处和坏处有哪些? xsh2005105326 发表于 2012-4-24 12:09 static/image/common/back.gif
请问什么时候更新调试器固件?
计划下周之内首先发布一版支持IAR的供大家测试使用。 uc_c++ 发表于 2012-4-24 11:31 static/image/common/back.gif
附带IAR设置:
xcl文件是怎么改的? what I do is to incorporate cpu speed into the delay routines so that the delays are (largely) invariant of the cpu speed.
something like this:
#define DLY_MS300//basic delay for 1ms at 1Mhz F_CPU
void delay_ms(unsigned short ms) {
while (ms--) delay(DLY_MS * (F_CPU / 1000000ul));
}
so all you need to do, when porting the code from one mcu to another is to recalibrate DLY_MS.
millwood0 发表于 2012-5-4 21:06
what I do is to incorporate cpu speed into the delay routines so that the delays are (largely) invar ...
a perfect suggest.thanks 很好很强大!留名学习。
页:
[1]