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中出现。
收藏了,等有机会用上LGT片子再细研究 谢谢分享 谢谢分享,收藏了~~~ 谢谢分享,记号下。 这个只写纯c时可以用
但如果是asm与c混合会无法include{:dizzy:} malsvent 发表于 2013-1-23 17:23 static/image/common/back.gif
这个只写纯c时可以用
但如果是asm与c混合会无法include
对。这个就是纠结的地方。不过貌似我在gcc里asm没问题。不过自己写S文件 include的后果就是报错 谢谢分享,记号下。 谢谢分享
页:
[1]