Yahoo Groups archive

Lpc2000

Index last updated: 2026-04-28 23:31 UTC

Message

Re: Bit addressing

2006-03-02 by pitstock_kiwi

Bit addressing can be a lot simpler than all the stuff I have seen so 
far.

Firstly the LPC214X.H is missing the byte access registers. Why write 
32 bit address unless you need to? Also why use the old (slower) 
legacy port IO? FAST IO should be the standard from what I see.

Use this line to turn on your fast ports unless you have some reason 
to use the old stuff.
SCS |= 0x00000003; // enable FIQ on port 0 and 1

I have an led on port 0.20 so heres the initialisation for it

// LED on port 0.20, 0x10 
FIO0DIR2 |= 0x10;   // Led pin as output
FIO0MASK2 |= ~0x10;  // Led masked for use
FIO0SET2 |= 0x10;   // turn on led

And heres how I toggle the port

  if (FIO0PIN2 & 0x10){  // if led is on    Same as if (P0_20 == 1)
   FIO0CLR2 |= 0x10;}   // turn off led.   Same as  P0_20 = 0;
  else{
   FIO0SET2 |= 0x10;}   // turn on led    Same as  P0_20 =1;

Because we have masked only one bit it could be even simpler if we 
want
   FIO0SET2 = 0xFF;   // turn on led
   FIO0CLR2 = 0x00;   // turn off led    

Hope this helps
Kiwi Keith


Heres what I added to the LPC214X.H so I could byte access the port 
as the UM10139_1.pdf mentioned

// ******************* LPC214X.H ***********************************
// Added by Keith
#define FIO0DIRL        (*((volatile unsigned int  *) 0x3FFFC000))//  
0 - 15
#define FIO0DIRU        (*((volatile unsigned int  *) 0x3FFFC002))// 
16 - 31
#define FIO0DIR0        (*((volatile unsigned char *) 0x3FFFC000))//  
0 -  7
#define FIO0DIR1        (*((volatile unsigned char *) 0x3FFFC001))//  
8 - 15
#define FIO0DIR2        (*((volatile unsigned char *) 0x3FFFC002))// 
15 - 23
#define FIO0DIR3        (*((volatile unsigned char *) 0x3FFFC003))// 
24 - 31
// End: Added by Keith

#define FIO0MASK        (*((volatile unsigned long *) 0x3FFFC010))
// Added by Keith
#define FIO0MASKL       (*((volatile unsigned int  *) 0x3FFFC010))//  
0 - 15
#define FIO0MASKU       (*((volatile unsigned int  *) 0x3FFFC012))// 
16 - 31
#define FIO0MASK0       (*((volatile unsigned char *) 0x3FFFC010))//  
0 -  7
#define FIO0MASK1       (*((volatile unsigned char *) 0x3FFFC011))//  
8 - 15
#define FIO0MASK2       (*((volatile unsigned char *) 0x3FFFC012))// 
15 - 23
#define FIO0MASK3       (*((volatile unsigned char *) 0x3FFFC013))// 
24 - 31
// End: Added by Keith

#define FIO0PIN         (*((volatile unsigned long *) 0x3FFFC014))
// Added by Keith
#define FIO0PINL        (*((volatile unsigned int  *) 0x3FFFC014))//  
0 - 15
#define FIO0PINU        (*((volatile unsigned int  *) 0x3FFFC016))// 
16 - 31
#define FIO0PIN0        (*((volatile unsigned char *) 0x3FFFC014))//  
0 -  7
#define FIO0PIN1        (*((volatile unsigned char *) 0x3FFFC015))//  
8 - 15
#define FIO0PIN2        (*((volatile unsigned char *) 0x3FFFC016))// 
15 - 23
#define FIO0PIN3        (*((volatile unsigned char *) 0x3FFFC017))// 
24 - 31
// End: Added by Keith

#define FIO0SET         (*((volatile unsigned long *) 0x3FFFC018))
 // Added by Keith
#define FIO0SETL        (*((volatile unsigned int  *) 0x3FFFC018))//  
0 - 15
#define FIO0SETU        (*((volatile unsigned int  *) 0x3FFFC01A))// 
16 - 31
#define FIO0SET0        (*((volatile unsigned char *) 0x3FFFC018))//  
0 -  7
#define FIO0SET1        (*((volatile unsigned char *) 0x3FFFC019))//  
8 - 15
#define FIO0SET2        (*((volatile unsigned char *) 0x3FFFC01A))// 
15 - 23
#define FIO0SET3        (*((volatile unsigned char *) 0x3FFFC01B))// 
24 - 31
// End: Added by Keith

#define FIO0CLR         (*((volatile unsigned long *) 0x3FFFC01C))
 // Added by Keith
