搜索
bottom↓
回复: 14

LGT上26M晶振(附带IAR调试设置+附带LGT各种时钟下延时程序)

[复制链接]

出0入0汤圆

发表于 2012-4-24 11:22:35 | 显示全部楼层 |阅读模式
本帖最后由 uc_c++ 于 2012-4-24 21:51 编辑

手上没32M晶振,只有26M的,就用26M试试。

  1. #include "iolgt8f0xa.h"
  2. #include "lgt_delay.h"

  3. int main()
  4. {
  5.    DDRC  &=  ~(MASK_PORTC0|MASK_PORTC1);    //PC0和PC1为输入
  6.    PORTC &=  ~(MASK_PORTC0|MASK_PORTC1);    //PC0和PC1禁止上拉
  7.    
  8.    PMCR =    MASK_RC16MEN|MASK_OSCMEN;     //使能外部晶振
  9.    lgt_delay_ms_8m(10);                    //延时10ms等待晶振输入稳定
  10.    PMCR =    MASK_RC16MEN|MASK_OSCMEN|MASK_EXTMSEL;     //切换主时钟为外部晶振
  11.    PMCR =    MASK_OSCMEN|MASK_EXTMSEL;     //禁止内部RC

  12.    
  13.    CLKPR |=  MASK_CLKPCE;    //置位MASK_CLKPCE,4个周期内修改分频系数
  14.    CLKPR  =  MASK_CLKPCE;    //1分频
  15.    CLKPR &= ~MASK_CLKPCE;    //清除 MASK_CLKPCE
  16.    
  17.    
  18.   PORTA=0x00;
  19.   DDRA=0x01;

  20.   while(1)
  21.   {   
  22.     PORTA=0x00;
  23.     lgt_delay_us_26m(1000);
  24.     PORTA=0x01;
  25.     lgt_delay_us_26m(1000);   
  26.   }
  27. }
复制代码
IAR 调试LGT可以查看LGT独有寄存器。

本帖子中包含更多资源

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

x

出0入0汤圆

 楼主| 发表于 2012-4-24 11:31:12 | 显示全部楼层
本帖最后由 uc_c++ 于 2012-4-24 11:36 编辑

附带IAR设置:

本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2012-4-24 11:31:21 | 显示全部楼层
IAR是比较灵活些。 建议楼主写个IAR的教程哈, 顺便把寄存器定义的文件公布下, 造福人类嘛:)

出0入0汤圆

 楼主| 发表于 2012-4-24 11:43:56 | 显示全部楼层
本帖最后由 uc_c++ 于 2012-4-24 13:23 编辑

附带LGT各种时钟下延时程序:
  1. #ifndef __LGT_DELAY_H__
  2. #define __LGT_DELAY_H__

  3. #include "uni_int.h"
  4. #include "uni_int.h"
  5. #include "iar_macro.h"
  6. #include "util_macro.h"

  7. #ifdef __cplusplus
  8. extern "C"{
  9. #endif
  10.   
  11. #define LGT_DELAY_INLINE_DEF(A,B) \
  12.   __always_inline__ void lgt_inline_delay_us_##A##m(uint16 us)\
  13. {\
  14.   while(us--)\
  15.   {\
  16.     B;\
  17.   }\
  18. }\
  19. __always_inline__ void lgt_inline_delay_ms_##A##m(uint16 ms)\
  20. {\
  21.   while(ms--)\
  22.   {\
  23.     lgt_inline_delay_us_##A##m(1000);\
  24.   }\
  25. }   
  26. #define LGT_DELAY_DCL(A) \
  27.    void lgt_delay_us_##A##m(uint16 us);\
  28.    void lgt_delay_ms_##A##m(uint16 ms)
  29.   
  30. #define LGT_DELAY_DEF(A) \
  31. void lgt_delay_us_##A##m(uint16 us)\
  32. {\
  33.   lgt_inline_delay_us_##A##m(us);\
  34. }\
  35. void lgt_delay_ms_##A##m(uint16 ms)\
  36.   {\
  37.     lgt_inline_delay_ms_##A##m(ms);\
  38. }\

  39.   
  40. LGT_DELAY_INLINE_DEF
  41. (
  42. 4,
  43. DO_WHILE_0
  44. (
  45.   asm("nop");
  46. )
  47. )

  48. LGT_DELAY_INLINE_DEF
  49. (
  50. 8,
  51. DO_WHILE_0
  52. (
  53.   asm("nop");
  54.   asm("nop");
  55.   asm("nop");
  56.   asm("nop");
  57.   asm("nop");
  58. )
  59. )

  60. LGT_DELAY_INLINE_DEF
  61. (
  62. 12,
  63. DO_WHILE_0
  64. (
  65.   asm("nop");
  66.   asm("nop");
  67.   asm("nop");
  68.   asm("nop");
  69.   asm("nop");
  70.   asm("nop");
  71.   asm("nop");
  72.   asm("nop");
  73.   asm("nop");  
  74. )
  75. )

  76. LGT_DELAY_INLINE_DEF
  77. (
  78. 16,
  79. DO_WHILE_0
  80. (
  81.   asm("nop");
  82.   asm("nop");
  83.   asm("nop");
  84.   asm("nop");
  85.   asm("nop");
  86.   asm("nop");
  87.   asm("nop");
  88.   asm("nop");
  89.   asm("nop");
  90.   asm("nop");
  91.   asm("nop");
  92.   asm("nop");
  93.   asm("nop");   
  94. )
  95. )

  96. LGT_DELAY_INLINE_DEF
  97. (
  98. 13,
  99. DO_WHILE_0
  100. (
  101.   asm("nop");
  102.   asm("nop");
  103.   asm("nop");
  104.   asm("nop");
  105.   asm("nop");
  106.   asm("nop");
  107.   asm("nop");
  108.   asm("nop");
  109.   asm("nop");
  110.   asm("nop");  
  111. )
  112. )

  113. LGT_DELAY_INLINE_DEF
  114. (
  115. 26,
  116. DO_WHILE_0
  117. (
  118.   asm("nop");
  119.   asm("nop");
  120.   asm("nop");
  121.   asm("nop");
  122.   asm("nop");
  123.   asm("nop");
  124.   asm("nop");
  125.   asm("nop");
  126.   asm("nop");
  127.   asm("nop");
  128.   asm("nop");
  129.   asm("nop");
  130.   asm("nop");
  131.   asm("nop");
  132.   asm("nop");
  133.   asm("nop");
  134.   asm("nop");
  135.   asm("nop");
  136.   asm("nop");
  137.   asm("nop");
  138.   asm("nop");
  139.   asm("nop");
  140.   asm("nop");  
  141. )
  142. )

  143.   
  144. LGT_DELAY_DCL(4);
  145. LGT_DELAY_DCL(8);
  146. LGT_DELAY_DCL(12);
  147. LGT_DELAY_DCL(16);
  148. LGT_DELAY_DCL(13);
  149. LGT_DELAY_DCL(26);
  150.   
  151. #ifdef __cplusplus
  152. }
  153. #endif
  154. #endif
