以前学习的是LPC2103,使用的是周立功的工程模板,现在自己买了一块mini2440,就想着从0开始,自己搞一个简单的模板,昨天写了一个,拿出来分享分享,希望有用,^_^。
#define GPIOBASE 0x56000000
#define GPXCON_ADDR(x) (*(volatile unsigned long *)(GPIOBASE + x))
#define GPXDAT_ADDR(x) (*(volatile unsigned long *)(GPIOBASE + x + 4))
#define GPXUP_ADDR(x) (*(volatile unsigned long *)(GPIOBASE + x + 8))
#define GPA 0x0
#define GPB 0x10
#define GPC 0x20
#define GPD 0x30
#define GPE 0x40
#define GPF 0x50
#define GPG 0x60
#define GPH 0x70
#define GPJ 0xd0
#define GPACON GPXCON_ADDR(GPA)
#define GPADAT GPXDAT_ADDR(GPA)
#define GPAXOUT(x) (GPACON & (GPXMASK & (0x0 << x)))
#define GPBCON GPXCON_ADDR(GPB)
#define GPBDAT GPXDAT_ADDR(GPB)
#define GPBUP GPXUP_ADDR(GPB)
#define GPCCON GPXCON_ADDR(GPC)
#define GPCDAT GPXDAT_ADDR(GPC)
#define GPCUP GPXUP_ADDR(GPC)
#define GPDCON GPXCON_ADDR(GPD)
#define GPDDAT GPXDAT_ADDR(GPD)
#define GPDUP GPXUP_ADDR(GPD)
#define GPECON GPXCON_ADDR(GPE)
#define GPEDAT GPXDAT_ADDR(GPE)
#define GPEUP GPXUP_ADDR(GPE)
#define GPFCON GPXCON_ADDR(GPF)
#define GPFDAT GPXDAT_ADDR(GPF)
#define GPFUP GPXUP_ADDR(GPF)
#define GPGCON GPXCON_ADDR(GPG)
#define GPGDAT GPXDAT_ADDR(GPG)
#define GPGUP GPXUP_ADDR(GPG)
#define GPHCON GPXCON_ADDR(GPH)
#define GPHDAT GPXDAT_ADDR(GPH)
#define GPHUP GPXUP_ADDR(GPH)
#define GPJCON GPXCON_ADDR(GPJ)
#define GPJDAT GPXDAT_ADDR(GPJ)
#define GPJUP GPXUP_ADDR(GPJ)
/******************************************************************************
设置GPIO控制端口GPXCON的x位为输出,GPXCON必须为GPBCON~GPJCON,
x必须<=16
******************************************************************************/
#define GPXXOUT(GPXCON,x) (GPXCON = ((GPXCON & ~(0x3 << (2 * x))) | (0x1 << (2 * x))))
/******************************************************************************
设置GPIO控制端口GPXCON的x位为输入,GPXCON必须为GPBCON~GPJCON,
x必须<=16
******************************************************************************/
#define GPXXIN(GPXCON,x) (GPXCON = ((GPXCON & ~(0x3 << (2 * x)))))
/********************************************************************************
设置GPIO端口GPXDAT的x位为高电平,GPXCON必须为GPBCON~GPJCON,
x视不同的BANK拥有的I/O口的个数而定
********************************************************************************/
#define GPXXSET(GPXDAT, x) GPXDAT = GPXDAT | (1 << x)
/********************************************************************************
设置GPIO端口GPXDAT的x位为低电平,GPXCON必须为GPBCON~GPJCON,
x视不同的BANK拥有的I/O口的个数而定
********************************************************************************/
#define GPXXCLR(GPXDAT, x) GPXDAT = GPXDAT & ~(1 << x)
/*******************************************************************************
拉高GPXUP端口的x位,GPXCON必须为GPBCON~GPJCON,
x视不同的BANK拥有的I/O口的个数而定
*******************************************************************************/
#define GPXUPSET(GPXUP, x) GPXUP = GPXUP | (1 << x)
/*******************************************************************************
拉低GPXUP端口的x位,GPXCON必须为GPBCON~GPJCON,
x视不同的BANK拥有的I/O口的个数而定
*******************************************************************************/
#define GPXUPCLR(GPXUP, x) GPXUP = GPXUP & ~(1 << x)
|
当然,这只是一个一个头文件,下面是一个使用ADS1.2建立的完整的工程,功能是按键亮灯,包括Init.S(汇编代码,算是个小小的引导吧),io.h(就是上面的代码),main.c(按键亮灯)。
阅读(2599) | 评论(4) | 转发(0) |