xwkm 发表于 2013-1-1 16:21:17

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

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

/* GUID */
#define GUID3    (*(volatile unsigned char *)0xF6)
#define GUID2    (*(volatile unsigned char *)0xF5)
#define GUID1    (*(volatile unsigned char *)0xF4)
#define GUID0    (*(volatile unsigned char *)0xF3)

/* Power Management */
#define PMCR    (*(volatile unsigned char *)0xF2)
#defineRC16MEN    0
#defineRC1KEN      1
#defineOSCMEN      2
#defineCFDS      4
#defineEXTMSEL    5
#defineLFEN      6

/* RTC */
#define RTCNTH    (*(volatile unsigned char *)0xD7)
#define RTCNTM    (*(volatile unsigned char *)0xD6)
#define RTCNTL    (*(volatile unsigned char *)0xD5)

#define RTCTOPH    (*(volatile unsigned char *)0xD4)
#define RTCTOPM    (*(volatile unsigned char *)0xD3)
#define RTCTOPL    (*(volatile unsigned char *)0xD2)

#define RTCISR    (*(volatile unsigned char *)0xD1)
#defineIEN      0
#define   IF      1
#defineWKUF      7

#define RTCSR    (*(volatile unsigned char *)0xD0)
#definePOWOFF      0
#define   EN            1
#defineCWEN          2
#definePWEN          3
#defineLOAD          4
#defineWREN      7

/* ADC */
#define ADTM    (*(volatile unsigned char *)0x7D)
#defineADCTM2      2
#defineADCTM1      1
#defineADCTM0      0

/* Oscillator Calibration Register */
//#define OSCCAL    (*(volatile unsigned char *)0x66)
#definePRESETN    6
#defineOSCCAL5    5
#defineOSCCAL4    4
#defineOSCCAL3    3
#defineOSCCAL2    2
#defineOSCCAL1    1
#defineOSCCAL0    0

/* MCU Control */
//#define MCUCR    (*(volatile unsigned char *)0x55)
#defineSWDD      7

/* MCU Status */
#define MCUCSR    (*(volatile unsigned char *)0x54)
#defineSWRF         5
#defineOCDRF         4
#defineJTRF      4
#defineWDRF         3
//#defineEXTRF      1
//#definePORF         0

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

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

/* GTCCR */
//#define GTCCR    (*(volatile unsigned char *)0x43)
#definePSR10      0


/* Interrupt Vector Numbers */
#define iv_RTC          28 // for iccavr
#define RTC_vect            _VECTOR(27)
#define SIG_RTC_READY            _VECTOR(27)

/* */
//用于fix掉输入pin的问题
static inline unsigned char LGT_PINA()
{
      register unsigned char temp;
      temp=PINA;
      asm volatile ("" : "+r"(temp));
      return temp;      
}
#undef PINA
#define PINA LGT_PINA()

static inline unsigned char LGT_PINB()
{
      register unsigned char temp;
      temp=PINB;
      asm volatile ("" : "+r"(temp));
      return temp;      
}
#undef PINB
#define PINB LGT_PINB()
static inline unsigned char LGT_PINC()
{
      register unsigned char temp;
      temp=PINC;
      asm volatile ("" : "+r"(temp));
      return temp;      
}
#undef PINC
#define PINC LGT_PINC()
static inline unsigned char LGT_PIND()
{
      register unsigned char temp;
      temp=PIND;
      asm volatile ("" : "+r"(temp));
      return temp;      
}
#undef PIND
#define PIND LGT_PIND()
#endif
代码:                if(PIND & (1<<KEY_IN))
                {
                        OCR1A=0xFF;
                }反汇编后
d6:        29 b1               in        r18, 0x09        ; 9
d8:        22 ff               sbrs        r18, 2
da:        03 c0               rjmp        .+6              ; 0xe2 <main+0x18>
没有 LGT_XXX的符号在symbol中出现。

freeboyxd 发表于 2013-1-1 19:12:25

收藏了,等有机会用上LGT片子再细研究

goodcode 发表于 2013-1-1 23:29:51

谢谢分享

zhuisuoji 发表于 2013-1-2 18:32:12

谢谢分享,收藏了~~~

wwk1996 发表于 2013-1-2 21:48:55

谢谢分享,记号下。

malsvent 发表于 2013-1-23 17:23:53

这个只写纯c时可以用
但如果是asm与c混合会无法include{:dizzy:}

xwkm 发表于 2013-1-25 19:27:30

malsvent 发表于 2013-1-23 17:23 static/image/common/back.gif
这个只写纯c时可以用
但如果是asm与c混合会无法include

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

liujian6f 发表于 2013-5-10 21:56:00

谢谢分享,记号下。

ybx520 发表于 2013-7-29 19:03:11

谢谢分享
页: [1]
查看完整版本: lgt8f08a头文件。修改了IO口部分