uc_c++ 发表于 2012-4-24 11:22:35

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:31:12

本帖最后由 uc_c++ 于 2012-4-24 11:36 编辑

附带IAR设置:

LGT 发表于 2012-4-24 11:31:21

IAR是比较灵活些。 建议楼主写个IAR的教程哈, 顺便把寄存器定义的文件公布下, 造福人类嘛:)

uc_c++ 发表于 2012-4-24 11:43:56

本帖最后由 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("")

uc_c++ 发表于 2012-4-24 11:47:01

下一步,LGT上 C++

uc_c++ 发表于 2012-4-24 11:50:54

LGT 发表于 2012-4-24 11:31 static/image/common/back.gif
IAR是比较灵活些。 建议楼主写个IAR的教程哈, 顺便把寄存器定义的文件公布下, 造福人类嘛:) ...

已经包含在工程文件。

IAR调试就是必须选个型号,这一点,和我本来预计的不一样。
不过仅仅选个型号162,其他如头文件,连接脚本,寄存器调试文件 都使用自定义就行了。

xue_pic 发表于 2012-4-24 11:53:06

楼主真的是造福人类啊。

LGT 发表于 2012-4-24 11:57:14

uc_c++ 发表于 2012-4-24 11:50 static/image/common/back.gif
已经包含在工程文件。

IAR调试就是必须选个型号,这一点,和我本来预计的不一样。


恩, 是这样。 辛苦楼主。

等我们更新JTAGICE到mkII兼容, 就不用那么麻烦了。 直接选164就好了。

xsh2005105326 发表于 2012-4-24 12:09:36

LGT 发表于 2012-4-24 11:57 static/image/common/back.gif
恩, 是这样。 辛苦楼主。

等我们更新JTAGICE到mkII兼容, 就不用那么麻烦了。 直接选164就好了。 ...

请问什么时候更新调试器固件?{:lol:}

pang123hui 发表于 2012-4-24 12:29:31

uc_c++ 发表于 2012-4-24 11:47 static/image/common/back.gif
下一步,LGT上 C++

这个一定要支持下,一直没怎么看过C++写单片机程序,很好奇

其好处和坏处有哪些?

LGT 发表于 2012-4-24 12:45:46

xsh2005105326 发表于 2012-4-24 12:09 static/image/common/back.gif
请问什么时候更新调试器固件?

计划下周之内首先发布一版支持IAR的供大家测试使用。

jianghu-00091 发表于 2012-5-4 20:38:40

uc_c++ 发表于 2012-4-24 11:31 static/image/common/back.gif
附带IAR设置:

xcl文件是怎么改的?

millwood0 发表于 2012-5-4 21:06:19

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.

mikewang011 发表于 2012-5-5 00:31:14

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

Jack.Yang 发表于 2014-4-24 15:58:47

很好很强大!留名学习。
页: [1]
查看完整版本: LGT上26M晶振(附带IAR调试设置+附带LGT各种时钟下延时程序)