复制代码
  1. #include "lgt_delay.h"

  2. LGT_DELAY_DEF(4);
  3. LGT_DELAY_DEF(8);
  4. LGT_DELAY_DEF(12);
  5. LGT_DELAY_DEF(16);
  6. LGT_DELAY_DEF(13);
  7. LGT_DELAY_DEF(26);
复制代码
说明:
延时程序采用的是宏定义模板,基本上整数倍MHz时钟下(>=3Mhz),
就可以直接用这个宏模版定义延时函数。

延时函数的NOP个数等于时钟频率(单位Mhz)-3。
即4Mhz时钟下,  1个NOP
而26Mhz时钟下,23个NOP
即3Mhz时钟下,  0个NOP        //0个NOP也要写一条内嵌汇编语句asm("")

出0入0汤圆

 楼主| 发表于 2012-4-24 11:47:01 | 显示全部楼层
下一步,LGT上 C++

出0入0汤圆

 楼主| 发表于 2012-4-24 11:50:54 | 显示全部楼层
LGT 发表于 2012-4-24 11:31
IAR是比较灵活些。 建议楼主写个IAR的教程哈, 顺便把寄存器定义的文件公布下, 造福人类嘛:) ...

已经包含在工程文件。

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

出0入0汤圆

发表于 2012-4-24 11:53:06 | 显示全部楼层
楼主真的是造福人类啊。

出0入0汤圆

发表于 2012-4-24 11:57:14 | 显示全部楼层
uc_c++ 发表于 2012-4-24 11:50
已经包含在工程文件。

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

恩, 是这样。 辛苦楼主。

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

出0入0汤圆

发表于 2012-4-24 12:09:36 | 显示全部楼层
LGT 发表于 2012-4-24 11:57
恩, 是这样。 辛苦楼主。

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

请问什么时候更新调试器固件?

出0入0汤圆

发表于 2012-4-24 12:29:31 | 显示全部楼层
uc_c++ 发表于 2012-4-24 11:47
下一步,LGT上 C++

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

其好处和坏处有哪些?

出0入0汤圆

发表于 2012-4-24 12:45:46 | 显示全部楼层
xsh2005105326 发表于 2012-4-24 12:09
请问什么时候更新调试器固件?

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

出0入0汤圆

发表于 2012-5-4 20:38:40 | 显示全部楼层
uc_c++ 发表于 2012-4-24 11:31
附带IAR设置:

xcl文件是怎么改的?

出0入0汤圆

发表于 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_MS  300  //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.

出0入0汤圆

发表于 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

出0入0汤圆

发表于 2014-4-24 15:58:47 | 显示全部楼层
很好很强大!留名学习。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-5 18:11

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

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