搜索
bottom↓
回复: 8

lgt8f08a头文件。修改了IO口部分

[复制链接]

出0入0汤圆

发表于 2013-1-1 16:21:17 | 显示全部楼层 |阅读模式
这个头文件基于amo的lgt头文件修改而来。并且加入了对同步IO口的支持。使AVR式IO口写法得到了支持。
启发我的是《LGT端口输入寄存器PINA/B/C/D 正确使用方法 【重要,与AVR不同】》帖子。
但是使用他的方法,添加inline函数到头文件中,如果有多个C文件就会产生冲突。而且还会生成多余的代码。
后面我发现只需要改一下,加一个static关键字。反汇编的代码立马就干净了。并且也不会冲突了。
  1. #ifndef __iolgt8f0xa_h
  2. #define __iolgt8f0xa_h

  3. /* GUID */
  4. #define GUID3    (*(volatile unsigned char *)0xF6)
  5. #define GUID2    (*(volatile unsigned char *)0xF5)
  6. #define GUID1    (*(volatile unsigned char *)0xF4)
  7. #define GUID0    (*(volatile unsigned char *)0xF3)

  8. /* Power Management */
  9. #define PMCR    (*(volatile unsigned char *)0xF2)
  10. #define  RC16MEN    0
  11. #define  RC1KEN        1
  12. #define  OSCMEN        2
  13. #define  CFDS        4
  14. #define  EXTMSEL    5
  15. #define  LFEN        6

  16. /* RTC */
  17. #define RTCNTH    (*(volatile unsigned char *)0xD7)
  18. #define RTCNTM    (*(volatile unsigned char *)0xD6)
  19. #define RTCNTL    (*(volatile unsigned char *)0xD5)

  20. #define RTCTOPH    (*(volatile unsigned char *)0xD4)
  21. #define RTCTOPM    (*(volatile unsigned char *)0xD3)
  22. #define RTCTOPL    (*(volatile unsigned char *)0xD2)

  23. #define RTCISR    (*(volatile unsigned char *)0xD1)
  24. #define  IEN        0
  25. #define     IF        1
  26. #define  WKUF        7

  27. #define RTCSR    (*(volatile unsigned char *)0xD0)
  28. #define  POWOFF        0
  29. #define     EN            1
  30. #define  CWEN          2
  31. #define  PWEN          3
  32. #define  LOAD          4
  33. #define  WREN        7

  34. /* ADC */
  35. #define ADTM    (*(volatile unsigned char *)0x7D)
  36. #define  ADCTM2        2
  37. #define  ADCTM1        1
  38. #define  ADCTM0        0

  39. /* Oscillator Calibration Register */
  40. //#define OSCCAL    (*(volatile unsigned char *)0x66)
  41. #define  PRESETN    6
  42. #define  OSCCAL5    5
  43. #define  OSCCAL4    4
  44. #define  OSCCAL3    3
  45. #define  OSCCAL2    2
  46. #define  OSCCAL1    1
  47. #define  OSCCAL0    0

  48. /* MCU Control */
  49. //#define MCUCR    (*(volatile unsigned char *)0x55)
  50. #define  SWDD        7

  51. /* MCU Status */
  52. #define MCUCSR    (*(volatile unsigned char *)0x54)
  53. #define  SWRF         5
  54. #define  OCDRF         4
  55. #define  JTRF        4
  56. #define  WDRF         3
  57. //#define  EXTRF        1
  58. //#define  PORF         0

  59. /* EEPROM */
  60. #define EEDRH    (*(volatile unsigned char *)0x49)

  61. //#define EECR    (*(volatile unsigned char *)0x3F)
  62. #define EEPEN        7

  63. /* GTCCR */
  64. //#define GTCCR    (*(volatile unsigned char *)0x43)
  65. #define  PSR10        0


  66. /* Interrupt Vector Numbers */
  67. #define iv_RTC          28 // for iccavr
  68. #define RTC_vect            _VECTOR(27)
  69. #define SIG_RTC_READY            _VECTOR(27)

  70. /* */
  71. //用于fix掉输入pin的问题
  72. static inline unsigned char LGT_PINA()
  73. {
  74.         register unsigned char temp;
  75.         temp=PINA;
  76.         asm volatile ("" : "+r"(temp));
  77.         return temp;        
  78. }
  79. #undef PINA
  80. #define PINA LGT_PINA()

  81. static inline unsigned char LGT_PINB()
  82. {
  83.         register unsigned char temp;
  84.         temp=PINB;
  85.         asm volatile ("" : "+r"(temp));
  86.         return temp;        
  87. }
  88. #undef PINB
  89. #define PINB LGT_PINB()
  90. static inline unsigned char LGT_PINC()
  91. {
  92.         register unsigned char temp;
  93.         temp=PINC;
  94.         asm volatile ("" : "+r"(temp));
  95.         return temp;        
  96. }
  97. #undef PINC
  98. #define PINC LGT_PINC()
  99. static inline unsigned char LGT_PIND()
  100. {
  101.         register unsigned char temp;
  102.         temp=PIND;
  103.         asm volatile ("" : "+r"(temp));
  104.         return temp;        
  105. }
  106. #undef PIND
  107. #define PIND LGT_PIND()
  108. #endif
复制代码
代码:
  1.                 if(PIND & (1<<KEY_IN))
  2.                 {
  3.                         OCR1A=0xFF;
  4.                 }
复制代码
反汇编后
  d6:        29 b1               in        r18, 0x09        ; 9
  d8:        22 ff               sbrs        r18, 2
  da:        03 c0               rjmp        .+6              ; 0xe2 <main+0x18>

没有 LGT_XXX的符号在symbol中出现。

出0入0汤圆

发表于 2013-1-1 19:12:25 | 显示全部楼层
收藏了,等有机会用上LGT片子再细研究

出0入0汤圆

发表于 2013-1-1 23:29:51 | 显示全部楼层
谢谢分享

出0入0汤圆

发表于 2013-1-2 18:32:12 | 显示全部楼层
谢谢分享,收藏了~~~

出0入0汤圆

发表于 2013-1-2 21:48:55 | 显示全部楼层
谢谢分享,记号下。

出0入0汤圆

发表于 2013-1-23 17:23:53 | 显示全部楼层
这个只写纯c时可以用
但如果是asm与c混合会无法include

出0入0汤圆

 楼主| 发表于 2013-1-25 19:27:30 | 显示全部楼层
malsvent 发表于 2013-1-23 17:23
这个只写纯c时可以用
但如果是asm与c混合会无法include


对。这个就是纠结的地方。不过貌似我在gcc里asm没问题。不过自己写S文件 include的后果就是报错

出0入0汤圆

发表于 2013-5-10 21:56:00 | 显示全部楼层
谢谢分享,记号下。

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-5-5 13:50

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

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