mirror of https://github.com/ARMmbed/mbed-os.git
Merge pull request #12436 from mprse/fpga_remove_gpio_pinmaps
Remove GPIO pin-maps used for FPGA testingpull/12513/head
commit
22f3bc4ae7
|
@ -21,8 +21,6 @@
|
||||||
|
|
||||||
using namespace utest::v1;
|
using namespace utest::v1;
|
||||||
|
|
||||||
#include "gpio_api.h"
|
|
||||||
#include "gpio_irq_api.h"
|
|
||||||
#include "analogin_api.h"
|
#include "analogin_api.h"
|
||||||
#include "analogout_api.h"
|
#include "analogout_api.h"
|
||||||
#include "can_api.h"
|
#include "can_api.h"
|
||||||
|
@ -41,10 +39,6 @@ typedef struct {
|
||||||
} pinmap_info_t;
|
} pinmap_info_t;
|
||||||
|
|
||||||
const pinmap_info_t pinmap_functions[] = {
|
const pinmap_info_t pinmap_functions[] = {
|
||||||
PINMAP_TEST_ENTRY(gpio_pinmap),
|
|
||||||
#if DEVICE_INTERRUPTIN
|
|
||||||
PINMAP_TEST_ENTRY(gpio_irq_pinmap),
|
|
||||||
#endif
|
|
||||||
#if DEVICE_ANALOGIN
|
#if DEVICE_ANALOGIN
|
||||||
PINMAP_TEST_ENTRY(analogin_pinmap),
|
PINMAP_TEST_ENTRY(analogin_pinmap),
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -28,14 +28,15 @@
|
||||||
#include "greentea-client/test_env.h"
|
#include "greentea-client/test_env.h"
|
||||||
#include "platform/mbed_critical.h"
|
#include "platform/mbed_critical.h"
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include "hal/serial_api.h"
|
||||||
#include "UARTTester.h"
|
#include "UARTTester.h"
|
||||||
#include "pinmap.h"
|
#include "pinmap.h"
|
||||||
#include "test_utils.h"
|
#include "test_utils.h"
|
||||||
#include "serial_api.h"
|
|
||||||
#include "us_ticker_api.h"
|
#include "us_ticker_api.h"
|
||||||
#include "uart_fpga_test.h"
|
#include "uart_fpga_test.h"
|
||||||
#include "hal/static_pinmap.h"
|
#include "hal/static_pinmap.h"
|
||||||
|
|
||||||
|
|
||||||
using namespace utest::v1;
|
using namespace utest::v1;
|
||||||
|
|
||||||
#define PUTC_REPS 16
|
#define PUTC_REPS 16
|
||||||
|
|
|
@ -111,18 +111,22 @@ void find_ports(std::list<PortType> &matched_ports, std::list<PortType> ¬_mat
|
||||||
const char *pin_type = PortType::PinMap::pin_type_names[i];
|
const char *pin_type = PortType::PinMap::pin_type_names[i];
|
||||||
|
|
||||||
// Loop through each pin of a given type
|
// Loop through each pin of a given type
|
||||||
for (; map->pin != NC; map++) {
|
for (uint32_t j = 0; j < FormFactorType::pins()->count; j++) {
|
||||||
PortType port;
|
PortType port;
|
||||||
// Set pin being tested
|
|
||||||
port.pins[i] = map->pin;
|
if (FormFactorType::pins()->pins[j] == NC) {
|
||||||
port.peripheral = map->peripheral;
|
utest_printf("Skipping (NC pin) %s pin %s (%i)\r\n", pin_type,
|
||||||
// Only form factor pins can be tested
|
FormFactorType::pin_to_string(port.pins[i]), port.pins[i]);
|
||||||
if (!pinmap_list_has_pin(FormFactorType::pins(), port.pins[i])) {
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Set pin being tested
|
||||||
|
port.pins[i] = FormFactorType::pins()->pins[j];
|
||||||
|
port.peripheral = pinmap_find_peripheral(port.pins[i], map);
|
||||||
|
|
||||||
// Don't test restricted pins
|
// Don't test restricted pins
|
||||||
if (pinmap_list_has_pin(FormFactorType::restricted_pins(), port.pins[i])) {
|
if (pinmap_list_has_pin(FormFactorType::restricted_pins(), port.pins[i])) {
|
||||||
utest_printf("Skipping %s pin %s (%i)\r\n", pin_type,
|
utest_printf("Skipping (restricted pin) %s pin %s (%i)\r\n", pin_type,
|
||||||
FormFactorType::pin_to_string(port.pins[i]), port.pins[i]);
|
FormFactorType::pin_to_string(port.pins[i]), port.pins[i]);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -130,7 +134,7 @@ void find_ports(std::list<PortType> &matched_ports, std::list<PortType> ¬_mat
|
||||||
if (!strcmp(PortType::PinMap::name, GPIO_IRQ_NAME) || !strcmp(PortType::PinMap::name, GPIO_NAME)) {
|
if (!strcmp(PortType::PinMap::name, GPIO_IRQ_NAME) || !strcmp(PortType::PinMap::name, GPIO_NAME)) {
|
||||||
// Don't test restricted gpio pins
|
// Don't test restricted gpio pins
|
||||||
if (pinmap_list_has_pin(pinmap_gpio_restricted_pins(), port.pins[i])) {
|
if (pinmap_list_has_pin(pinmap_gpio_restricted_pins(), port.pins[i])) {
|
||||||
utest_printf("Skipping %s pin %s (%i)\r\n", pin_type,
|
utest_printf("Skipping (restricted gpio pin) %s pin %s (%i)\r\n", pin_type,
|
||||||
FormFactorType::pin_to_string(port.pins[i]), port.pins[i]);
|
FormFactorType::pin_to_string(port.pins[i]), port.pins[i]);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -139,7 +143,7 @@ void find_ports(std::list<PortType> &matched_ports, std::list<PortType> ¬_mat
|
||||||
#if DEVICE_SERIAL
|
#if DEVICE_SERIAL
|
||||||
if (!strcmp(PortType::PinMap::name, UART_NAME) || !strcmp(PortType::PinMap::name, UARTNOFC_NAME)) {
|
if (!strcmp(PortType::PinMap::name, UART_NAME) || !strcmp(PortType::PinMap::name, UARTNOFC_NAME)) {
|
||||||
if (pinmap_list_has_peripheral(pinmap_uart_restricted_peripherals(), port.peripheral)) {
|
if (pinmap_list_has_peripheral(pinmap_uart_restricted_peripherals(), port.peripheral)) {
|
||||||
utest_printf("Skipping %s peripheral %i with pin %s (%i)\r\n", pin_type,
|
utest_printf("Skipping (restricted uart peripheral) %s peripheral %i with pin %s (%i)\r\n", pin_type,
|
||||||
port.peripheral, FormFactorType::pin_to_string(port.pins[i]), port.pins[i]);
|
port.peripheral, FormFactorType::pin_to_string(port.pins[i]), port.pins[i]);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,47 +16,6 @@
|
||||||
|
|
||||||
#include "PeripheralPins.h"
|
#include "PeripheralPins.h"
|
||||||
|
|
||||||
/************GPIO***************/
|
|
||||||
const PinMap PinMap_GPIO[] = {
|
|
||||||
{PTA0, GPIO_X, 1},
|
|
||||||
{PTA1, GPIO_X, 1},
|
|
||||||
{PTA2, GPIO_X, 1},
|
|
||||||
{PTA3, GPIO_X, 1},
|
|
||||||
{PTA4, GPIO_X, 1},
|
|
||||||
{PTA18, GPIO_X, 1},
|
|
||||||
{PTA19, GPIO_X, 1},
|
|
||||||
|
|
||||||
{PTC4, GPIO_X, 1},
|
|
||||||
{PTC5, GPIO_X, 1},
|
|
||||||
{PTC6, GPIO_X, 1},
|
|
||||||
{PTC7, GPIO_X, 1},
|
|
||||||
|
|
||||||
{PTD1, GPIO_X, 1},
|
|
||||||
{PTD2, GPIO_X, 1},
|
|
||||||
{PTD3, GPIO_X, 1},
|
|
||||||
{PTD4, GPIO_X, 1},
|
|
||||||
{PTD5, GPIO_X, 1},
|
|
||||||
{PTD6, GPIO_X, 1},
|
|
||||||
{PTD7, GPIO_X, 1},
|
|
||||||
|
|
||||||
{PTE0, GPIO_X, 1},
|
|
||||||
{PTE1, GPIO_X, 1},
|
|
||||||
{PTE2, GPIO_X, 1},
|
|
||||||
{PTE3, GPIO_X, 1},
|
|
||||||
{PTE4, GPIO_X, 1},
|
|
||||||
{PTE16, GPIO_X, 1},
|
|
||||||
{PTE17, GPIO_X, 1},
|
|
||||||
{PTE18, GPIO_X, 1},
|
|
||||||
{PTE19, GPIO_X, 1},
|
|
||||||
|
|
||||||
{NC , NC , 0}
|
|
||||||
};
|
|
||||||
|
|
||||||
const PinMap *gpio_pinmap()
|
|
||||||
{
|
|
||||||
return PinMap_GPIO;
|
|
||||||
}
|
|
||||||
|
|
||||||
/************RTC***************/
|
/************RTC***************/
|
||||||
const PinMap PinMap_RTC[] = {
|
const PinMap PinMap_RTC[] = {
|
||||||
{NC, OSC32KCLK, 0},
|
{NC, OSC32KCLK, 0},
|
||||||
|
@ -75,7 +34,7 @@ const PinMap PinMap_ADC[] = {
|
||||||
{PTE17, ADC0_SE5a, 0},
|
{PTE17, ADC0_SE5a, 0},
|
||||||
{PTE18, ADC0_SE6a, 0},
|
{PTE18, ADC0_SE6a, 0},
|
||||||
{PTE19, ADC0_SE7a, 0},
|
{PTE19, ADC0_SE7a, 0},
|
||||||
{NC , NC , 0}
|
{NC, NC, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
/************I2C***************/
|
/************I2C***************/
|
||||||
|
@ -83,14 +42,14 @@ const PinMap PinMap_I2C_SDA[] = {
|
||||||
{PTD3, I2C_0, 4},
|
{PTD3, I2C_0, 4},
|
||||||
{PTE0, I2C_1, 6},
|
{PTE0, I2C_1, 6},
|
||||||
{PTE18, I2C_0, 4},
|
{PTE18, I2C_0, 4},
|
||||||
{NC , NC , 0}
|
{NC, NC, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
const PinMap PinMap_I2C_SCL[] = {
|
const PinMap PinMap_I2C_SCL[] = {
|
||||||
{PTD2, I2C_0, 4},
|
{PTD2, I2C_0, 4},
|
||||||
{PTE1, I2C_1, 6},
|
{PTE1, I2C_1, 6},
|
||||||
{PTE19, I2C_0, 4},
|
{PTE19, I2C_0, 4},
|
||||||
{NC , NC , 0}
|
{NC, NC, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
/************UART***************/
|
/************UART***************/
|
||||||
|
@ -101,7 +60,7 @@ const PinMap PinMap_UART_TX[] = {
|
||||||
{PTE0, UART_1, 3},
|
{PTE0, UART_1, 3},
|
||||||
{PTD3, UART_2, 3},
|
{PTD3, UART_2, 3},
|
||||||
{PTE16, UART_2, 3},
|
{PTE16, UART_2, 3},
|
||||||
{NC , NC , 0}
|
{NC, NC, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
const PinMap PinMap_UART_RX[] = {
|
const PinMap PinMap_UART_RX[] = {
|
||||||
|
@ -111,7 +70,7 @@ const PinMap PinMap_UART_RX[] = {
|
||||||
{PTD2, UART_2, 3},
|
{PTD2, UART_2, 3},
|
||||||
{PTE17, UART_2, 3},
|
{PTE17, UART_2, 3},
|
||||||
|
|
||||||
{NC , NC , 0}
|
{NC, NC, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
const PinMap PinMap_UART_CTS[] = {
|
const PinMap PinMap_UART_CTS[] = {
|
||||||
|
@ -120,15 +79,15 @@ const PinMap PinMap_UART_CTS[] = {
|
||||||
{PTE2, UART_1, 3},
|
{PTE2, UART_1, 3},
|
||||||
{PTE18, UART_2, 3},
|
{PTE18, UART_2, 3},
|
||||||
{PTA0, UART_0, 2},
|
{PTA0, UART_0, 2},
|
||||||
{NC , NC , 0}
|
{NC, NC, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
const PinMap PinMap_UART_RTS[] = {
|
const PinMap PinMap_UART_RTS[] = {
|
||||||
{PTD4, UART_0, 3},
|
{PTD4, UART_0, 3},
|
||||||
{PTE3 , UART_1, 3},
|
{PTE3, UART_1, 3},
|
||||||
{PTE19, UART_2, 3},
|
{PTE19, UART_2, 3},
|
||||||
{PTA3, UART_0, 2},
|
{PTA3, UART_0, 2},
|
||||||
{NC , NC , 0}
|
{NC, NC, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
/************SPI***************/
|
/************SPI***************/
|
||||||
|
@ -138,7 +97,7 @@ const PinMap PinMap_SPI_SCLK[] = {
|
||||||
{PTD1, SPI_0, 2},
|
{PTD1, SPI_0, 2},
|
||||||
{PTE2, SPI_1, 2},
|
{PTE2, SPI_1, 2},
|
||||||
{PTE17, SPI_0, 2},
|
{PTE17, SPI_0, 2},
|
||||||
{NC , NC , 0}
|
{NC, NC, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
const PinMap PinMap_SPI_MOSI[] = {
|
const PinMap PinMap_SPI_MOSI[] = {
|
||||||
|
@ -148,7 +107,7 @@ const PinMap PinMap_SPI_MOSI[] = {
|
||||||
{PTE1, SPI_1, 2},
|
{PTE1, SPI_1, 2},
|
||||||
{PTE3, SPI_1, 7},
|
{PTE3, SPI_1, 7},
|
||||||
{PTE18, SPI_0, 2},
|
{PTE18, SPI_0, 2},
|
||||||
{NC , NC , 0}
|
{NC, NC, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
const PinMap PinMap_SPI_MISO[] = {
|
const PinMap PinMap_SPI_MISO[] = {
|
||||||
|
@ -158,7 +117,7 @@ const PinMap PinMap_SPI_MISO[] = {
|
||||||
{PTE1, SPI_1, 7},
|
{PTE1, SPI_1, 7},
|
||||||
{PTE3, SPI_1, 2},
|
{PTE3, SPI_1, 2},
|
||||||
{PTE19, SPI_0, 2},
|
{PTE19, SPI_0, 2},
|
||||||
{NC , NC , 0}
|
{NC, NC, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
const PinMap PinMap_SPI_SSEL[] = {
|
const PinMap PinMap_SPI_SSEL[] = {
|
||||||
|
@ -166,7 +125,7 @@ const PinMap PinMap_SPI_SSEL[] = {
|
||||||
{PTC4, SPI_0, 2},
|
{PTC4, SPI_0, 2},
|
||||||
{PTE4, SPI_1, 2},
|
{PTE4, SPI_1, 2},
|
||||||
{PTE16, SPI_0, 2},
|
{PTE16, SPI_0, 2},
|
||||||
{NC , NC , 0}
|
{NC, NC, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
/************PWM***************/
|
/************PWM***************/
|
||||||
|
@ -181,5 +140,5 @@ const PinMap PinMap_PWM[] = {
|
||||||
{PTA2, PWM_7, 3},
|
{PTA2, PWM_7, 3},
|
||||||
{PTA3, PWM_0, 3},
|
{PTA3, PWM_0, 3},
|
||||||
{PTA4, PWM_1, 3},
|
{PTA4, PWM_1, 3},
|
||||||
{NC , NC , 0}
|
{NC, NC, 0}
|
||||||
};
|
};
|
||||||
|
|
|
@ -16,45 +16,6 @@
|
||||||
|
|
||||||
#include "PeripheralPins.h"
|
#include "PeripheralPins.h"
|
||||||
|
|
||||||
/************GPIO***************/
|
|
||||||
const PinMap PinMap_GPIO[] = {
|
|
||||||
{PTA0, GPIO_X, 1},
|
|
||||||
{PTA1, GPIO_X, 1},
|
|
||||||
{PTA2, GPIO_X, 1},
|
|
||||||
{PTA16, GPIO_X, 1},
|
|
||||||
{PTA17, GPIO_X, 1},
|
|
||||||
{PTA18, GPIO_X, 1},
|
|
||||||
{PTA19, GPIO_X, 1},
|
|
||||||
|
|
||||||
{PTB0, GPIO_X, 1},
|
|
||||||
{PTB1, GPIO_X, 1},
|
|
||||||
{PTB2, GPIO_X, 1},
|
|
||||||
{PTB3, GPIO_X, 1},
|
|
||||||
{PTB16, GPIO_X, 1},
|
|
||||||
{PTB17, GPIO_X, 1},
|
|
||||||
{PTB18, GPIO_X, 1},
|
|
||||||
|
|
||||||
// {PTC0, GPIO_X, 1}, // PTC0 is not available on the 48-pin Laminate QFN package.
|
|
||||||
{PTC1, GPIO_X, 1},
|
|
||||||
{PTC2, GPIO_X, 1},
|
|
||||||
{PTC3, GPIO_X, 1},
|
|
||||||
{PTC4, GPIO_X, 1},
|
|
||||||
{PTC5, GPIO_X, 1},
|
|
||||||
{PTC6, GPIO_X, 1},
|
|
||||||
{PTC7, GPIO_X, 1},
|
|
||||||
{PTC16, GPIO_X, 1},
|
|
||||||
{PTC17, GPIO_X, 1},
|
|
||||||
{PTC18, GPIO_X, 1},
|
|
||||||
{PTC19, GPIO_X, 1},
|
|
||||||
|
|
||||||
{NC , NC , 0}
|
|
||||||
};
|
|
||||||
|
|
||||||
const PinMap *gpio_pinmap()
|
|
||||||
{
|
|
||||||
return PinMap_GPIO;
|
|
||||||
}
|
|
||||||
|
|
||||||
/************RTC***************/
|
/************RTC***************/
|
||||||
const PinMap PinMap_RTC[] = {
|
const PinMap PinMap_RTC[] = {
|
||||||
{NC, OSC32KCLK, 0},
|
{NC, OSC32KCLK, 0},
|
||||||
|
@ -67,7 +28,7 @@ const PinMap PinMap_ADC[] = {
|
||||||
{PTB2, ADC0_SE3, 0},
|
{PTB2, ADC0_SE3, 0},
|
||||||
{PTB18, ADC0_SE4, 0},
|
{PTB18, ADC0_SE4, 0},
|
||||||
{PTA19, ADC0_SE5, 0},
|
{PTA19, ADC0_SE5, 0},
|
||||||
{NC , NC , 0}
|
{NC, NC, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
/************DAC***************/
|
/************DAC***************/
|
||||||
|
@ -85,7 +46,7 @@ const PinMap PinMap_I2C_SDA[] = {
|
||||||
{PTC7, I2C_1, 3},
|
{PTC7, I2C_1, 3},
|
||||||
{PTC16, I2C_0, 3},
|
{PTC16, I2C_0, 3},
|
||||||
{PTC18, I2C_1, 3},
|
{PTC18, I2C_1, 3},
|
||||||
{NC , NC , 0}
|
{NC, NC, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
const PinMap PinMap_I2C_SCL[] = {
|
const PinMap PinMap_I2C_SCL[] = {
|
||||||
|
@ -96,7 +57,7 @@ const PinMap PinMap_I2C_SCL[] = {
|
||||||
{PTC6, I2C_1, 3},
|
{PTC6, I2C_1, 3},
|
||||||
{PTC17, I2C_1, 3},
|
{PTC17, I2C_1, 3},
|
||||||
{PTC19, I2C_0, 3},
|
{PTC19, I2C_0, 3},
|
||||||
{NC , NC , 0}
|
{NC, NC, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
/************UART***************/
|
/************UART***************/
|
||||||
|
@ -104,53 +65,53 @@ const PinMap PinMap_UART_TX[] = {
|
||||||
{PTC3, LPUART_0, 4},
|
{PTC3, LPUART_0, 4},
|
||||||
{PTC7, LPUART_0, 4},
|
{PTC7, LPUART_0, 4},
|
||||||
{PTC18, LPUART_0, 4},
|
{PTC18, LPUART_0, 4},
|
||||||
{NC , NC , 0}
|
{NC, NC, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
const PinMap PinMap_UART_RX[] = {
|
const PinMap PinMap_UART_RX[] = {
|
||||||
{PTC2, LPUART_0, 4},
|
{PTC2, LPUART_0, 4},
|
||||||
{PTC6, LPUART_0, 4},
|
{PTC6, LPUART_0, 4},
|
||||||
{PTC17, LPUART_0, 4},
|
{PTC17, LPUART_0, 4},
|
||||||
{NC , NC , 0}
|
{NC, NC, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
const PinMap PinMap_UART_CTS[] = {
|
const PinMap PinMap_UART_CTS[] = {
|
||||||
{PTC4, LPUART_0, 4},
|
{PTC4, LPUART_0, 4},
|
||||||
{PTC19, LPUART_0, 4},
|
{PTC19, LPUART_0, 4},
|
||||||
{NC , NC , 0}
|
{NC, NC, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
const PinMap PinMap_UART_RTS[] = {
|
const PinMap PinMap_UART_RTS[] = {
|
||||||
{PTC1, LPUART_0, 4},
|
{PTC1, LPUART_0, 4},
|
||||||
{PTC5, LPUART_0, 4},
|
{PTC5, LPUART_0, 4},
|
||||||
{PTC16, LPUART_0, 4},
|
{PTC16, LPUART_0, 4},
|
||||||
{NC , NC , 0}
|
{NC, NC, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
/************SPI***************/
|
/************SPI***************/
|
||||||
const PinMap PinMap_SPI_SCLK[] = {
|
const PinMap PinMap_SPI_SCLK[] = {
|
||||||
{PTA18, SPI_1, 2},
|
{PTA18, SPI_1, 2},
|
||||||
{PTC16, SPI_0, 2},
|
{PTC16, SPI_0, 2},
|
||||||
{NC , NC , 0}
|
{NC, NC, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
const PinMap PinMap_SPI_MOSI[] = {
|
const PinMap PinMap_SPI_MOSI[] = {
|
||||||
{PTA16, SPI_1, 2},
|
{PTA16, SPI_1, 2},
|
||||||
{PTC17, SPI_0, 2},
|
{PTC17, SPI_0, 2},
|
||||||
{NC , NC , 0}
|
{NC, NC, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
const PinMap PinMap_SPI_MISO[] = {
|
const PinMap PinMap_SPI_MISO[] = {
|
||||||
{PTA17, SPI_1, 2},
|
{PTA17, SPI_1, 2},
|
||||||
{PTC18, SPI_0, 2},
|
{PTC18, SPI_0, 2},
|
||||||
{NC , NC , 0}
|
{NC, NC, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
const PinMap PinMap_SPI_SSEL[] = {
|
const PinMap PinMap_SPI_SSEL[] = {
|
||||||
{PTA1, SPI_1, 2},
|
{PTA1, SPI_1, 2},
|
||||||
{PTA19, SPI_1, 2},
|
{PTA19, SPI_1, 2},
|
||||||
{PTC19, SPI_0, 2},
|
{PTC19, SPI_0, 2},
|
||||||
{NC , NC , 0}
|
{NC, NC, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
/************PWM***************/
|
/************PWM***************/
|
||||||
|
@ -171,5 +132,5 @@ const PinMap PinMap_PWM[] = {
|
||||||
{PTB3, PWM_6, 5},
|
{PTB3, PWM_6, 5},
|
||||||
{PTC4, PWM_5, 5},
|
{PTC4, PWM_5, 5},
|
||||||
{PTC5, PWM_6, 5},
|
{PTC5, PWM_6, 5},
|
||||||
{NC , NC , 0}
|
{NC, NC, 0}
|
||||||
};
|
};
|
||||||
|
|
|
@ -67,7 +67,7 @@ MSTD_CONSTEXPR_OBJ_11 PinMap PinMap_I2C_SDA[] = {
|
||||||
{PTB3, I2C_0, 2},
|
{PTB3, I2C_0, 2},
|
||||||
{PTC11, I2C_1, 2},
|
{PTC11, I2C_1, 2},
|
||||||
{PTA13, I2C_2, 5},
|
{PTA13, I2C_2, 5},
|
||||||
{PTD3, I2C_0, 7},
|
// {PTD3, I2C_0, 7}, // Fails FPGA testing
|
||||||
{PTE0, I2C_1, 6},
|
{PTE0, I2C_1, 6},
|
||||||
{NC, NC, 0}
|
{NC, NC, 0}
|
||||||
};
|
};
|
||||||
|
|
|
@ -59,6 +59,13 @@
|
||||||
#include "app_util_platform.h"
|
#include "app_util_platform.h"
|
||||||
#include "prs/nrfx_prs.h"
|
#include "prs/nrfx_prs.h"
|
||||||
|
|
||||||
|
#define TWI_PIN_INIT(_pin) nrf_gpio_cfg((_pin), \
|
||||||
|
NRF_GPIO_PIN_DIR_INPUT, \
|
||||||
|
NRF_GPIO_PIN_INPUT_CONNECT, \
|
||||||
|
NRF_GPIO_PIN_PULLUP, \
|
||||||
|
NRF_GPIO_PIN_S0D1, \
|
||||||
|
NRF_GPIO_PIN_NOSENSE)
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
#define DEBUG_PRINTF(...) printf(__VA_ARGS__)
|
#define DEBUG_PRINTF(...) printf(__VA_ARGS__)
|
||||||
#else
|
#else
|
||||||
|
@ -225,7 +232,7 @@ const PinMap *i2c_slave_scl_pinmap()
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
/* Global array for easy register selection for each instance. */
|
/* Global array for easy register selection for each instance. */
|
||||||
static NRF_TWI_Type * nordic_nrf5_twi_register[2] = { NRF_TWI0, NRF_TWI1 };
|
static NRF_TWI_Type *nordic_nrf5_twi_register[2] = { NRF_TWI0, NRF_TWI1 };
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Reconfigure TWI register.
|
* @brief Reconfigure TWI register.
|
||||||
|
@ -247,14 +254,14 @@ void i2c_configure_twi_instance(i2c_t *obj)
|
||||||
struct i2c_s *config = obj;
|
struct i2c_s *config = obj;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static nrfx_irq_handler_t const irq_handlers[NRFX_TWI_ENABLED_COUNT] = {
|
static nrfx_irq_handler_t const irq_handlers[NRFX_TWI_ENABLED_COUNT] = {
|
||||||
#if NRFX_CHECK(NRFX_TWI0_ENABLED)
|
#if NRFX_CHECK(NRFX_TWI0_ENABLED)
|
||||||
nrfx_twi_0_irq_handler,
|
nrfx_twi_0_irq_handler,
|
||||||
#endif
|
#endif
|
||||||
#if NRFX_CHECK(NRFX_TWI1_ENABLED)
|
#if NRFX_CHECK(NRFX_TWI1_ENABLED)
|
||||||
nrfx_twi_1_irq_handler,
|
nrfx_twi_1_irq_handler,
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
int instance = config->instance;
|
int instance = config->instance;
|
||||||
|
|
||||||
|
@ -280,22 +287,21 @@ void i2c_configure_twi_instance(i2c_t *obj)
|
||||||
/* Force resource release. This is necessary because mbed drivers don't
|
/* Force resource release. This is necessary because mbed drivers don't
|
||||||
* deinitialize on object destruction.
|
* deinitialize on object destruction.
|
||||||
*/
|
*/
|
||||||
NRFX_IRQ_DISABLE((nrfx_get_irq_number((void const*)nordic_nrf5_twi_register[instance])));
|
NRFX_IRQ_DISABLE((nrfx_get_irq_number((void const *)nordic_nrf5_twi_register[instance])));
|
||||||
/* Release and re-initialize the irq handlers.
|
/* Release and re-initialize the irq handlers.
|
||||||
* observation: based on call flow, this is called only during i2c_reset and i2c_byte_write
|
* observation: based on call flow, this is called only during i2c_reset and i2c_byte_write
|
||||||
* The nrfx_prs_acquire is normally called in nrfx_twi_init which is part of the i2c_configure_driver_instance,
|
* The nrfx_prs_acquire is normally called in nrfx_twi_init which is part of the i2c_configure_driver_instance,
|
||||||
* not i2c_configure_twi_intance. Hence I think the release and acquire is not doing any useful work here.
|
* not i2c_configure_twi_intance. Hence I think the release and acquire is not doing any useful work here.
|
||||||
* Keeping for reference and should clean up after testing if found not useful.
|
* Keeping for reference and should clean up after testing if found not useful.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
nrfx_prs_release(nordic_nrf5_twi_register[instance]);
|
nrfx_prs_release(nordic_nrf5_twi_register[instance]);
|
||||||
if (nrfx_prs_acquire(nordic_nrf5_twi_register[instance],
|
if (nrfx_prs_acquire(nordic_nrf5_twi_register[instance],
|
||||||
irq_handlers[instance]) != NRFX_SUCCESS)
|
irq_handlers[instance]) != NRFX_SUCCESS) {
|
||||||
{
|
DEBUG_PRINTF("Function: %s, nrfx_prs_acquire error code: %s.",
|
||||||
DEBUG_PRINTF("Function: %s, nrfx_prs_acquire error code: %s.",
|
|
||||||
__func__,
|
__func__,
|
||||||
err_code);
|
err_code);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Reset shorts register. */
|
/* Reset shorts register. */
|
||||||
nrf_twi_shorts_set(nordic_nrf5_twi_register[instance], 0);
|
nrf_twi_shorts_set(nordic_nrf5_twi_register[instance], 0);
|
||||||
|
@ -330,6 +336,13 @@ void i2c_configure_twi_instance(i2c_t *obj)
|
||||||
nrf_twi_frequency_set(nordic_nrf5_twi_register[instance],
|
nrf_twi_frequency_set(nordic_nrf5_twi_register[instance],
|
||||||
config->frequency);
|
config->frequency);
|
||||||
|
|
||||||
|
/* To secure correct signal levels on the pins used by the TWI
|
||||||
|
master when the system is in OFF mode, and when the TWI master is
|
||||||
|
disabled, these pins must be configured in the GPIO peripheral.
|
||||||
|
*/
|
||||||
|
TWI_PIN_INIT(config->scl);
|
||||||
|
TWI_PIN_INIT(config->sda);
|
||||||
|
|
||||||
/* Enable TWI peripheral with new settings. */
|
/* Enable TWI peripheral with new settings. */
|
||||||
nrf_twi_enable(nordic_nrf5_twi_register[instance]);
|
nrf_twi_enable(nordic_nrf5_twi_register[instance]);
|
||||||
}
|
}
|
||||||
|
@ -491,7 +504,7 @@ int i2c_byte_read(i2c_t *obj, int last)
|
||||||
|
|
||||||
/* Block until timeout or data ready event has been signaled. */
|
/* Block until timeout or data ready event has been signaled. */
|
||||||
while (((now_us - start_us) < timeout) &&
|
while (((now_us - start_us) < timeout) &&
|
||||||
!(nrf_twi_event_check(nordic_nrf5_twi_register[instance], NRF_TWI_EVENT_RXDREADY))) {
|
!(nrf_twi_event_check(nordic_nrf5_twi_register[instance], NRF_TWI_EVENT_RXDREADY))) {
|
||||||
now_us = tick2us * lp_ticker_read();
|
now_us = tick2us * lp_ticker_read();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -530,7 +543,7 @@ int i2c_stop(i2c_t *obj)
|
||||||
uint32_t now_us = start_us;
|
uint32_t now_us = start_us;
|
||||||
|
|
||||||
while (((now_us - start_us) < MAXIMUM_TIMEOUT_US) &&
|
while (((now_us - start_us) < MAXIMUM_TIMEOUT_US) &&
|
||||||
!(nrf_twi_event_check(nordic_nrf5_twi_register[instance], NRF_TWI_EVENT_STOPPED))) {
|
!(nrf_twi_event_check(nordic_nrf5_twi_register[instance], NRF_TWI_EVENT_STOPPED))) {
|
||||||
now_us = tick2us * lp_ticker_read();
|
now_us = tick2us * lp_ticker_read();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -626,7 +639,7 @@ static void i2c_configure_driver_instance(i2c_t *obj)
|
||||||
/* Force resource release. This is necessary because mbed drivers don't
|
/* Force resource release. This is necessary because mbed drivers don't
|
||||||
* deinitialize on object destruction.
|
* deinitialize on object destruction.
|
||||||
*/
|
*/
|
||||||
NRFX_IRQ_DISABLE((nrfx_get_irq_number((void const*)nordic_nrf5_twi_register[instance])));
|
NRFX_IRQ_DISABLE((nrfx_get_irq_number((void const *)nordic_nrf5_twi_register[instance])));
|
||||||
|
|
||||||
/* Configure driver with new settings. */
|
/* Configure driver with new settings. */
|
||||||
nrfx_twi_config_t twi_config = {
|
nrfx_twi_config_t twi_config = {
|
||||||
|
@ -695,9 +708,9 @@ int i2c_read(i2c_t *obj, int address, char *data, int length, int stop)
|
||||||
|
|
||||||
/* Initialize transaction. */
|
/* Initialize transaction. */
|
||||||
ret_code_t retval = nrfx_twi_rx(&nordic_nrf5_instance[instance],
|
ret_code_t retval = nrfx_twi_rx(&nordic_nrf5_instance[instance],
|
||||||
address >> 1,
|
address >> 1,
|
||||||
(uint8_t *) data,
|
(uint8_t *) data,
|
||||||
length);
|
length);
|
||||||
|
|
||||||
/* Set return value on success. */
|
/* Set return value on success. */
|
||||||
if (retval == NRF_SUCCESS) {
|
if (retval == NRF_SUCCESS) {
|
||||||
|
@ -739,10 +752,10 @@ int i2c_write(i2c_t *obj, int address, const char *data, int length, int stop)
|
||||||
|
|
||||||
/* Initialize transaction. */
|
/* Initialize transaction. */
|
||||||
ret_code_t retval = nrfx_twi_tx(&nordic_nrf5_instance[instance],
|
ret_code_t retval = nrfx_twi_tx(&nordic_nrf5_instance[instance],
|
||||||
address >> 1,
|
address >> 1,
|
||||||
(const uint8_t *) data,
|
(const uint8_t *) data,
|
||||||
length,
|
length,
|
||||||
!stop);
|
!stop);
|
||||||
|
|
||||||
/* Set return value on success. */
|
/* Set return value on success. */
|
||||||
if (retval == NRF_SUCCESS) {
|
if (retval == NRF_SUCCESS) {
|
||||||
|
@ -778,8 +791,7 @@ static void nordic_nrf5_twi_event_handler(nrfx_twi_evt_t const *p_event, void *p
|
||||||
struct i2c_s *config = &obj->i2c;
|
struct i2c_s *config = &obj->i2c;
|
||||||
|
|
||||||
/* Translate event type from NRF driver values to mbed HAL values. */
|
/* Translate event type from NRF driver values to mbed HAL values. */
|
||||||
switch (p_event->type)
|
switch (p_event->type) {
|
||||||
{
|
|
||||||
/* Transfer completed event. */
|
/* Transfer completed event. */
|
||||||
case NRFX_TWI_EVT_DONE:
|
case NRFX_TWI_EVT_DONE:
|
||||||
config->event = I2C_EVENT_TRANSFER_COMPLETE;
|
config->event = I2C_EVENT_TRANSFER_COMPLETE;
|
||||||
|
@ -860,17 +872,17 @@ void i2c_transfer_asynch(i2c_t *obj,
|
||||||
|
|
||||||
/* Configure TWI transfer. */
|
/* Configure TWI transfer. */
|
||||||
const nrfx_twi_xfer_desc_t twi_config = NRFX_TWI_XFER_DESC_TXRX(address >> 1,
|
const nrfx_twi_xfer_desc_t twi_config = NRFX_TWI_XFER_DESC_TXRX(address >> 1,
|
||||||
(uint8_t*) tx,
|
(uint8_t *) tx,
|
||||||
tx_length,
|
tx_length,
|
||||||
rx,
|
rx,
|
||||||
rx_length);
|
rx_length);
|
||||||
|
|
||||||
uint32_t flags = (stop) ? 0 : NRFX_TWI_FLAG_TX_NO_STOP;
|
uint32_t flags = (stop) ? 0 : NRFX_TWI_FLAG_TX_NO_STOP;
|
||||||
|
|
||||||
/* Initiate TWI transfer using NRF driver. */
|
/* Initiate TWI transfer using NRF driver. */
|
||||||
ret_code_t result = nrfx_twi_xfer(&nordic_nrf5_instance[instance],
|
ret_code_t result = nrfx_twi_xfer(&nordic_nrf5_instance[instance],
|
||||||
&twi_config,
|
&twi_config,
|
||||||
flags);
|
flags);
|
||||||
|
|
||||||
/* Signal error if event mask matches and event handler is set. */
|
/* Signal error if event mask matches and event handler is set. */
|
||||||
if ((result != NRF_SUCCESS) && (mask & I2C_EVENT_ERROR) && handler) {
|
if ((result != NRF_SUCCESS) && (mask & I2C_EVENT_ERROR) && handler) {
|
||||||
|
|
Loading…
Reference in New Issue