4. PIN Configuration (Cont..)
4/23/2020 Electrical Product Development
Lab
4
LPC2148
PORT 0 PORT 1
P0.0 to P0.15 , P0.16 to P0.31 P1.0 to P1.15 , P1.16 to P1.31
Fig : 2 Distribution of PORT’s and PIN’s
5. PORTx
PORT 0:
• P0.0 to P0.15 → Lower 16 bit Pins
• P0.17 to P0.31 → Higher 16 bit Pins
PORT 1:
• P1.0 to P1.15 → Lower 16 bit Pins
• P1.17 to P1.31 → Higher 16 bit Pins
PORT 0 – Lower 16 bit and higher 16 bit
are used as GPIO pins
PORT 1 – Only higher 16 bit pins are used
as GPIO pins.
4/23/2020 Electrical Product Development
Lab
5
6. PORTx (Cont..)
• Pins of P1.0 to P1.15 of lower 16 bit pins
are not available for the user.
• Also P0.24, P0.26 and P0.27 are not
available for user.
• Out of 64 pins only user can use 45 Pins
of LPC2148.
4/23/2020 Electrical Product Development
Lab
6
7. Configuring PIN’s
• To use the 45 pins we must configure the pins by
configuring the following registers.
• IOxPIN/IOPINx → IO pin Status register
• IODIRx → Direction register
• IOSETx → State set register
• IOCLRx → PIN Clear register
• All the registers are 32 bit registers each bit
controls the each pin of LPC2148.
4/23/2020 Electrical Product Development
Lab
7
8. Configuring PIN’s
IOPINx – IO Pin Status register
Px.31 Px.27 Px.23 Px.19 Px.15 Px.11 Px.7 Px.3 Px.0
0000 0000 0000 0000 0000 0000 0000 0000
This can be written in the Hexa Decimal format
0 x 0 0 0 0 0 0 0 0
0x stands for hexa decimal deceleration
• Reading the values of pins can be done by
IOPINx
Ex: IOPIN0 = 0x0000000F
4/23/2020 Electrical Product Development
Lab
8
9. Configuring PIN’s (Cont…)
IODIRx - Direction register
• Assigning 0 → will make pin as INPUT
• Assigning 1 → will make pin as OUTPUT
• By default the pin value will be set as ‘0’
• If we want to change the pin P0.0 to P0.3
as OUTPUT pins then declaration will be
Ex: 0 x 0 0 0 0 0 0 0 F
4/23/2020 Electrical Product Development
Lab
9
10. Configuring PIN’s (Cont…)
IOSETx - State set register
Ex : 0 x 0 0 0 0 0 0 0 F // Px.0 to Px.3 as High
IOCLRx - PIN Clear register
Ex : 0 x 0 0 0 0 0 0 0 F // Px.0 to Px.3 satus will be
cleared
4/23/2020 Electrical Product Development
Lab
10
11. Configuring PIN’s (Cont…)
S1 S0 O/P
0 0 GPIO
0 1 1st
1 0 2nd
1 1 3rd
4/23/2020 Electrical Product Development
Lab
11
PSB
GPIO
Ist Alternate Function
2nd Alternate Function
Reserve
Px.y
S1 S0
x – 0 or 1
y – 0 to 31
Fig : 3 General Block Diagram of single
Table : 1 Selector Input and PIN State
S1 and S0 values are configured by associated register of PSB
12. Configuring PIN’s (Cont…)
• PSB – Pin Select Block has the following
registers
• PINSEL0 –Controls the pins from P0.0 to P0.15
• PINSEL1 –Controls the pins from P0.16 to P0.31
• PINSEL2 –Controls the pins from P1.16 to P1.31
• Each of the registers are 32 bit wide then how it
controls the 16 bit pins
4/23/2020 Electrical Product Development
Lab
12
13. Configuring PIN’s (Cont…)
• Lets take the example of PINSEL0 32 bit register
which controls the pins from P0.0 to P0.15.
• Similarly the registers of PINSEL1 and PINSEL2
will be distributed to the remaining pins of
corresponding PORTs
4/23/2020 Electrical Product Development
Lab
13
00
P0.12
00
P0.11
00
P0.10
00
P0.9
00
P0.8
00
P0.7
00
P0.6
00
P0.5
00
P0.4
00
P0.3
00
P0.2
00
P0.1
00
P0.0
S1 – S0S1 – S0
Fig : 4 Distribution of 32 bit registers to PINs of PORT 0
15. Configuring PIN’s (Cont…)
• Example for configuring P0.0 pin as a Tx Pin for
USART communication
• PINSEL0 = 0 x 0 0 0 0 0 0 0 1
P0.0 become as TxD0 by setting LSB values of P0.3
to P0.0 as 0001
4/23/2020 Electrical Product Development
Lab
15
PSB
GPIO
TxDo
PWM
Reserve
P0.0
S1 S0
Fig : 5 Features of P0.0 pin
16. Simple LED Blinking Program
• Blink the LED connected in PORT1
# include <lpc21xx.h> // Include header file
void delay(void);
int main(void)
{
PINSEL2 = 0x00000000; // Configure P1.16 as GPIO pin
IODIR1 = 0x00000000; // Configure P1.16 as OUTPT pin
while(1) {
IOSET1 = 0x00010000; // Turn ON LED at P1.16
delay(); // Wait for a while
IOCLR1 = 0x00010000; // Turn OFF LED at P1.16
delay(); // Wait for a while
}
}
4/23/2020 Electrical Product Development
Lab
16
17. Simple LED Blinking Program
void delay(void){
unsigned int j; // assign the variable j
for(j=0;j<1000000;j++) // Increment j till
} 1000000
4/23/2020 Electrical Product Development
Lab
17
18. Assignment
• Draw the circuit for the above program
• Write the program for blinking the LED from
P0.16 to P0.23.
4/23/2020 Electrical Product Development
Lab
18