mirror of https://github.com/ARMmbed/mbed-os.git
[NANO130] Remove dead code
parent
3bbacad6a7
commit
00fa0f64c1
|
@ -16,119 +16,6 @@
|
||||||
|
|
||||||
#include "PeripheralPins.h"
|
#include "PeripheralPins.h"
|
||||||
|
|
||||||
// =====
|
|
||||||
// Note: Commented lines are alternative possibilities which are not used per default.
|
|
||||||
// If you change them, you will have also to modify the corresponding xxx_api.c file
|
|
||||||
// for pwmout, analogin, analogout, ...
|
|
||||||
// =====
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
//*** GPIO ***
|
|
||||||
const PinMap PinMap_GPIO[] = {
|
|
||||||
// GPIO A MFPL
|
|
||||||
{PA_0, GPIO_A, SYS_GPA_MFPL_PA0MFP_GPIO},
|
|
||||||
{PA_1, GPIO_A, SYS_GPA_MFPL_PA1MFP_GPIO},
|
|
||||||
{PA_2, GPIO_A, SYS_GPA_MFPL_PA2MFP_GPIO},
|
|
||||||
{PA_3, GPIO_A, SYS_GPA_MFPL_PA3MFP_GPIO},
|
|
||||||
{PA_4, GPIO_A, SYS_GPA_MFPL_PA4MFP_GPIO},
|
|
||||||
{PA_5, GPIO_A, SYS_GPA_MFPL_PA5MFP_GPIO},
|
|
||||||
{PA_6, GPIO_A, SYS_GPA_MFPL_PA6MFP_GPIO},
|
|
||||||
{PA_7, GPIO_A, SYS_GPA_MFPL_PA7MFP_GPIO},
|
|
||||||
// GPIO A MFPH
|
|
||||||
{PA_8, GPIO_A, SYS_GPA_MFPH_PA8MFP_GPIO},
|
|
||||||
{PA_9, GPIO_A, SYS_GPA_MFPH_PA9MFP_GPIO},
|
|
||||||
{PA_10, GPIO_A, SYS_GPA_MFPH_PA10MFP_GPIO},
|
|
||||||
{PA_11, GPIO_A, SYS_GPA_MFPH_PA11MFP_GPIO},
|
|
||||||
{PA_12, GPIO_A, SYS_GPA_MFPH_PA12MFP_GPIO},
|
|
||||||
{PA_13, GPIO_A, SYS_GPA_MFPH_PA13MFP_GPIO},
|
|
||||||
{PA_14, GPIO_A, SYS_GPA_MFPH_PA14MFP_GPIO},
|
|
||||||
{PA_15, GPIO_A, SYS_GPA_MFPH_PA15MFP_GPIO},
|
|
||||||
|
|
||||||
// GPIO B MFPL
|
|
||||||
{PB_0, GPIO_B, SYS_GPB_MFPL_PB0MFP_GPIO},
|
|
||||||
{PB_1, GPIO_B, SYS_GPB_MFPL_PB1MFP_GPIO},
|
|
||||||
{PB_2, GPIO_B, SYS_GPB_MFPL_PB2MFP_GPIO},
|
|
||||||
{PB_3, GPIO_B, SYS_GPB_MFPL_PB3MFP_GPIO},
|
|
||||||
{PB_4, GPIO_B, SYS_GPB_MFPL_PB4MFP_GPIO},
|
|
||||||
{PB_5, GPIO_B, SYS_GPB_MFPL_PB5MFP_GPIO},
|
|
||||||
{PB_6, GPIO_B, SYS_GPB_MFPL_PB6MFP_GPIO},
|
|
||||||
{PB_7, GPIO_B, SYS_GPB_MFPL_PB7MFP_GPIO},
|
|
||||||
// GPIO B MFPH
|
|
||||||
{PB_8, GPIO_B, SYS_GPB_MFPH_PB8MFP_GPIO},
|
|
||||||
{PB_9, GPIO_B, SYS_GPB_MFPH_PB9MFP_GPIO},
|
|
||||||
{PB_10, GPIO_B, SYS_GPB_MFPH_PB10MFP_GPIO},
|
|
||||||
{PB_11, GPIO_B, SYS_GPB_MFPH_PB11MFP_GPIO},
|
|
||||||
{PB_12, GPIO_B, SYS_GPB_MFPH_PB12MFP_GPIO},
|
|
||||||
{PB_13, GPIO_B, SYS_GPB_MFPH_PB13MFP_GPIO},
|
|
||||||
{PB_14, GPIO_B, SYS_GPB_MFPH_PB14MFP_GPIO},
|
|
||||||
{PB_15, GPIO_B, SYS_GPB_MFPH_PB15MFP_GPIO},
|
|
||||||
|
|
||||||
// GPIO C MFPL
|
|
||||||
{PC_0, GPIO_C, SYS_GPC_MFPL_PC0MFP_GPIO},
|
|
||||||
{PC_1, GPIO_C, SYS_GPC_MFPL_PC1MFP_GPIO},
|
|
||||||
{PC_2, GPIO_C, SYS_GPC_MFPL_PC2MFP_GPIO},
|
|
||||||
{PC_3, GPIO_C, SYS_GPC_MFPL_PC3MFP_GPIO},
|
|
||||||
{PC_4, GPIO_C, SYS_GPC_MFPL_PC4MFP_GPIO},
|
|
||||||
{PC_5, GPIO_C, SYS_GPC_MFPL_PC5MFP_GPIO},
|
|
||||||
{PC_6, GPIO_C, SYS_GPC_MFPL_PC6MFP_GPIO},
|
|
||||||
{PC_7, GPIO_C, SYS_GPC_MFPL_PC7MFP_GPIO},
|
|
||||||
// GPIO C MFPH
|
|
||||||
{PC_8, GPIO_C, SYS_GPC_MFPH_PC8MFP_GPIO},
|
|
||||||
{PC_9, GPIO_C, SYS_GPC_MFPH_PC9MFP_GPIO},
|
|
||||||
{PC_10, GPIO_C, SYS_GPC_MFPH_PC10MFP_GPIO},
|
|
||||||
{PC_11, GPIO_C, SYS_GPC_MFPH_PC11MFP_GPIO},
|
|
||||||
{PC_12, GPIO_C, SYS_GPC_MFPH_PC12MFP_GPIO},
|
|
||||||
{PC_13, GPIO_C, SYS_GPC_MFPH_PC13MFP_GPIO},
|
|
||||||
{PC_14, GPIO_C, SYS_GPC_MFPH_PC14MFP_GPIO},
|
|
||||||
{PC_15, GPIO_C, SYS_GPC_MFPH_PC15MFP_GPIO},
|
|
||||||
|
|
||||||
// GPIO D MFPL
|
|
||||||
{PD_0, GPIO_D, SYS_GPD_MFPL_PD0MFP_GPIO},
|
|
||||||
{PD_1, GPIO_D, SYS_GPD_MFPL_PD1MFP_GPIO},
|
|
||||||
{PD_2, GPIO_D, SYS_GPD_MFPL_PD2MFP_GPIO},
|
|
||||||
{PD_3, GPIO_D, SYS_GPD_MFPL_PD3MFP_GPIO},
|
|
||||||
{PD_4, GPIO_D, SYS_GPD_MFPL_PD4MFP_GPIO},
|
|
||||||
{PD_5, GPIO_D, SYS_GPD_MFPL_PD5MFP_GPIO},
|
|
||||||
{PD_6, GPIO_D, SYS_GPD_MFPL_PD6MFP_GPIO},
|
|
||||||
{PD_7, GPIO_D, SYS_GPD_MFPL_PD7MFP_GPIO},
|
|
||||||
// GPIO D MFPH
|
|
||||||
{PD_8, GPIO_D, SYS_GPD_MFPH_PD8MFP_GPIO},
|
|
||||||
{PD_9, GPIO_D, SYS_GPD_MFPH_PD9MFP_GPIO},
|
|
||||||
{PD_10, GPIO_D, SYS_GPD_MFPH_PD10MFP_GPIO},
|
|
||||||
{PD_11, GPIO_D, SYS_GPD_MFPH_PD11MFP_GPIO},
|
|
||||||
{PD_12, GPIO_D, SYS_GPD_MFPH_PD12MFP_GPIO},
|
|
||||||
{PD_13, GPIO_D, SYS_GPD_MFPH_PD13MFP_GPIO},
|
|
||||||
{PD_14, GPIO_D, SYS_GPD_MFPH_PD14MFP_GPIO},
|
|
||||||
{PD_15, GPIO_D, SYS_GPD_MFPH_PD15MFP_GPIO},
|
|
||||||
|
|
||||||
// GPIO E MFPL
|
|
||||||
{PE_0, GPIO_E, SYS_GPE_MFPL_PE0MFP_GPIO},
|
|
||||||
{PE_1, GPIO_E, SYS_GPE_MFPL_PE1MFP_GPIO},
|
|
||||||
{PE_2, GPIO_E, SYS_GPE_MFPL_PE2MFP_GPIO},
|
|
||||||
{PE_3, GPIO_E, SYS_GPE_MFPL_PE3MFP_GPIO},
|
|
||||||
{PE_4, GPIO_E, SYS_GPE_MFPL_PE4MFP_GPIO},
|
|
||||||
{PE_5, GPIO_E, SYS_GPE_MFPL_PE5MFP_GPIO},
|
|
||||||
{PE_6, GPIO_E, SYS_GPE_MFPL_PE6MFP_GPIO},
|
|
||||||
{PE_7, GPIO_E, SYS_GPE_MFPL_PE7MFP_GPIO},
|
|
||||||
// GPIO E MFPH
|
|
||||||
{PE_8, GPIO_E, SYS_GPE_MFPH_PE8MFP_GPIO},
|
|
||||||
{PE_9, GPIO_E, SYS_GPE_MFPH_PE9MFP_GPIO},
|
|
||||||
{PE_10, GPIO_E, SYS_GPE_MFPH_PE10MFP_GPIO},
|
|
||||||
{PE_11, GPIO_E, SYS_GPE_MFPH_PE11MFP_GPIO},
|
|
||||||
{PE_12, GPIO_E, SYS_GPE_MFPH_PE12MFP_GPIO},
|
|
||||||
{PE_13, GPIO_E, SYS_GPE_MFPH_PE13MFP_GPIO},
|
|
||||||
{PE_14, GPIO_E, SYS_GPE_MFPH_PE14MFP_GPIO},
|
|
||||||
|
|
||||||
// GPIO F MFPL
|
|
||||||
{PF_0, GPIO_F, SYS_GPF_MFPL_PF0MFP_GPIO},
|
|
||||||
{PF_1, GPIO_F, SYS_GPF_MFPL_PF1MFP_GPIO},
|
|
||||||
{PF_2, GPIO_F, SYS_GPF_MFPL_PF2MFP_GPIO},
|
|
||||||
{PF_3, GPIO_F, SYS_GPF_MFPL_PF3MFP_GPIO},
|
|
||||||
{PF_4, GPIO_F, SYS_GPF_MFPL_PF4MFP_GPIO},
|
|
||||||
{PF_5, GPIO_F, SYS_GPF_MFPL_PF5MFP_GPIO},
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//*** ADC ***
|
//*** ADC ***
|
||||||
|
|
||||||
const PinMap PinMap_ADC[] = {
|
const PinMap PinMap_ADC[] = {
|
||||||
|
|
|
@ -28,8 +28,6 @@
|
||||||
void FUN(void) __attribute__ ((weak, alias(#FUN_ALIAS)));
|
void FUN(void) __attribute__ ((weak, alias(#FUN_ALIAS)));
|
||||||
|
|
||||||
#elif defined(__ICCARM__)
|
#elif defined(__ICCARM__)
|
||||||
//#define STRINGIFY(x) #x
|
|
||||||
//#define _STRINGIFY(x) STRINGIFY(x)
|
|
||||||
#define WEAK_ALIAS_FUNC(FUN, FUN_ALIAS) \
|
#define WEAK_ALIAS_FUNC(FUN, FUN_ALIAS) \
|
||||||
void FUN(void); \
|
void FUN(void); \
|
||||||
_Pragma(_STRINGIFY(_WEAK_ALIAS_FUNC(FUN, FUN_ALIAS)))
|
_Pragma(_STRINGIFY(_WEAK_ALIAS_FUNC(FUN, FUN_ALIAS)))
|
||||||
|
@ -131,7 +129,6 @@ const uint32_t __vector_handlers[] = {
|
||||||
#if defined(__CC_ARM)
|
#if defined(__CC_ARM)
|
||||||
(uint32_t) &Image$$ARM_LIB_STACK$$ZI$$Limit,
|
(uint32_t) &Image$$ARM_LIB_STACK$$ZI$$Limit,
|
||||||
#elif defined(__ICCARM__)
|
#elif defined(__ICCARM__)
|
||||||
//(uint32_t) __sfe("CSTACK"),
|
|
||||||
(uint32_t) &CSTACK$$Limit,
|
(uint32_t) &CSTACK$$Limit,
|
||||||
#elif defined(__GNUC__)
|
#elif defined(__GNUC__)
|
||||||
(uint32_t) &__StackTop,
|
(uint32_t) &__StackTop,
|
||||||
|
|
|
@ -86,7 +86,8 @@ int gpio_irq_init(gpio_irq_t *obj, PinName pin, gpio_irq_handler handler, uint32
|
||||||
obj->next = NULL;
|
obj->next = NULL;
|
||||||
|
|
||||||
GPIO_T *gpio_base = NU_PORT_BASE(port_index);
|
GPIO_T *gpio_base = NU_PORT_BASE(port_index);
|
||||||
//gpio_set(pin);
|
// NOTE: In InterruptIn constructor, gpio_irq_init() is called with gpio_init_in() which is responsible for multi-function pin setting.
|
||||||
|
// There is no need to call gpio_set() redundantly.
|
||||||
|
|
||||||
{
|
{
|
||||||
#if MBED_CONF_NANO100_GPIO_IRQ_DEBOUNCE_ENABLE
|
#if MBED_CONF_NANO100_GPIO_IRQ_DEBOUNCE_ENABLE
|
||||||
|
|
|
@ -75,8 +75,6 @@ static int i2c_do_trsn(i2c_t *obj, uint32_t i2c_ctl, int sync);
|
||||||
#define NU_I2C_TIMEOUT_STOP 500000
|
#define NU_I2C_TIMEOUT_STOP 500000
|
||||||
static int i2c_poll_status_timeout(i2c_t *obj, int (*is_status)(i2c_t *obj), uint32_t timeout);
|
static int i2c_poll_status_timeout(i2c_t *obj, int (*is_status)(i2c_t *obj), uint32_t timeout);
|
||||||
static int i2c_poll_tran_heatbeat_timeout(i2c_t *obj, uint32_t timeout);
|
static int i2c_poll_tran_heatbeat_timeout(i2c_t *obj, uint32_t timeout);
|
||||||
//static int i2c_is_stat_int(i2c_t *obj);
|
|
||||||
//static int i2c_is_stop_det(i2c_t *obj);
|
|
||||||
static int i2c_is_trsn_done(i2c_t *obj);
|
static int i2c_is_trsn_done(i2c_t *obj);
|
||||||
static int i2c_is_tran_started(i2c_t *obj);
|
static int i2c_is_tran_started(i2c_t *obj);
|
||||||
static int i2c_addr2data(int address, int read);
|
static int i2c_addr2data(int address, int read);
|
||||||
|
@ -551,8 +549,6 @@ static int i2c_is_trsn_done(i2c_t *obj)
|
||||||
int inten_back;
|
int inten_back;
|
||||||
|
|
||||||
inten_back = i2c_set_int(obj, 0);
|
inten_back = i2c_set_int(obj, 0);
|
||||||
// NUC472/M453/M487
|
|
||||||
//i2c_int = !! (i2c_base->CON & I2C_CON_I2C_STS_Msk);
|
|
||||||
// NANO130
|
// NANO130
|
||||||
i2c_int = !! (i2c_base->INTSTS & I2C_INTSTS_INTSTS_Msk);
|
i2c_int = !! (i2c_base->INTSTS & I2C_INTSTS_INTSTS_Msk);
|
||||||
status = I2C_GET_STATUS(i2c_base);
|
status = I2C_GET_STATUS(i2c_base);
|
||||||
|
@ -859,8 +855,6 @@ void i2c_transfer_asynch(i2c_t *obj, const void *tx, size_t tx_length, void *rx,
|
||||||
obj->i2c.event = event;
|
obj->i2c.event = event;
|
||||||
i2c_buffer_set(obj, tx, tx_length, rx, rx_length);
|
i2c_buffer_set(obj, tx, tx_length, rx, rx_length);
|
||||||
|
|
||||||
//I2C_T *i2c_base = (I2C_T *) NU_MODBASE(obj->i2c.i2c);
|
|
||||||
|
|
||||||
obj->i2c.hdlr_async = handler;
|
obj->i2c.hdlr_async = handler;
|
||||||
i2c_start(obj);
|
i2c_start(obj);
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,20 +28,10 @@ void pin_function(PinName pin, int data)
|
||||||
uint32_t pin_index = NU_PINNAME_TO_PIN(pin);
|
uint32_t pin_index = NU_PINNAME_TO_PIN(pin);
|
||||||
uint32_t port_index = NU_PINNAME_TO_PORT(pin);
|
uint32_t port_index = NU_PINNAME_TO_PORT(pin);
|
||||||
__IO uint32_t *Px_x_MFP = ((__IO uint32_t *) &SYS->PA_L_MFP) + port_index * 2 + (pin_index / 8);
|
__IO uint32_t *Px_x_MFP = ((__IO uint32_t *) &SYS->PA_L_MFP) + port_index * 2 + (pin_index / 8);
|
||||||
//uint32_t MFP_Pos = NU_MFP_POS(pin_index);
|
|
||||||
uint32_t MFP_Msk = NU_MFP_MSK(pin_index);
|
uint32_t MFP_Msk = NU_MFP_MSK(pin_index);
|
||||||
|
|
||||||
// E.g.: SYS->PA_L_MFP = (SYS->PA_L_MFP & (~SYS_PA_L_MFP_PA0_MFP_Msk) ) | SYS_PA_L_MFP_PA0_MFP_SC0_CD ;
|
// E.g.: SYS->PA_L_MFP = (SYS->PA_L_MFP & (~SYS_PA_L_MFP_PA0_MFP_Msk) ) | SYS_PA_L_MFP_PA0_MFP_SC0_CD ;
|
||||||
*Px_x_MFP = (*Px_x_MFP & (~MFP_Msk)) | data;
|
*Px_x_MFP = (*Px_x_MFP & (~MFP_Msk)) | data;
|
||||||
|
|
||||||
// [TODO] Disconnect JTAG-DP + SW-DP signals.
|
|
||||||
// Warning: Need to reconnect under reset
|
|
||||||
//if ((pin == PA_13) || (pin == PA_14)) {
|
|
||||||
//
|
|
||||||
//}
|
|
||||||
//if ((pin == PA_15) || (pin == PB_3) || (pin == PB_4)) {
|
|
||||||
//
|
|
||||||
//}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -201,8 +201,10 @@ static void pwmout_config(pwmout_t* obj)
|
||||||
PWM_T *pwm_base = (PWM_T *) NU_MODBASE(obj->pwm);
|
PWM_T *pwm_base = (PWM_T *) NU_MODBASE(obj->pwm);
|
||||||
uint32_t chn = NU_MODSUBINDEX(obj->pwm);
|
uint32_t chn = NU_MODSUBINDEX(obj->pwm);
|
||||||
// NOTE: Support period < 1s
|
// NOTE: Support period < 1s
|
||||||
//PWM_ConfigOutputChannel(pwm_base, chn, 1000 * 1000 / obj->period_us, obj->pulsewidth_us * 100 / obj->period_us);
|
// NOTE: ARM mbed CI test fails due to first PWM pulse error. Workaround by:
|
||||||
// enable inverter to ensure the first PWM cycle is correct
|
// 1. Inverse duty cycle (100 - duty)
|
||||||
|
// 2. Inverse PWM output polarity
|
||||||
|
// This trick is here to pass ARM mbed CI test. First PWM pulse error still remains.
|
||||||
PWM_ConfigOutputChannel2(pwm_base, chn, 1000 * 1000, 100 - (obj->pulsewidth_us * 100 / obj->period_us), obj->period_us);
|
PWM_ConfigOutputChannel2(pwm_base, chn, 1000 * 1000, 100 - (obj->pulsewidth_us * 100 / obj->period_us), obj->period_us);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -57,7 +57,6 @@ void hal_deepsleep(void)
|
||||||
|
|
||||||
static void mbed_enter_sleep(struct sleep_s *obj)
|
static void mbed_enter_sleep(struct sleep_s *obj)
|
||||||
{
|
{
|
||||||
#if 0
|
|
||||||
// Check if serial allows entering power-down mode
|
// Check if serial allows entering power-down mode
|
||||||
if (obj->powerdown) {
|
if (obj->powerdown) {
|
||||||
obj->powerdown = serial_allow_powerdown();
|
obj->powerdown = serial_allow_powerdown();
|
||||||
|
@ -75,14 +74,12 @@ static void mbed_enter_sleep(struct sleep_s *obj)
|
||||||
obj->powerdown = pwmout_allow_powerdown();
|
obj->powerdown = pwmout_allow_powerdown();
|
||||||
}
|
}
|
||||||
// TODO: Check if other peripherals allow entering power-down mode
|
// TODO: Check if other peripherals allow entering power-down mode
|
||||||
#endif
|
|
||||||
|
|
||||||
if (obj->powerdown) { // Power-down mode (HIRC/HXT disabled, LIRC/LXT enabled)
|
if (obj->powerdown) { // Power-down mode (HIRC/HXT disabled, LIRC/LXT enabled)
|
||||||
SYS_UnlockReg();
|
SYS_UnlockReg();
|
||||||
CLK_PowerDown();
|
CLK_PowerDown();
|
||||||
SYS_LockReg();
|
SYS_LockReg();
|
||||||
}
|
} else { // CPU halt mode (HIRC/HXT enabled, LIRC/LXT enabled)
|
||||||
else { // CPU halt mode (HIRC/HXT enabled, LIRC/LXT enabled)
|
|
||||||
SYS_UnlockReg();
|
SYS_UnlockReg();
|
||||||
CLK_Idle();
|
CLK_Idle();
|
||||||
SYS_LockReg();
|
SYS_LockReg();
|
||||||
|
@ -95,8 +92,6 @@ static void mbed_enter_sleep(struct sleep_s *obj)
|
||||||
|
|
||||||
static void mbed_exit_sleep(struct sleep_s *obj)
|
static void mbed_exit_sleep(struct sleep_s *obj)
|
||||||
{
|
{
|
||||||
// TODO: TO BE CONTINUED
|
|
||||||
|
|
||||||
(void)obj;
|
(void)obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -113,9 +113,6 @@ void spi_init(spi_t *obj, PinName mosi, PinName miso, PinName sclk, PinName ssel
|
||||||
uint32_t spi_cntl = pinmap_merge(spi_sclk, spi_ssel);
|
uint32_t spi_cntl = pinmap_merge(spi_sclk, spi_ssel);
|
||||||
// NOTE:
|
// NOTE:
|
||||||
// NANO130: Support two-port SPI MOSI/MISO 0/1
|
// NANO130: Support two-port SPI MOSI/MISO 0/1
|
||||||
#if 0
|
|
||||||
obj->spi.spi = (SPIName) pinmap_merge(spi_data, spi_cntl);
|
|
||||||
#else
|
|
||||||
if (NU_MODBASE(spi_data) == NU_MODBASE(spi_cntl)) {
|
if (NU_MODBASE(spi_data) == NU_MODBASE(spi_cntl)) {
|
||||||
// NOTE: spi_data has subindex(port) encoded but spi_cntl hasn't.
|
// NOTE: spi_data has subindex(port) encoded but spi_cntl hasn't.
|
||||||
obj->spi.spi = (SPIName) spi_data;
|
obj->spi.spi = (SPIName) spi_data;
|
||||||
|
@ -123,7 +120,6 @@ void spi_init(spi_t *obj, PinName mosi, PinName miso, PinName sclk, PinName ssel
|
||||||
else {
|
else {
|
||||||
obj->spi.spi = (SPIName) NC;
|
obj->spi.spi = (SPIName) NC;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
MBED_ASSERT((int)obj->spi.spi != NC);
|
MBED_ASSERT((int)obj->spi.spi != NC);
|
||||||
|
|
||||||
const struct nu_modinit_s *modinit = get_modinit(obj->spi.spi, spi_modinit_tab);
|
const struct nu_modinit_s *modinit = get_modinit(obj->spi.spi, spi_modinit_tab);
|
||||||
|
@ -148,10 +144,6 @@ void spi_init(spi_t *obj, PinName mosi, PinName miso, PinName sclk, PinName ssel
|
||||||
obj->spi.pin_sclk = sclk;
|
obj->spi.pin_sclk = sclk;
|
||||||
obj->spi.pin_ssel = ssel;
|
obj->spi.pin_ssel = ssel;
|
||||||
|
|
||||||
//SPI_T *spi_base = (SPI_T *) NU_MODBASE(obj->spi.spi);
|
|
||||||
// Configure the SPI data format and frequency
|
|
||||||
//spi_format(obj, 8, 0, SPI_MSB); // 8 bits, mode 0
|
|
||||||
//spi_frequency(obj, 1000000);
|
|
||||||
|
|
||||||
#if DEVICE_SPI_ASYNCH
|
#if DEVICE_SPI_ASYNCH
|
||||||
obj->spi.dma_usage = DMA_USAGE_NEVER;
|
obj->spi.dma_usage = DMA_USAGE_NEVER;
|
||||||
|
@ -189,8 +181,6 @@ void spi_free(spi_t *obj)
|
||||||
// Disable IP clock
|
// Disable IP clock
|
||||||
CLK_DisableModuleClock(modinit->clkidx);
|
CLK_DisableModuleClock(modinit->clkidx);
|
||||||
|
|
||||||
//((struct nu_spi_var *) modinit->var)->obj = NULL;
|
|
||||||
|
|
||||||
// Mark this module to be deinited.
|
// Mark this module to be deinited.
|
||||||
int i = modinit - spi_modinit_tab;
|
int i = modinit - spi_modinit_tab;
|
||||||
spi_modinit_mask &= ~(1 << i);
|
spi_modinit_mask &= ~(1 << i);
|
||||||
|
@ -280,7 +270,6 @@ int spi_master_write(spi_t *obj, int value)
|
||||||
// NOTE:
|
// NOTE:
|
||||||
// NUC472/M453/M487: SPI_CTL.SPIEN is controlled by software (in FIFO mode).
|
// NUC472/M453/M487: SPI_CTL.SPIEN is controlled by software (in FIFO mode).
|
||||||
// NANO130: SPI_CTL.GO_BUSY is controlled by hardware in FIFO mode.
|
// NANO130: SPI_CTL.GO_BUSY is controlled by hardware in FIFO mode.
|
||||||
//SPI_TRIGGER(spi_base);
|
|
||||||
|
|
||||||
// Wait for tx buffer empty
|
// Wait for tx buffer empty
|
||||||
while(! spi_writeable(obj));
|
while(! spi_writeable(obj));
|
||||||
|
@ -316,8 +305,6 @@ int spi_slave_receive(spi_t *obj)
|
||||||
// NOTE:
|
// NOTE:
|
||||||
// NUC472/M453/M487: SPI_CTL.SPIEN is controlled by software (in FIFO mode).
|
// NUC472/M453/M487: SPI_CTL.SPIEN is controlled by software (in FIFO mode).
|
||||||
// NANO130: SPI_CTL.GO_BUSY is controlled by hardware in FIFO mode.
|
// NANO130: SPI_CTL.GO_BUSY is controlled by hardware in FIFO mode.
|
||||||
//SPI_T *spi_base = (SPI_T *) NU_MODBASE(obj->spi.spi);
|
|
||||||
//SPI_TRIGGER(spi_base);
|
|
||||||
|
|
||||||
return spi_readable(obj);
|
return spi_readable(obj);
|
||||||
};
|
};
|
||||||
|
@ -329,7 +316,6 @@ int spi_slave_read(spi_t *obj)
|
||||||
// NOTE:
|
// NOTE:
|
||||||
// NUC472/M453/M487: SPI_CTL.SPIEN is controlled by software (in FIFO mode).
|
// NUC472/M453/M487: SPI_CTL.SPIEN is controlled by software (in FIFO mode).
|
||||||
// NANO130: SPI_CTL.GO_BUSY is controlled by hardware in FIFO mode.
|
// NANO130: SPI_CTL.GO_BUSY is controlled by hardware in FIFO mode.
|
||||||
//SPI_TRIGGER(spi_base);
|
|
||||||
|
|
||||||
// Wait for rx buffer full
|
// Wait for rx buffer full
|
||||||
while (! spi_readable(obj));
|
while (! spi_readable(obj));
|
||||||
|
@ -345,7 +331,6 @@ void spi_slave_write(spi_t *obj, int value)
|
||||||
// NOTE:
|
// NOTE:
|
||||||
// NUC472/M453/M487: SPI_CTL.SPIEN is controlled by software (in FIFO mode).
|
// NUC472/M453/M487: SPI_CTL.SPIEN is controlled by software (in FIFO mode).
|
||||||
// NANO130: SPI_CTL.GO_BUSY is controlled by hardware in FIFO mode.
|
// NANO130: SPI_CTL.GO_BUSY is controlled by hardware in FIFO mode.
|
||||||
//SPI_TRIGGER(spi_base);
|
|
||||||
|
|
||||||
// Wait for tx buffer empty
|
// Wait for tx buffer empty
|
||||||
while(! spi_writeable(obj));
|
while(! spi_writeable(obj));
|
||||||
|
@ -357,7 +342,6 @@ void spi_slave_write(spi_t *obj, int value)
|
||||||
#if DEVICE_SPI_ASYNCH
|
#if DEVICE_SPI_ASYNCH
|
||||||
void spi_master_transfer(spi_t *obj, const void *tx, size_t tx_length, void *rx, size_t rx_length, uint8_t bit_width, uint32_t handler, uint32_t event, DMAUsage hint)
|
void spi_master_transfer(spi_t *obj, const void *tx, size_t tx_length, void *rx, size_t rx_length, uint8_t bit_width, uint32_t handler, uint32_t event, DMAUsage hint)
|
||||||
{
|
{
|
||||||
//MBED_ASSERT(bits >= NU_SPI_FRAME_MIN && bits <= NU_SPI_FRAME_MAX);
|
|
||||||
SPI_T *spi_base = (SPI_T *) NU_MODBASE(obj->spi.spi);
|
SPI_T *spi_base = (SPI_T *) NU_MODBASE(obj->spi.spi);
|
||||||
SPI_SET_DATA_WIDTH(spi_base, bit_width);
|
SPI_SET_DATA_WIDTH(spi_base, bit_width);
|
||||||
|
|
||||||
|
@ -383,7 +367,6 @@ void spi_master_transfer(spi_t *obj, const void *tx, size_t tx_length, void *rx,
|
||||||
// NOTE:
|
// NOTE:
|
||||||
// NUC472/M453/M487: SPI_CTL.SPIEN is controlled by software (in FIFO mode).
|
// NUC472/M453/M487: SPI_CTL.SPIEN is controlled by software (in FIFO mode).
|
||||||
// NANO130: SPI_CTL.GO_BUSY is controlled by hardware in FIFO mode.
|
// NANO130: SPI_CTL.GO_BUSY is controlled by hardware in FIFO mode.
|
||||||
//SPI_TRIGGER(spi_base);
|
|
||||||
|
|
||||||
if (obj->spi.dma_usage == DMA_USAGE_NEVER) {
|
if (obj->spi.dma_usage == DMA_USAGE_NEVER) {
|
||||||
// Interrupt way
|
// Interrupt way
|
||||||
|
@ -413,12 +396,6 @@ void spi_master_transfer(spi_t *obj, const void *tx, size_t tx_length, void *rx,
|
||||||
PDMA_SAR_INC, // Source address incremental
|
PDMA_SAR_INC, // Source address incremental
|
||||||
NU_MODSUBINDEX(obj->spi.spi) == 0 ? (uint32_t) &spi_base->TX0 : (uint32_t) &spi_base->TX1, // Destination address
|
NU_MODSUBINDEX(obj->spi.spi) == 0 ? (uint32_t) &spi_base->TX0 : (uint32_t) &spi_base->TX1, // Destination address
|
||||||
PDMA_DAR_FIX); // Destination address fixed
|
PDMA_DAR_FIX); // Destination address fixed
|
||||||
#if 0 // NOTE:
|
|
||||||
// NANO130: No burst type setting
|
|
||||||
PDMA_SetBurstType(obj->spi.dma_chn_id_tx,
|
|
||||||
PDMA_REQ_SINGLE, // Single mode
|
|
||||||
0); // Burst size
|
|
||||||
#endif
|
|
||||||
PDMA_EnableInt(obj->spi.dma_chn_id_tx,
|
PDMA_EnableInt(obj->spi.dma_chn_id_tx,
|
||||||
PDMA_IER_TD_IE_Msk); // Interrupt type
|
PDMA_IER_TD_IE_Msk); // Interrupt type
|
||||||
// Register DMA event handler
|
// Register DMA event handler
|
||||||
|
@ -441,12 +418,6 @@ void spi_master_transfer(spi_t *obj, const void *tx, size_t tx_length, void *rx,
|
||||||
// M451: Start of destination address
|
// M451: Start of destination address
|
||||||
// NANO130: Start of destination address
|
// NANO130: Start of destination address
|
||||||
PDMA_DAR_INC); // Destination address incremental
|
PDMA_DAR_INC); // Destination address incremental
|
||||||
#if 0 // NOTE:
|
|
||||||
// NANO130: No burst type setting
|
|
||||||
PDMA_SetBurstType(obj->spi.dma_chn_id_rx,
|
|
||||||
PDMA_REQ_SINGLE, // Single mode
|
|
||||||
0); // Burst size
|
|
||||||
#endif
|
|
||||||
PDMA_EnableInt(obj->spi.dma_chn_id_rx,
|
PDMA_EnableInt(obj->spi.dma_chn_id_rx,
|
||||||
PDMA_IER_TD_IE_Msk); // Interrupt type
|
PDMA_IER_TD_IE_Msk); // Interrupt type
|
||||||
// Register DMA event handler
|
// Register DMA event handler
|
||||||
|
@ -483,7 +454,6 @@ void spi_abort_asynch(spi_t *obj)
|
||||||
if (obj->spi.dma_chn_id_tx != DMA_ERROR_OUT_OF_CHANNELS) {
|
if (obj->spi.dma_chn_id_tx != DMA_ERROR_OUT_OF_CHANNELS) {
|
||||||
PDMA_DisableInt(obj->spi.dma_chn_id_tx, PDMA_IER_TD_IE_Msk);
|
PDMA_DisableInt(obj->spi.dma_chn_id_tx, PDMA_IER_TD_IE_Msk);
|
||||||
// NOTE: On NUC472, next PDMA transfer will fail with PDMA_STOP() called.
|
// NOTE: On NUC472, next PDMA transfer will fail with PDMA_STOP() called.
|
||||||
//PDMA_STOP(obj->spi.dma_chn_id_tx);
|
|
||||||
dma_enable(obj->spi.dma_chn_id_tx, 0);
|
dma_enable(obj->spi.dma_chn_id_tx, 0);
|
||||||
}
|
}
|
||||||
//SPI_DISABLE_TX_PDMA(((SPI_T *) NU_MODBASE(obj->spi.spi)));
|
//SPI_DISABLE_TX_PDMA(((SPI_T *) NU_MODBASE(obj->spi.spi)));
|
||||||
|
@ -492,7 +462,6 @@ void spi_abort_asynch(spi_t *obj)
|
||||||
if (obj->spi.dma_chn_id_rx != DMA_ERROR_OUT_OF_CHANNELS) {
|
if (obj->spi.dma_chn_id_rx != DMA_ERROR_OUT_OF_CHANNELS) {
|
||||||
PDMA_DisableInt(obj->spi.dma_chn_id_rx, PDMA_IER_TD_IE_Msk);
|
PDMA_DisableInt(obj->spi.dma_chn_id_rx, PDMA_IER_TD_IE_Msk);
|
||||||
// NOTE: On NUC472, next PDMA transfer will fail with PDMA_STOP() called.
|
// NOTE: On NUC472, next PDMA transfer will fail with PDMA_STOP() called.
|
||||||
//PDMA_STOP(obj->spi.dma_chn_id_rx);
|
|
||||||
dma_enable(obj->spi.dma_chn_id_rx, 0);
|
dma_enable(obj->spi.dma_chn_id_rx, 0);
|
||||||
}
|
}
|
||||||
//SPI_DISABLE_RX_PDMA(((SPI_T *) NU_MODBASE(obj->spi.spi)));
|
//SPI_DISABLE_RX_PDMA(((SPI_T *) NU_MODBASE(obj->spi.spi)));
|
||||||
|
@ -531,15 +500,6 @@ uint32_t spi_irq_handler_asynch(spi_t *obj)
|
||||||
uint8_t spi_active(spi_t *obj)
|
uint8_t spi_active(spi_t *obj)
|
||||||
{
|
{
|
||||||
SPI_T *spi_base = (SPI_T *) NU_MODBASE(obj->spi.spi);
|
SPI_T *spi_base = (SPI_T *) NU_MODBASE(obj->spi.spi);
|
||||||
/*
|
|
||||||
if ((obj->rx_buff.buffer && obj->rx_buff.pos < obj->rx_buff.length)
|
|
||||||
|| (obj->tx_buff.buffer && obj->tx_buff.pos < obj->tx_buff.length) ){
|
|
||||||
return 1;
|
|
||||||
} else {
|
|
||||||
// interrupts are disabled, all transaction have been completed
|
|
||||||
// TODO: checking rx fifo, it reports data eventhough RFDF is not set
|
|
||||||
return DSPI_HAL_GetIntMode(obj->spi.address, kDspiRxFifoDrainRequest);
|
|
||||||
}*/
|
|
||||||
|
|
||||||
return SPI_IS_BUSY(spi_base);
|
return SPI_IS_BUSY(spi_base);
|
||||||
}
|
}
|
||||||
|
@ -585,7 +545,6 @@ static void spi_irq(spi_t *obj)
|
||||||
static int spi_writeable(spi_t * obj)
|
static int spi_writeable(spi_t * obj)
|
||||||
{
|
{
|
||||||
// Receive FIFO must not be full to avoid receive FIFO overflow on next transmit/receive
|
// Receive FIFO must not be full to avoid receive FIFO overflow on next transmit/receive
|
||||||
//return (! SPI_GET_TX_FIFO_FULL_FLAG(((SPI_T *) NU_MODBASE(obj->spi.spi)))) && (SPI_GET_RX_FIFO_COUNT(((SPI_T *) NU_MODBASE(obj->spi.spi))) < NU_SPI_FIFO_DEPTH);
|
|
||||||
return (! SPI_GET_TX_FIFO_FULL_FLAG(((SPI_T *) NU_MODBASE(obj->spi.spi))));
|
return (! SPI_GET_TX_FIFO_FULL_FLAG(((SPI_T *) NU_MODBASE(obj->spi.spi))));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -631,7 +590,6 @@ static void spi_master_enable_interrupt(spi_t *obj, uint8_t enable, uint32_t mas
|
||||||
// NOTE:
|
// NOTE:
|
||||||
// NANO130: SPI_IE_MASK/SPI_STATUS_INTSTS_Msk are for unit transfer IE/EF. Don't get confused.
|
// NANO130: SPI_IE_MASK/SPI_STATUS_INTSTS_Msk are for unit transfer IE/EF. Don't get confused.
|
||||||
if (enable) {
|
if (enable) {
|
||||||
//SPI_SET_SUSPEND_CYCLE(spi_base, 4);
|
|
||||||
// Enable tx/rx FIFO threshold interrupt
|
// Enable tx/rx FIFO threshold interrupt
|
||||||
SPI_EnableInt(spi_base, mask);
|
SPI_EnableInt(spi_base, mask);
|
||||||
}
|
}
|
||||||
|
@ -666,16 +624,7 @@ static uint32_t spi_event_check(spi_t *obj)
|
||||||
// Receive Time-Out
|
// Receive Time-Out
|
||||||
if (spi_base->STATUS & SPI_STATUS_TIME_OUT_STS_Msk) {
|
if (spi_base->STATUS & SPI_STATUS_TIME_OUT_STS_Msk) {
|
||||||
spi_base->STATUS = SPI_STATUS_TIME_OUT_STS_Msk;
|
spi_base->STATUS = SPI_STATUS_TIME_OUT_STS_Msk;
|
||||||
//event |= SPI_EVENT_ERROR;
|
|
||||||
}
|
}
|
||||||
#if 0 // NOTE:
|
|
||||||
// NANO130: No FIFO Under-RUN IF
|
|
||||||
// Transmit FIFO Under-Run
|
|
||||||
if (spi_base->STATUS & SPI_STATUS_TXUFIF_Msk) {
|
|
||||||
spi_base->STATUS = SPI_STATUS_TXUFIF_Msk;
|
|
||||||
event |= SPI_EVENT_ERROR;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return event;
|
return event;
|
||||||
}
|
}
|
||||||
|
@ -835,9 +784,7 @@ static uint8_t spi_get_data_width(spi_t *obj)
|
||||||
|
|
||||||
static int spi_is_tx_complete(spi_t *obj)
|
static int spi_is_tx_complete(spi_t *obj)
|
||||||
{
|
{
|
||||||
// ???: Exclude tx fifo empty check due to no such interrupt on DMA way
|
|
||||||
return (obj->tx_buff.pos == obj->tx_buff.length);
|
return (obj->tx_buff.pos == obj->tx_buff.length);
|
||||||
//return (obj->tx_buff.pos == obj->tx_buff.length && SPI_GET_TX_FIFO_EMPTY_FLAG(((SPI_T *) NU_MODBASE(obj->spi.spi))));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int spi_is_rx_complete(spi_t *obj)
|
static int spi_is_rx_complete(spi_t *obj)
|
||||||
|
|
Loading…
Reference in New Issue