147 lines
4.3 KiB
C
147 lines
4.3 KiB
C
#include "elite_board.h"
|
|
|
|
#include "nrf_spim.h"
|
|
|
|
#include "FreeRTOS.h"
|
|
#include "semphr.h"
|
|
#include "task.h"
|
|
|
|
#if (DEF_ELITE_MODEL == DEF_CURRENT_PULSE_GANERATOR_10)
|
|
|
|
void spim_xfer(uint32_t cs_pin,
|
|
nrf_spim_mode_t spi_mode,
|
|
uint8_t *p_tx_buffer,
|
|
uint16_t tx_buffer_length,
|
|
uint8_t *p_rx_buf,
|
|
uint16_t rx_buffer_length)
|
|
{
|
|
__disable_irq();
|
|
|
|
NRF_SPIM3->ENABLE = SPIM_ENABLE_ENABLE_Disabled << SPIM_ENABLE_ENABLE_Pos;
|
|
|
|
switch (spi_mode)
|
|
{
|
|
default:
|
|
case NRF_SPIM_MODE_0:
|
|
NRF_SPIM3->CONFIG = (SPIM_CONFIG_ORDER_MsbFirst << SPIM_CONFIG_ORDER_Pos) |
|
|
(SPIM_CONFIG_CPOL_ActiveHigh << SPIM_CONFIG_CPOL_Pos) |
|
|
(SPIM_CONFIG_CPHA_Leading << SPIM_CONFIG_CPHA_Pos);
|
|
break;
|
|
|
|
case NRF_SPIM_MODE_1:
|
|
NRF_SPIM3->CONFIG = (SPIM_CONFIG_ORDER_MsbFirst << SPIM_CONFIG_ORDER_Pos) |
|
|
(SPIM_CONFIG_CPOL_ActiveHigh << SPIM_CONFIG_CPOL_Pos) |
|
|
(SPIM_CONFIG_CPHA_Trailing << SPIM_CONFIG_CPHA_Pos);
|
|
break;
|
|
|
|
case NRF_SPIM_MODE_2:
|
|
NRF_SPIM3->CONFIG = (SPIM_CONFIG_ORDER_MsbFirst << SPIM_CONFIG_ORDER_Pos) |
|
|
(SPIM_CONFIG_CPOL_ActiveLow << SPIM_CONFIG_CPOL_Pos) |
|
|
(SPIM_CONFIG_CPHA_Leading << SPIM_CONFIG_CPHA_Pos);
|
|
break;
|
|
|
|
case NRF_SPIM_MODE_3:
|
|
NRF_SPIM3->CONFIG = (SPIM_CONFIG_ORDER_MsbFirst << SPIM_CONFIG_ORDER_Pos) |
|
|
(SPIM_CONFIG_CPOL_ActiveLow << SPIM_CONFIG_CPOL_Pos) |
|
|
(SPIM_CONFIG_CPHA_Trailing << SPIM_CONFIG_CPHA_Pos);
|
|
break;
|
|
}
|
|
|
|
NRF_SPIM3->ENABLE = SPIM_ENABLE_ENABLE_Enabled << SPIM_ENABLE_ENABLE_Pos;
|
|
|
|
NRF_SPIM3->TXD.MAXCNT = tx_buffer_length;
|
|
NRF_SPIM3->TXD.PTR = (uint32_t)p_tx_buffer;
|
|
|
|
NRF_SPIM3->RXD.MAXCNT = rx_buffer_length;
|
|
NRF_SPIM3->RXD.PTR = (uint32_t)p_rx_buf;
|
|
|
|
nrf_gpio_pin_clear(cs_pin);
|
|
|
|
NRF_SPIM3->EVENTS_END = 0;
|
|
NRF_SPIM3->TASKS_START = 1;
|
|
do {
|
|
} while (NRF_SPIM3->EVENTS_END == 0);
|
|
|
|
nrf_gpio_pin_set(cs_pin);
|
|
|
|
__enable_irq();
|
|
}
|
|
|
|
void cpg10_io_init(void)
|
|
{
|
|
const uint32_t pel_pins_default_high[] = {
|
|
VA1H_PIN,
|
|
VA2H_PIN,
|
|
VA3H_PIN,
|
|
VA4H_PIN,
|
|
VB1H_PIN,
|
|
VB2H_PIN,
|
|
VB3H_PIN,
|
|
VB4H_PIN,
|
|
LED_R_PIN,
|
|
LED_G_PIN,
|
|
LED_B_PIN
|
|
};
|
|
|
|
const uint32_t pel_pins_default_low[] = {
|
|
ADPT0_S4_PIN,
|
|
ADPT0_S3_PIN,
|
|
ADPT0_S2_PIN,
|
|
ADPT0_S1_PIN,
|
|
ADPT_LE_PIN,
|
|
ADPT_CLR_PIN,
|
|
TW_SCKI_0_PIN,
|
|
TW_SCKI_1_PIN,
|
|
HV_EN_PIN,
|
|
ADPT1_S1_PIN,
|
|
VA1L_PIN,
|
|
VA2L_PIN,
|
|
VA3L_PIN,
|
|
VA4L_PIN,
|
|
VB1L_PIN,
|
|
VB2L_PIN,
|
|
VB3L_PIN,
|
|
VB4L_PIN,
|
|
ADPT1_S4_PIN,
|
|
ADPT1_S3_PIN,
|
|
ADPT1_S2_PIN
|
|
};
|
|
|
|
for (int i = 0; i < COUNTOF(pel_pins_default_high); i++)
|
|
{
|
|
nrf_gpio_pin_set(pel_pins_default_high[i]);
|
|
nrf_gpio_cfg_output(pel_pins_default_high[i]);
|
|
}
|
|
|
|
for (int i = 0; i < COUNTOF(pel_pins_default_low); i++)
|
|
{
|
|
nrf_gpio_pin_clear(pel_pins_default_low[i]);
|
|
nrf_gpio_cfg_output(pel_pins_default_low[i]);
|
|
}
|
|
|
|
nrf_gpio_cfg_input(AIN0_PIN, NRF_GPIO_PIN_NOPULL);
|
|
nrf_gpio_cfg_input(AIN1_PIN, NRF_GPIO_PIN_NOPULL);
|
|
|
|
// Config spi module
|
|
nrf_gpio_pin_set(CS_MEM_PIN);
|
|
nrf_gpio_cfg_output(CS_MEM_PIN);
|
|
nrf_gpio_pin_clear(SPIM_MOSI_PIN);
|
|
nrf_gpio_cfg_output(SPIM_MOSI_PIN);
|
|
nrf_gpio_pin_clear(SPIM_CLK_PIN);
|
|
nrf_gpio_cfg_output(SPIM_CLK_PIN);
|
|
nrf_gpio_cfg_input(SPIM_MISO_PIN, NRF_GPIO_PIN_NOPULL);
|
|
|
|
NRF_SPIM3->ENABLE = SPIM_ENABLE_ENABLE_Disabled << SPIM_ENABLE_ENABLE_Pos;
|
|
NRF_SPIM3->ORC = 0x00000000;
|
|
NRF_SPIM3->FREQUENCY = SPIM_FREQUENCY_FREQUENCY_M32;
|
|
NRF_SPIM3->CSNPOL = SPIM_CSNPOL_CSNPOL_LOW;
|
|
NRF_SPIM3->IFTIMING.CSNDUR = 8;
|
|
NRF_SPIM3->PSEL.CSN = CS_MEM_PIN;
|
|
NRF_SPIM3->PSEL.SCK = SPIM_CLK_PIN;
|
|
NRF_SPIM3->PSEL.MOSI = SPIM_MOSI_PIN;
|
|
NRF_SPIM3->PSEL.MISO = SPIM_MISO_PIN;
|
|
NRF_SPIM3->ENABLE = SPIM_ENABLE_ENABLE_Enabled << SPIM_ENABLE_ENABLE_Pos;
|
|
}
|
|
|
|
#endif
|