Skip to content

Commit 794ab9c

Browse files
committed
Fixed #9 and test ticker test code
Clean-up GPIO stuff, but it shoud be same behavior as before.
1 parent 796bbbe commit 794ab9c

File tree

3 files changed

+59
-81
lines changed

3 files changed

+59
-81
lines changed

libraries/mbed/targets/hal/TARGET_NXP/TARGET_LPC11XX/PinNames.h

Lines changed: 47 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -27,55 +27,57 @@ typedef enum {
2727
PIN_OUTPUT
2828
} PinDirection;
2929

30-
#define PORT_SHIFT 5
30+
#define PORT_SHIFT 12
31+
#define PIN_SHIFT 8
3132

3233
typedef enum {
3334
// LPC1114 Pin Names (PORT[15:12] + PIN[11:8] + IOCON offset[7:0])
34-
P0_0 = 0x000c,
35-
P0_1 = 0x0110,
36-
P0_2 = 0x021c,
37-
P0_3 = 0x032c,
38-
P0_4 = 0x0430,
39-
P0_5 = 0x0534,
40-
P0_6 = 0x064c,
41-
P0_7 = 0x0750,
42-
P0_8 = 0x0860,
43-
P0_9 = 0x0964,
44-
P0_10 = 0x0a68,
45-
P0_11 = 0x0b74,
46-
47-
P1_0 = 0x1078,
48-
P1_1 = 0x117c,
49-
P1_2 = 0x1280,
50-
P1_3 = 0x1390,
51-
P1_4 = 0x1494,
52-
P1_5 = 0x15a0,
53-
P1_6 = 0x16a4,
54-
P1_7 = 0x17a8,
55-
P1_8 = 0x1814,
56-
P1_9 = 0x1938,
57-
P1_10 = 0x1a6c,
58-
P1_11 = 0x1b98,
59-
60-
P2_0 = 0x2008,
61-
P2_1 = 0x2128,
62-
P2_2 = 0x225c,
63-
P2_3 = 0x238c,
64-
P2_4 = 0x2440,
65-
P2_5 = 0x2544,
66-
P2_6 = 0x2600,
67-
P2_7 = 0x2720,
68-
P2_8 = 0x2824,
69-
P2_9 = 0x2954,
70-
P2_10 = 0x2a58,
71-
P2_11 = 0x2b70,
35+
36+
P0_0 = (0 << PORT_SHIFT) | (0 << PIN_SHIFT) | 0x0c,
37+
P0_1 = (0 << PORT_SHIFT) | (1 << PIN_SHIFT) | 0x10,
38+
P0_2 = (0 << PORT_SHIFT) | (2 << PIN_SHIFT) | 0x1c,
39+
P0_3 = (0 << PORT_SHIFT) | (3 << PIN_SHIFT) | 0x2c,
40+
P0_4 = (0 << PORT_SHIFT) | (4 << PIN_SHIFT) | 0x30,
41+
P0_5 = (0 << PORT_SHIFT) | (5 << PIN_SHIFT) | 0x34,
42+
P0_6 = (0 << PORT_SHIFT) | (6 << PIN_SHIFT) | 0x4c,
43+
P0_7 = (0 << PORT_SHIFT) | (7 << PIN_SHIFT) | 0x50,
44+
P0_8 = (0 << PORT_SHIFT) | (8 << PIN_SHIFT) | 0x60,
45+
P0_9 = (0 << PORT_SHIFT) | (9 << PIN_SHIFT) | 0x64,
46+
P0_10 = (0 << PORT_SHIFT) | (10 << PIN_SHIFT) | 0x68,
47+
P0_11 = (0 << PORT_SHIFT) | (11 << PIN_SHIFT) | 0x74,
48+
49+
P1_0 = (1 << PORT_SHIFT) | (0 << PIN_SHIFT) | 0x78,
50+
P1_1 = (1 << PORT_SHIFT) | (1 << PIN_SHIFT) | 0x7c,
51+
P1_2 = (1 << PORT_SHIFT) | (2 << PIN_SHIFT) | 0x80,
52+
P1_3 = (1 << PORT_SHIFT) | (3 << PIN_SHIFT) | 0x90,
53+
P1_4 = (1 << PORT_SHIFT) | (4 << PIN_SHIFT) | 0x94,
54+
P1_5 = (1 << PORT_SHIFT) | (5 << PIN_SHIFT) | 0xa0,
55+
P1_6 = (1 << PORT_SHIFT) | (6 << PIN_SHIFT) | 0xa4,
56+
P1_7 = (1 << PORT_SHIFT) | (7 << PIN_SHIFT) | 0xa8,
57+
P1_8 = (1 << PORT_SHIFT) | (8 << PIN_SHIFT) | 0x14,
58+
P1_9 = (1 << PORT_SHIFT) | (9 << PIN_SHIFT) | 0x38,
59+
P1_10 = (1 << PORT_SHIFT) | (10 << PIN_SHIFT) | 0x6c,
60+
P1_11 = (1 << PORT_SHIFT) | (11 << PIN_SHIFT) | 0x98,
61+
62+
P2_0 = (2 << PORT_SHIFT) | (0 << PIN_SHIFT) | 0x08,
63+
P2_1 = (2 << PORT_SHIFT) | (1 << PIN_SHIFT) | 0x28,
64+
P2_2 = (2 << PORT_SHIFT) | (2 << PIN_SHIFT) | 0x5c,
65+
P2_3 = (2 << PORT_SHIFT) | (3 << PIN_SHIFT) | 0x8c,
66+
P2_4 = (2 << PORT_SHIFT) | (4 << PIN_SHIFT) | 0x40,
67+
P2_5 = (2 << PORT_SHIFT) | (5 << PIN_SHIFT) | 0x44,
68+
P2_6 = (2 << PORT_SHIFT) | (6 << PIN_SHIFT) | 0x00,
69+
P2_7 = (2 << PORT_SHIFT) | (7 << PIN_SHIFT) | 0x20,
70+
P2_8 = (2 << PORT_SHIFT) | (8 << PIN_SHIFT) | 0x24,
71+
P2_9 = (2 << PORT_SHIFT) | (9 << PIN_SHIFT) | 0x54,
72+
P2_10 = (2 << PORT_SHIFT) | (10 << PIN_SHIFT) | 0x58,
73+
P2_11 = (2 << PORT_SHIFT) | (11 << PIN_SHIFT) | 0x70,
7274

73-
P3_0 = 0x3084,
74-
P3_1 = 0x3188,
75-
P3_2 = 0x329c,
76-
P3_3 = 0x33ac,
77-
P3_4 = 0x343c,
78-
P3_5 = 0x3548,
75+
P3_0 = (3 << PORT_SHIFT) | (0 << PIN_SHIFT) | 0x84,
76+
P3_1 = (3 << PORT_SHIFT) | (1 << PIN_SHIFT) | 0x88,
77+
P3_2 = (3 << PORT_SHIFT) | (2 << PIN_SHIFT) | 0x9c,
78+
P3_3 = (3 << PORT_SHIFT) | (3 << PIN_SHIFT) | 0xac,
79+
P3_4 = (3 << PORT_SHIFT) | (4 << PIN_SHIFT) | 0x3c,
80+
P3_5 = (3 << PORT_SHIFT) | (5 << PIN_SHIFT) | 0x48,
7981

8082
// mbed DIP Pin Names (CQ board)
8183
p4 = P0_0,

libraries/mbed/targets/hal/TARGET_NXP/TARGET_LPC11XX/gpio_api.c

Lines changed: 7 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -28,44 +28,21 @@ uint32_t gpio_set(PinName pin) {
2828
(1) : (0);
2929

3030
pin_function(pin, f);
31-
32-
int pin_number = ((pin & 0x0F00) >> 8);
33-
return (pin_number + 1); // port n data address offset
31+
return ((pin & 0x0F00) >> 8);
3432
}
3533

3634
void gpio_init(gpio_t *obj, PinName pin, PinDirection direction) {
3735
if(pin == NC) return;
3836

3937
obj->pin = pin;
38+
LPC_GPIO_TypeDef *port_reg = ((LPC_GPIO_TypeDef *) LPC_GPIO0_BASE + (((pin & 0xF000) >> PORT_SHIFT) * 0x10000));
4039

41-
LPC_GPIO_TypeDef *port_reg;
42-
43-
switch (pin & 0xF000) {
44-
case 0x0000:
45-
port_reg = LPC_GPIO0;
46-
break;
47-
case 0x1000:
48-
port_reg = LPC_GPIO1;
49-
break;
50-
case 0x2000:
51-
port_reg = LPC_GPIO2;
52-
break;
53-
case 0x3000:
54-
port_reg = LPC_GPIO3;
55-
break;
56-
default:
57-
return;
58-
}
59-
60-
#warning TODO (@toyowata): Need to check array offset
61-
obj->mask = &port_reg->MASKED_ACCESS[gpio_set(pin)];
62-
obj->reg_dir = &port_reg->DIR;
63-
obj->reg_in = &port_reg->DATA;
64-
obj->reg_data= &port_reg->DATA;
65-
66-
40+
obj->reg_mask_read = &port_reg->MASKED_ACCESS[gpio_set(pin) + 1];
41+
obj->reg_dir = &port_reg->DIR;
42+
obj->reg_write = &port_reg->DATA;
43+
6744
gpio_dir(obj, direction);
68-
45+
6946
switch (direction) {
7047
case PIN_OUTPUT: pin_mode(pin, PullNone); break;
7148
case PIN_INPUT : pin_mode(pin, PullDown); break;

libraries/mbed/targets/hal/TARGET_NXP/TARGET_LPC11XX/gpio_object.h

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,22 +22,21 @@ extern "C" {
2222

2323
typedef struct {
2424
PinName pin;
25-
__IO uint32_t *mask;
25+
__I uint32_t *reg_mask_read;
2626
__IO uint32_t *reg_dir;
27-
__IO uint32_t *reg_data;
28-
__I uint32_t *reg_in;
27+
__IO uint32_t *reg_write;
2928
} gpio_t;
3029

3130
static inline void gpio_write(gpio_t *obj, int value) {
3231
uint32_t pin_number = ((obj->pin & 0x0F00) >> 8);
3332
if (value)
34-
*obj->reg_data |= (1 << pin_number);
33+
*obj->reg_write |= (1 << pin_number);
3534
else
36-
*obj->reg_data &= ~(1 << pin_number);
35+
*obj->reg_write &= ~(1 << pin_number);
3736
}
3837

3938
static inline int gpio_read(gpio_t *obj) {
40-
return ((*obj->mask) ? 1 : 0);
39+
return ((*obj->reg_mask_read) ? 1 : 0);
4140
}
4241

4342
#ifdef __cplusplus

0 commit comments

Comments
 (0)