/* Channel initialization function */ void SPI_CONFIG_0_lInit() { /* Initialize USIC channel in SPI mode */ XMC_SPI_CH_Init(XMC_SPI0_CH1, &SPI_CONFIG_0_channel_config); /* Set the frame and word length */ XMC_SPI_CH_SetFrameLength(XMC_SPI0_CH1, 16U); XMC_SPI_CH_SetWordLength(XMC_SPI0_CH1, 16U); /* Set MSB data shift direction */ XMC_SPI_CH_SetBitOrderMsbFirst(XMC_SPI0_CH1); /* Set input source for input stage dx0 (receive pin) */ XMC_SPI_CH_SetInputSource(XMC_SPI0_CH1, XMC_SPI_CH_INPUT_DIN0, 0U); /* Set input source for input stage dx3 (receive pin) */ XMC_SPI_CH_SetInputSource(XMC_SPI0_CH1, XMC_SPI_CH_INPUT_DIN1, 0U); /* Set input source for input stage dx4 (receive pin) */ XMC_SPI_CH_SetInputSource(XMC_SPI0_CH1, XMC_SPI_CH_INPUT_DIN2, 0U); /* Set input source for input stage dx5 (receive pin) */ XMC_SPI_CH_SetInputSource(XMC_SPI0_CH1, XMC_SPI_CH_INPUT_DIN3, 0U); /* Disable Frame End Mode */ XMC_SPI_CH_DisableFEM(XMC_SPI0_CH1); /* Configure the clock polarity and clock delay */ XMC_SPI_CH_ConfigureShiftClockOutput(XMC_SPI0_CH1, XMC_SPI_CH_BRG_SHIFT_CLOCK_PASSIVE_LEVEL_1_DELAY_ENABLED, XMC_SPI_CH_BRG_SHIFT_CLOCK_OUTPUT_SCLK); /* Disable all Slave Select lines */ XMC_SPI_CH_DisableSlaveSelect(XMC_SPI0_CH1); /* Establish Slave Select signal polarity */ XMC_SPI_CH_SetSlaveSelectPolarity(XMC_SPI0_CH1, XMC_SPI_CH_SLAVE_SEL_INV_TO_MSLS); /* Set Select Control */; XMC_SPI_CH_DisableSlaveSelectCodedMode(XMC_SPI0_CH1); /* Configure the leading/trailing delay for the MSLS signal */ XMC_SPI_CH_SetSlaveSelectDelay(XMC_SPI0_CH1, 2U); /* Set the service request line for the Data Lost, Baud Rate Generator and SPI protocol events */ XMC_USIC_CH_SetInterruptNodePointer(XMC_SPI0_CH1, XMC_USIC_CH_INTERRUPT_NODE_POINTER_PROTOCOL, 0U); /* Enable the Slave Select 0 Signal */ XMC_SPI_CH_EnableSlaveSelect(XMC_SPI0_CH1, SPI_CONFIG_0_slave_select_list[0]); }
/* * This routine writes to display controller using SPI bus, with A0 = 1 * */ void GUI_SEGGERLIBRARY_WriteDataByte(uint8_t data) { #if (!USER_DEFINED_LCD && SPI_INTERFACE == 1) /* Set the A0 pin*/ XMC_GPIO_SetOutputHigh(IOHandle.portNo,IOHandle.pinNo); #endif XMC_SPI_CH_EnableSlaveSelect(SPI_INSTANCE.channel, SPI_INSTANCE.config->slave_select_pin_config[0]->slave_select_ch); GUI_SEGGERLIBRARY_SendByte(data); XMC_SPI_CH_DisableSlaveSelect(SPI_INSTANCE.channel); }
/* * This routine writes to display controller using SPI bus, with A0 = 0 * */ void GUI_SEGGERLIBRARY_WriteCmdByte(uint8_t cmd) { #if (!USER_DEFINED_LCD && SPI_INTERFACE == 1) /* Clear the A0 pin */ XMC_GPIO_SetOutputLow(IOHandle.portNo,IOHandle.pinNo); #endif XMC_SPI_CH_EnableSlaveSelect(SPI_INSTANCE.channel,SPI_INSTANCE.config->slave_select_pin_config[0]->slave_select_ch); /* Write to the SPI Bus */ GUI_SEGGERLIBRARY_SendByte(cmd); XMC_SPI_CH_DisableSlaveSelect(SPI_INSTANCE.channel); }
/* * This routine writes multiple bytes to display controller using SPI bus, * with A0 = 1. * */ void GUI_SEGGERLIBRARY_WriteMultipleBytes(uint8_t *data, int numitems) { uint8_t datacopy; #if (!USER_DEFINED_LCD && SPI_INTERFACE == 1) /* Set the A0 pin*/ XMC_GPIO_SetOutputHigh(IOHandle.portNo,IOHandle.pinNo); #endif XMC_SPI_CH_EnableSlaveSelect(SPI_INSTANCE.channel, SPI_INSTANCE.config->slave_select_pin_config[0]->slave_select_ch); do { datacopy = *data; GUI_SEGGERLIBRARY_SendByte(datacopy); data++; }while(--numitems); XMC_SPI_CH_DisableSlaveSelect(SPI_INSTANCE.channel); }