Declare a weak "empty" pio struct for each driver inside the driver so that there...
authorNathael Pajani <nathael.pajani@ed3l.fr>
Thu, 31 Jul 2014 19:54:22 +0000 (21:54 +0200)
committerNathael Pajani <nathael.pajani@ed3l.fr>
Tue, 8 Nov 2022 16:03:04 +0000 (17:03 +0100)
core/pio.c
drivers/adc.c
drivers/gpio.c
drivers/i2c.c
drivers/serial.c
drivers/ssp.c
drivers/timers.c
include/core/pio.h

index d1cb89d..0cb773c 100644 (file)
@@ -22,6 +22,7 @@
 /*                GPIOs                                                        */
 /***************************************************************************** */
 
+/*   Public access to Pins setup   */
 
 
 #include <stdint.h>
@@ -31,8 +32,8 @@
 #include "core/pio.h"
 
 
+
 /***************************************************************************** */
-/*   Public access to GPIO setup   */
 static volatile uint32_t* pio_regs_handles_port0[PORT0_NB_PINS] = {
        &(LPC_IO_CONTROL->pio0_0),
        &(LPC_IO_CONTROL->pio0_1),
index 29f8bf0..f35323b 100644 (file)
@@ -148,7 +148,9 @@ void adc_set_resolution(int bits)
 
 /***************************************************************************** */
 /*   ADC Setup : private part : Clocks, Pins, Power and Mode   */
-extern struct pio adc_pins[];
+struct pio adc_pins[] __attribute__ ((weak)) = {
+       ARRAY_LAST_PIN,
+};
 
 static void set_adc_pins(void)
 {
index 8fa1d21..d978cae 100644 (file)
@@ -37,7 +37,9 @@
 /*   GPIO setup   */
 
 /* Set all GPIO used in a default state */
-extern struct pio gpio_pins[];
+struct pio gpio_pins[] __attribute__ ((weak)) = {
+       ARRAY_LAST_PIN,
+};
 
 static void set_gpio_pins(void)
 {
index 41a2e71..3934500 100644 (file)
@@ -454,7 +454,10 @@ static void i2c_clock_on(uint32_t i2c_clk_freq)
 }
 
 /* I2C Pins configuration */
-extern struct pio i2c0_pins[];
+struct pio i2c0_pins[] __attribute__ ((weak)) = {
+       ARRAY_LAST_PIN,
+};
+
 
 static void set_i2c_pins(void)
 {
index 02527db..24c7d9b 100644 (file)
@@ -235,8 +235,12 @@ static uint32_t uart_setup(uint32_t uart_num)
 /* Note : We MUST set LPC_IO_DIGITAL for Rx even if the bit is marked as "Reserved" in
  *        the datasheet !
  */
-extern struct pio uart0_pins[];
-extern struct pio uart1_pins[];
+struct pio uart0_pins[] __attribute__ ((weak)) = {
+       ARRAY_LAST_PIN,
+};
+struct pio uart1_pins[] __attribute__ ((weak)) = {
+       ARRAY_LAST_PIN,
+};
 
 static void uart_set_pin_func(uint32_t uart_num)
 {
index 37d3f54..cb323dd 100644 (file)
@@ -305,7 +305,9 @@ void ssp_clk_update(void)
 }
 
 /* Configure all SPI pins. */
-extern struct pio ssp0_pins[];
+struct pio ssp0_pins[] __attribute__ ((weak)) = {
+       ARRAY_LAST_PIN,
+};
 static void ssp_set_pin_func(uint32_t ssp_num)
 {
        int i = 0;
index 8a28cab..544ffe3 100644 (file)
@@ -200,10 +200,18 @@ int timer_setup(uint32_t timer_num, struct timer_config* conf)
 
 
 /* Setup timer pins to be used as match or capture pin  */
-extern struct pio timer0_pins[];
-extern struct pio timer1_pins[];
-extern struct pio timer2_pins[];
-extern struct pio timer3_pins[];
+struct pio timer0_pins[] __attribute__ ((weak)) = {
+       ARRAY_LAST_PIN,
+};
+struct pio timer1_pins[] __attribute__ ((weak)) = {
+       ARRAY_LAST_PIN,
+};
+struct pio timer2_pins[] __attribute__ ((weak)) = {
+       ARRAY_LAST_PIN,
+};
+struct pio timer3_pins[] __attribute__ ((weak)) = {
+       ARRAY_LAST_PIN,
+};
 
 #define LPC_TIMER_PIN_CONFIG   (LPC_IO_MODE_PULL_UP | LPC_IO_DIGITAL | LPC_IO_DRIVE_HIGHCURENT)
 static void timer_pins_setup(uint32_t timer_num)
index 97daffc..66a6593 100644 (file)
 #ifndef CORE_PIO_H
 #define CORE_PIO_H
 
+/* The "PIO" module gives access to the configuration of all the pins of the
+ * micro-controller, whatever the function of the pin.
+ * It has nothing related to GPIO function of the pins.
+ */
+
 #include <stdint.h>
 
 struct pio {