#define FIO0CLRL        (*((volatile unsigned int  *) 0x3FFFC01C))//  
0 - 15
#define FIO0CLRU        (*((volatile unsigned int  *) 0x3FFFC01E))// 
16 - 31
#define FIO0CLR0        (*((volatile unsigned char *) 0x3FFFC01C))//  
0 -  7
#define FIO0CLR1        (*((volatile unsigned char *) 0x3FFFC01D))//  
8 - 15
#define FIO0CLR2        (*((volatile unsigned char *) 0x3FFFC01E))// 
15 - 23
#define FIO0CLR3        (*((volatile unsigned char *) 0x3FFFC01F))// 
24 - 31
// End: Added by Keith

// SCS |= 0x00000002; // enable FIQ on port 1
#define FIO1DIR         (*((volatile unsigned long *) 0x3FFFC020))
 // Added by Keith
#define FIO1DIRL        (*((volatile unsigned int  *) 0x3FFFC020))//  
0 - 15
#define FIO1DIRU        (*((volatile unsigned int  *) 0x3FFFC022))// 
16 - 31
#define FIO1DIR0        (*((volatile unsigned char *) 0x3FFFC020))//  
0 -  7
#define FIO1DIR1        (*((volatile unsigned char *) 0x3FFFC021))//  
8 - 15
#define FIO1DIR2        (*((volatile unsigned char *) 0x3FFFC022))// 
15 - 23
#define FIO1DIR3        (*((volatile unsigned char *) 0x3FFFC023))// 
24 - 31
// End: Added by Keith

#define FIO1MASK        (*((volatile unsigned long *) 0x3FFFC030))
 // Added by Keith
#define FIO1MASKL       (*((volatile unsigned int  *) 0x3FFFC030))//  
0 - 15
#define FIO1MASKU       (*((volatile unsigned int  *) 0x3FFFC032))// 
16 - 31
#define FIO1MASK0       (*((volatile unsigned char *) 0x3FFFC030))//  
0 -  7
#define FIO1MASK1       (*((volatile unsigned char *) 0x3FFFC031))//  
8 - 15
#define FIO1MASK2       (*((volatile unsigned char *) 0x3FFFC032))// 
15 - 23
#define FIO1MASK3       (*((volatile unsigned char *) 0x3FFFC033))// 
24 - 31
// End: Added by Keith

#define FIO1PIN         (*((volatile unsigned long *) 0x3FFFC034))
 // Added by Keith
#define FIO1PINL        (*((volatile unsigned int  *) 0x3FFFC034))//  
0 - 15
#define FIO1PINU        (*((volatile unsigned int  *) 0x3FFFC036))// 
16 - 31
#define FIO1PIN0        (*((volatile unsigned char *) 0x3FFFC034))//  
0 -  7
#define FIO1PIN1        (*((volatile unsigned char *) 0x3FFFC035))//  
8 - 15
#define FIO1PIN2        (*((volatile unsigned char *) 0x3FFFC036))// 
15 - 23
#define FIO1PIN3        (*((volatile unsigned char *) 0x3FFFC037))// 
24 - 31
// End: Added by Keith

#define FIO1SET         (*((volatile unsigned long *) 0x3FFFC038))
 // Added by Keith
#define FIO1SETL        (*((volatile unsigned int  *) 0x3FFFC038))//  
0 - 15
#define FIO1SETU        (*((volatile unsigned int  *) 0x3FFFC03A))// 
16 - 31
#define FIO1SET0        (*((volatile unsigned char *) 0x3FFFC038))//  
0 -  7
#define FIO1SET1        (*((volatile unsigned char *) 0x3FFFC039))//  
8 - 15
#define FIO1SET2        (*((volatile unsigned char *) 0x3FFFC03A))// 
15 - 23
#define FIO1SET3        (*((volatile unsigned char *) 0x3FFFC03B))// 
24 - 31
// End: Added by Keith

#define FIO1CLR         (*((volatile unsigned long *) 0x3FFFC03C))
 // Added by Keith
#define FIO1CLRL        (*((volatile unsigned int  *) 0x3FFFC03C))//  
0 - 15
#define FIO1CLRU        (*((volatile unsigned int  *) 0x3FFFC03E))// 
16 - 31
#define FIO1CLR0        (*((volatile unsigned char *) 0x3FFFC03C))//  
0 -  7
#define FIO1CLR1        (*((volatile unsigned char *) 0x3FFFC03D))//  
8 - 15
#define FIO1CLR2        (*((volatile unsigned char *) 0x3FFFC03E))// 
15 - 23
#define FIO1CLR3        (*((volatile unsigned char *) 0x3FFFC03F))// 
24 - 31
// End: Added by Keith

Attachments

Move to quarantaine

This moves the raw source file on disk only. The archive index is not changed automatically, so you still need to run a manual refresh afterward.