void Zone_Init(void) { SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI0); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); GPIOPinTypeSSI(GPIO_PORTA_BASE, GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_5); GPIOPadConfigSet(GPIO_PORTA_BASE, GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_5, GPIO_STRENGTH_8MA, GPIO_PIN_TYPE_STD_WPU); SSIDisable(SSI0_BASE); SSIConfigSetExpClk(SSI0_BASE, SysCtlClockGet(), SSI_FRF_MOTO_MODE_0, SSI_MODE_MASTER, 2000000, 8); GPIOPinTypeSSI(GPIO_PORTA_BASE, GPIO_PIN_3); GPIOPadConfigSet(GPIO_PORTA_BASE, GPIO_PIN_3, GPIO_STRENGTH_8MA, GPIO_PIN_TYPE_STD_WPU); SSIEnable(SSI0_BASE); while(SSIBusy(SSI0_BASE)) {} SSIDataPut(SSI0_BASE, ZONE_NONE); }
//***************************************************************************** // //! Enable the SSI component of the OLED display driver. //! //! \param ulFrequency specifies the SSI Clock Frequency to be used. //! //! This function initializes the SSI interface to the OLED display. //! //! \return None. // //***************************************************************************** void RIT128x96x4Enable(unsigned long ulFrequency) { // // Disable the SSI port. // SSIDisable(SSI0_BASE); // // Configure the SSI0 port for master mode. // SSIConfigSetExpClk(SSI0_BASE, SysCtlClockGet(), SSI_FRF_MOTO_MODE_3, SSI_MODE_MASTER, ulFrequency, 8); // // (Re)Enable SSI control of the FSS pin. // GPIOPinTypeSSI(GPIO_PORTA_BASE, GPIO_PIN_3); GPIOPadConfigSet(GPIO_PORTA_BASE, GPIO_PIN_3, GPIO_STRENGTH_8MA, GPIO_PIN_TYPE_STD_WPU); // // Enable the SSI port. // SSIEnable(SSI0_BASE); // // Indicate that the RIT driver can use the SSI Port. // HWREGBITW(&g_ulSSIFlags, FLAG_SSI_ENABLED) = 1; }
int main() { SysCtlClockSet(SYSCTL_SYSDIV_2_5|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHZ|SYSCTL_OSC_MAIN); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB); SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI2); GPIOPinConfigure(GPIO_PB4_SSI2CLK); GPIOPinConfigure(GPIO_PB7_SSI2TX); GPIOPinTypeSSI(GPIO_PORTB_BASE,GPIO_PIN_4|GPIO_PIN_7); SSIConfigSetExpClk(SSI2_BASE,SysCtlClockGet(),SSI_FRF_MOTO_MODE_0,SSI_MODE_MASTER,2000000,8); SSIEnable(SSI2_BASE); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); GPIOPinTypeGPIOOutput(GPIO_PORTA_BASE, GPIO_PIN_2|GPIO_PIN_3); GPIOPinWrite(GPIO_PORTA_BASE,GPIO_PIN_2,0); GPIOPinWrite(GPIO_PORTA_BASE,GPIO_PIN_3,0); GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, GPIO_PIN_6); GPIOPinWrite(GPIO_PORTB_BASE,GPIO_PIN_6,0); while(1) { SSIDataPut(SSI2_BASE,0xAA); latch(); SysCtlDelay(SysCtlClockGet()/10); SSIDataPut(SSI2_BASE,0x55); latch(); SysCtlDelay(SysCtlClockGet()/10); } }
/* * ======== EK_TM4C123GXL_initWiFi ======== */ void EK_TM4C123GXL_initWiFi(void) { /* Configure SSI2 */ SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI2); GPIOPinConfigure(GPIO_PB4_SSI2CLK); GPIOPinConfigure(GPIO_PB6_SSI2RX); GPIOPinConfigure(GPIO_PB7_SSI2TX); GPIOPinTypeSSI(GPIO_PORTB_BASE, GPIO_PIN_4 | GPIO_PIN_6 | GPIO_PIN_7); /* Configure IRQ pin */ GPIOPinTypeGPIOInput(GPIO_PORTB_BASE, GPIO_PIN_2); GPIOIntTypeSet(GPIO_PORTB_BASE, GPIO_PIN_2, GPIO_FALLING_EDGE); /* Configure EN pin */ GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, GPIO_PIN_5); GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_5, 0); /* Configure CS pin */ GPIOPinTypeGPIOOutput(GPIO_PORTE_BASE, GPIO_PIN_0); GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_0, 0); /* Call necessary SPI init functions */ SPI_init(); EK_TM4C123GXL_initDMA(); /* Initialize WiFi driver */ WiFi_init(); }
void EEPROM_Init() { SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI1); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD); GPIOPinConfigure(GPIO_PD0_SSI1CLK); GPIOPinConfigure(GPIO_PD1_SSI1FSS); GPIOPinConfigure(GPIO_PD2_SSI1RX); GPIOPinConfigure(GPIO_PD3_SSI1TX); GPIOPinTypeGPIOOutput(GPIO_PORTD_BASE,GPIO_PIN_CS); GPIOPinTypeSSI(GPIO_PORTD_BASE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2|GPIO_PIN_3); SSIConfigSetExpClk(SSI1_BASE, SysCtlClockGet(), SSI_FRF_MOTO_MODE_0, SSI_MODE_MASTER, 1000, 8); SSIEnable(SSI1_BASE); memset(_eepromcachestr,0,EEPROMADDRSTRLEN+1); _iseepromenabled = EEPROM_Test(); }
/* * ======== EK_TM4C123GXL_initWiFi ======== */ void EK_TM4C123GXL_initWiFi(void) { /* Configure EN & CS pins to disable CC3100 */ GPIOPinTypeGPIOOutput(GPIO_PORTE_BASE, GPIO_PIN_0 | GPIO_PIN_4); GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_0, GPIO_PIN_0); GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_4, 0); /* Configure SSI2 for CC3100 */ SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI2); GPIOPinConfigure(GPIO_PB4_SSI2CLK); GPIOPinConfigure(GPIO_PB6_SSI2RX); GPIOPinConfigure(GPIO_PB7_SSI2TX); GPIOPinTypeSSI(GPIO_PORTB_BASE, GPIO_PIN_4 | GPIO_PIN_6 | GPIO_PIN_7); /* Configure IRQ pin */ GPIOPinTypeGPIOInput(GPIO_PORTB_BASE, GPIO_PIN_2); GPIOPadConfigSet(GPIO_PORTB_BASE, GPIO_PIN_2, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPD); GPIOIntTypeSet(GPIO_PORTB_BASE, GPIO_PIN_2, GPIO_RISING_EDGE); SPI_init(); EK_TM4C123GXL_initDMA(); WiFi_init(); }
/* ------------------------------------------------------------------------------------------------------ * ssi0_Init() * * Description : SPI sysctl init function. * * Argument(s) : none. * */ void BSP_SSI0_Init(void) { SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI0); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); SSIDisable(SSI0_BASE); /* Disable SSI0.*/ GPIOPinTypeSSI(GPIO_PORTA_BASE, /* Configure the SPI port*/ GPIO_PIN_2|GPIO_PIN_4|GPIO_PIN_5); GPIOPadConfigSet(GPIO_PORTA_BASE, GPIO_PIN_2|GPIO_PIN_4|GPIO_PIN_5, GPIO_STRENGTH_4MA, GPIO_PIN_TYPE_STD_WPU); GPIOPinTypeGPIOOutput(GPIO_PORTA_BASE, GPIO_PIN_6); /* Configure the CS port*/ GPIOPadConfigSet(GPIO_PORTA_BASE, GPIO_PIN_6, GPIO_STRENGTH_4MA, GPIO_PIN_TYPE_STD_WPU); SELECT(); DESELECT(); /* Deassert the SSI0 chip select */ SSIConfigSetExpClk(SSI0_BASE, /* Configure the SSI0 port */ SysCtlClockGet(), SSI_FRF_MOTO_MODE_0, SSI_MODE_MASTER, 400000, 8); SSIEnable(SSI0_BASE); /* Enable SSI0.*/ }
int main(void) { uint32_t ui32Index; uint32_t ui32Data; SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ); SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI0); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); GPIOPinConfigure(GPIO_PA2_SSI0CLK); GPIOPinConfigure(GPIO_PA3_SSI0FSS); GPIOPinConfigure(GPIO_PA5_SSI0TX); GPIOPinTypeSSI(GPIO_PORTA_BASE,GPIO_PIN_5|GPIO_PIN_3|GPIO_PIN_2); SSIConfigSetExpClk(SSI0_BASE, SysCtlClockGet(), SSI_FRF_MOTO_MODE_0, SSI_MODE_MASTER, 10000, 16); SSIEnable(SSI0_BASE); while(1) { for(ui32Index = 0; ui32Index < NUM_SSI_DATA; ui32Index++) { ui32Data = (Reverse(pui8DataTx[ui32Index]) << 8) + (1 << ui32Index); SSIDataPut(SSI0_BASE, ui32Data); while(SSIBusy(SSI0_BASE)) { } } } }
void init_pins() { //PORT A - SDHC Card SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); //set output: SD_SCK, SD_CS, SD_MOSI GPIOSetOutput(GPIO_PORTA_BASE, GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_5); //Set Input: SD_MISO GPIOSetInput(GPIO_PORTA_BASE, GPIO_PIN_4); //Initialize pins: SD_SCK <- LOW, SD_CS <- HIGH, SD_MOSI <- LOW GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_5, GPIO_PIN_3); //Set SD_CLK, SD_MISO, SD_MOSI as SSI pins GPIOPinTypeSSI(GPIO_PORTA_BASE, GPIO_PIN_2 | GPIO_PIN_4 | GPIO_PIN_5); //Port B - RTC //Enable Port B SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB); //Set pin type as I2C GPIOPinTypeI2C(GPIO_PORTB_BASE, GPIO_PIN_2 | GPIO_PIN_3); //Port D - LCD //TODO: Initialize LCD pins //Port E - SSI1 , VS0_BSYNC, VS0_RESET, VS0_DREQ, VS0_CS SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE); //Set Output: VS_CLK, VS0_CS, VS_MOSI, VS0_BSYNC, VS0_RESET GPIOSetOutput(GPIO_PORTE_BASE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_6); //Set Input: VS_MISO, VS0_DREQ GPIOSetInput(GPIO_PORTE_BASE, GPIO_PIN_2 | GPIO_PIN_5); //Initialize Pins: VS_CLK <- LOW, VS0_CS <- HIGH, VS_MOSI <- LOW, VS0_BSYNC <- HIGH, VS0_RESET <- LOW, GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_6, GPIO_PIN_1 | GPIO_PIN_4); //Set VS_CLK, VS_MOSI, VS_MISO as SSI pins GPIOPinTypeSSI(GPIO_PORTE_BASE, GPIO_PIN_0 | GPIO_PIN_2 | GPIO_PIN_3); //Port F -VS1_BSYNC, VS1_RESET, VS1_DREQ, VS1_CS SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF); //Set Output: VS1_RESET, VS1_BSYNC, VS1_CS GPIOSetOutput(GPIO_PORTF_BASE, GPIO_PIN_0 | GPIO_PIN_2 | GPIO_PIN_3); //Set Input: VS1_DREQ GPIOSetInput(GPIO_PORTF_BASE, GPIO_PIN_1); //Initialize Pins: VS0_RESET <- LOW, VS0_BSYNC <- HIGH, VS1_CS <- HIGH GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_0 | GPIO_PIN_2 | GPIO_PIN_3, GPIO_PIN_2 | GPIO_PIN_3); return; }
//***************************************************************************** // //! Initialize the OLED display. //! //! \param ulFrequency specifies the SSI Clock Frequency to be used. //! //! This function initializes the SSI interface to the OLED display and //! configures the SSD1329 controller on the panel. //! //! \return None. // //***************************************************************************** void RIT128x96x4Init(unsigned long ulFrequency) { unsigned long ulIdx; // Initialize the semaphore OS_InitSemaphore(&oLEDFree, 1); // // Enable the SSI0 and GPIO port blocks as they are needed by this driver. // SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI0); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIO_OLEDDC); // // Configure the SSI0CLK and SSIOTX pins for SSI operation. // GPIOPinTypeSSI(GPIO_PORTA_BASE, GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_5); GPIOPadConfigSet(GPIO_PORTA_BASE, GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_5, GPIO_STRENGTH_8MA, GPIO_PIN_TYPE_STD_WPU); // // Configure the GPIO port pin used as a D/Cn signal for OLED device, // and the port pin used to enable power to the OLED panel. // GPIOPinTypeGPIOOutput(GPIO_OLEDDC_BASE, GPIO_OLEDDC_PIN | GPIO_OLEDEN_PIN); GPIOPadConfigSet(GPIO_OLEDDC_BASE, GPIO_OLEDDC_PIN | GPIO_OLEDEN_PIN, GPIO_STRENGTH_8MA, GPIO_PIN_TYPE_STD); GPIOPinWrite(GPIO_OLEDDC_BASE, GPIO_OLEDDC_PIN | GPIO_OLEDEN_PIN, GPIO_OLEDDC_PIN | GPIO_OLEDEN_PIN); HWREGBITW(&g_ulSSIFlags, FLAG_DC_HIGH) = 1; // // Configure and enable the SSI0 port for master mode. // RIT128x96x4Enable(ulFrequency); // // Clear the frame buffer. // RIT128x96x4Clear(); // // Initialize the SSD1329 controller. Loop through the initialization // sequence array, sending each command "string" to the controller. // for(ulIdx = 0; ulIdx < sizeof(g_pucRIT128x96x4Init); ulIdx += g_pucRIT128x96x4Init[ulIdx] + 1) { // // Send this command. // RITWriteCommand(g_pucRIT128x96x4Init + ulIdx + 1, g_pucRIT128x96x4Init[ulIdx] - 1); } }
//*************************************************// //initSSI //Prototype: void initSSI(void) //Description: init SPI module for communicate with vs1011e. //Returns: None. //*************************************************// void initSSI(void) { SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI0); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); GPIOPinTypeSSI(GPIO_PORTA_BASE, GPIO_PIN_2 | GPIO_PIN_4 | GPIO_PIN_5); GPIOPadConfigSet(GPIO_PORTA_BASE, GPIO_PIN_2 | GPIO_PIN_4| GPIO_PIN_5, GPIO_STRENGTH_8MA, GPIO_PIN_TYPE_STD_WPU); SSIConfigSetExpClk(SSI0_BASE, SysCtlClockGet(), SSI_FRF_MOTO_MODE_0, SSI_MODE_MASTER, 2000000, 8); SSIEnable(SSI0_BASE); }
void OrbitOledHostInit() { DelayInit(); /* Initialize SSI port 3. */ SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI3); GPIOPinTypeSSI(SCK_OLEDPort, SCK_OLED_PIN); GPIOPinTypeSSI(SDI_OLEDPort, SDI_OLED_PIN); GPIOPinConfigure(SDI_OLED); GPIOPinConfigure(SCK_OLED); SSIClockSourceSet(SSI3_BASE, SSI_CLOCK_SYSTEM); SSIConfigSetExpClk(SSI3_BASE, SysCtlClockGet(), SSI_FRF_MOTO_MODE_0, SSI_MODE_MASTER, 8000000, 8); SSIEnable(SSI3_BASE); /* Make power control pins be outputs with the supplies off */ GPIOPinWrite(VBAT_OLEDPort, VBAT_OLED, VBAT_OLED); GPIOPinWrite(VDD_OLEDPort, VDD_OLED, VDD_OLED); GPIOPinTypeGPIOOutput(VBAT_OLEDPort, VBAT_OLED); //VDD power control (1=off) GPIOPinTypeGPIOOutput(VDD_OLEDPort, VDD_OLED); //VBAT power control (1=off) /* Make the Data/Command select, Reset, and SSI CS pins be outputs. * The nDC_OLED pin is PD7 an is a special GPIO (it is an NMI pin) * Therefore, we must unlock it first: * 1. Write 0x4C4F434B to GPIOLOCK register to unlock the GPIO Commit register * 2. Write to appropriate bit in the Commit Register (bit 7) * 3. Re-lock the GPIOLOCK register */ HWREG(GPIO_PORTD_BASE + GPIO_O_LOCK) = 0x4C4F434B; // unlock HWREG(GPIO_PORTD_BASE + GPIO_O_CR) |= 1 << 7; // allow writes HWREG(GPIO_PORTD_BASE + GPIO_O_LOCK) = 0x0; // re-lock GPIOPinWrite(nDC_OLEDPort, nDC_OLED, nDC_OLED); GPIOPinTypeGPIOOutput(nDC_OLEDPort, nDC_OLED); GPIOPinWrite(nDC_OLEDPort, nDC_OLED, nDC_OLED); GPIOPinWrite(nRES_OLEDPort, nRES_OLED, nRES_OLED); GPIOPinTypeGPIOOutput(nRES_OLEDPort, nRES_OLED); GPIOPinWrite(nCS_OLEDPort, nCS_OLED, nCS_OLED); GPIOPinTypeGPIOOutput(nCS_OLEDPort, nCS_OLED); }
/* * ======== EKS_LM4F232_initSPI ======== */ Void EKS_LM4F232_initSPI(Void) { /* SPI1 SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI1); Need to unlock PF0 HWREG(GPIO_PORTF_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY; HWREG(GPIO_PORTF_BASE + GPIO_O_CR) |= GPIO_PIN_0; GPIOPinConfigure(GPIO_PF0_SSI1RX); GPIOPinConfigure(GPIO_PF1_SSI1TX); GPIOPinConfigure(GPIO_PF2_SSI1CLK); GPIOPinConfigure(GPIO_PF3_SSI1FSS); GPIOPinTypeSSI(GPIO_PORTF_BASE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3); HWREG(GPIO_PORTF_BASE + GPIO_O_LOCK) = GPIO_LOCK_M;*/ /* SSI0 */ SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI0); GPIOPinConfigure(GPIO_PA2_SSI0CLK); GPIOPinConfigure(GPIO_PA3_SSI0FSS); GPIOPinConfigure(GPIO_PA4_SSI0RX); GPIOPinConfigure(GPIO_PA5_SSI0TX); GPIOPinTypeSSI(GPIO_PORTA_BASE, GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5); /* SSI3 */ SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI3); GPIOPinConfigure(GPIO_PK0_SSI3CLK); GPIOPinConfigure(GPIO_PK1_SSI3FSS); GPIOPinConfigure(GPIO_PK2_SSI3RX); GPIOPinConfigure(GPIO_PK3_SSI3TX); GPIOPinTypeSSI(GPIO_PORTK_BASE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3); EKS_LM4F232_initDMA(); SPI_init(); }
//***************************************************************************** // //! Initialize the OLED display. //! //! \param ulFrequency specifies the SSI Clock Frequency to be used. //! //! This function initializes the SSI interface to the OLED display and //! configures the SSD0323 controller on the panel. //! //! This function is contained in <tt>osram128x64x4.c</tt>, with //! <tt>osram128x64x4.h</tt> containing the API definition for use by //! applications. //! //! \return None. // //***************************************************************************** void OSRAM128x64x4Init(unsigned long ulFrequency) { unsigned long ulIdx; // // Enable the SSI0 and GPIO port blocks as they are needed by this driver. // SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI0); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC); // // Configure the SSI0CLK and SSIOTX pins for SSI operation. // GPIOPinTypeSSI(GPIO_PORTA_BASE, GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_5); GPIOPadConfigSet(GPIO_PORTA_BASE, GPIO_PIN_2, GPIO_STRENGTH_8MA, GPIO_PIN_TYPE_STD_WPU); GPIOPadConfigSet(GPIO_PORTA_BASE, GPIO_PIN_3, GPIO_STRENGTH_8MA, GPIO_PIN_TYPE_STD_WPU); GPIOPadConfigSet(GPIO_PORTA_BASE, GPIO_PIN_5, GPIO_STRENGTH_8MA, GPIO_PIN_TYPE_STD_WPU); // // Configure the PC7 pin as a D/Cn signal for OLED device. // GPIODirModeSet(GPIO_PORTC_BASE, GPIO_PIN_7, GPIO_DIR_MODE_OUT); GPIOPadConfigSet(GPIO_PORTC_BASE, GPIO_PIN_7, GPIO_STRENGTH_8MA, GPIO_PIN_TYPE_STD); GPIOPinWrite(GPIO_PORTC_BASE, GPIO_PIN_7, GPIO_PIN_7); // // Configure and enable the SSI0 port for master mode. // OSRAM128x64x4Enable(ulFrequency); // // Clear the frame buffer. // OSRAM128x64x4Clear(); // // Initialize the SSD0323 controller. Loop through the initialization // sequence array, sending each command "string" to the controller. // for(ulIdx = 0; ulIdx < sizeof(g_pucOSRAM128x64x4Init); ulIdx += g_pucOSRAM128x64x4Init[ulIdx] + 1) { // // Send this command. // OSRAMWriteCommand(g_pucOSRAM128x64x4Init + ulIdx + 1, g_pucOSRAM128x64x4Init[ulIdx] - 1); } }
void Spi::enable(uint32_t baudrate) { GpioConfig& miso = miso_.getGpioConfig(); GpioConfig& mosi = mosi_.getGpioConfig(); GpioConfig& clk = clk_.getGpioConfig(); // GpioConfig& ncs = ncs_.getGpioConfig(); // Store baudrate in configuration if (baudrate != 0) { config_.baudrate = baudrate; } // Enable peripheral except in deep sleep modes (e.g. LPM1, LPM2, LPM3) SysCtrlPeripheralEnable(config_.peripheral); SysCtrlPeripheralSleepEnable(config_.peripheral); SysCtrlPeripheralDeepSleepDisable(config_.peripheral); // Reset peripheral previous to configuring it SSIDisable(config_.base); // Set IO clock as SPI0 clock source SSIClockSourceSet(config_.base, config_.clock); // Configure the MISO, MOSI, CLK and nCS pins as peripheral IOCPinConfigPeriphInput(miso.port, miso.pin, miso.ioc); IOCPinConfigPeriphOutput(mosi.port, mosi.pin, mosi.ioc); IOCPinConfigPeriphOutput(clk.port, clk.pin, clk.ioc); // IOCPinConfigPeriphOutput(ncs.port, ncs.pin, ncs.ioc); // Configure MISO, MOSI, CLK and nCS GPIOs GPIOPinTypeSSI(miso.port, miso.pin); GPIOPinTypeSSI(mosi.port, mosi.pin); GPIOPinTypeSSI(clk.port, clk.pin); // GPIOPinTypeSSI(ncs.port, ncs.pin); // Configure the SPI0 clock SSIConfigSetExpClk(config_.base, SysCtrlIOClockGet(), config_.protocol, \ config_.mode, config_.baudrate, config_.datawidth); // Enable the SPI0 module SSIEnable(config_.base); }
void setup() { //--------------------- GENERAL --------------------- // Enable lazy stacking for interrupt handlers. This allows floating-point // instructions to be used within interrupt handlers, but at the expense of // extra stack usage. ROM_FPUEnable(); ROM_FPULazyStackingEnable(); // Set the clocking to run directly from the crystal. ROM_SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ); ROM_IntMasterEnable(); ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); ROM_GPIOPinTypeGPIOOutput(GPIO_PORTA_BASE, GPIO_PIN_6); //--------------------- UART --------------------- ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0); GPIOPinConfigure(GPIO_PA0_U0RX); GPIOPinConfigure(GPIO_PA1_U0TX); ROM_GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1); // Configure the UART for 115,200, 8-N-1 operation. ROM_UARTConfigSetExpClk(UART0_BASE, ROM_SysCtlClockGet(), 115200, (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE)); // Enable the UART interrupt. ROM_IntEnable(INT_UART0); ROM_UARTIntEnable(UART0_BASE, UART_INT_RX | UART_INT_RT); //--------------------- SSI --------------------- SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI0); GPIOPinConfigure(GPIO_PA2_SSI0CLK); GPIOPinConfigure(GPIO_PA3_SSI0FSS); GPIOPinConfigure(GPIO_PA4_SSI0RX); GPIOPinConfigure(GPIO_PA5_SSI0TX); GPIOPinTypeSSI(GPIO_PORTA_BASE, GPIO_PIN_5 | GPIO_PIN_4 | GPIO_PIN_3 | GPIO_PIN_2); SSIConfigSetExpClk(SSI0_BASE, SysCtlClockGet(), SSI_FRF_MOTO_MODE_0, SSI_MODE_MASTER, 10000, 8); SSIEnable(SSI0_BASE); }
void SPI_init(){ SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); GPIOPinTypeSSI(GPIO_PORTA_BASE,GPIO_PIN_2|GPIO_PIN_4|GPIO_PIN_5); GPIOPinConfigure(GPIO_PA2_SSI0CLK); GPIOPinConfigure(GPIO_PA4_SSI0RX); GPIOPinConfigure(GPIO_PA5_SSI0TX); SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI0); SSIClockSourceSet(SSI0_BASE,SSI_CLOCK_PIOSC); SSIConfigSetExpClk(SSI0_BASE,SysCtlClockGet(),SSI_FRF_MOTO_MODE_0,SSI_MODE_MASTER,6000000,8); SSIEnable(SSI0_BASE); }
/* * ======== EK_TM4C123GXL_initSPI ======== */ void EK_TM4C123GXL_initSPI(void) { /* SPI0 */ SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI0); /* Need to unlock PF0 */ GPIOPinConfigure(GPIO_PA2_SSI0CLK); GPIOPinConfigure(GPIO_PA3_SSI0FSS); GPIOPinConfigure(GPIO_PA4_SSI0RX); GPIOPinConfigure(GPIO_PA5_SSI0TX); GPIOPinTypeSSI(GPIO_PORTA_BASE, GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5); /* SSI2 */ SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI2); GPIOPinConfigure(GPIO_PB4_SSI2CLK); GPIOPinConfigure(GPIO_PB5_SSI2FSS); GPIOPinConfigure(GPIO_PB6_SSI2RX); GPIOPinConfigure(GPIO_PB7_SSI2TX); GPIOPinTypeSSI(GPIO_PORTB_BASE, GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7); /* SSI3 */ SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI3); GPIOPinConfigure(GPIO_PD0_SSI3CLK); GPIOPinConfigure(GPIO_PD1_SSI3FSS); GPIOPinConfigure(GPIO_PD2_SSI3RX); GPIOPinConfigure(GPIO_PD3_SSI3TX); GPIOPinTypeSSI(GPIO_PORTD_BASE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3); EK_TM4C123GXL_initDMA(); SPI_init(); }
void Spi::enable(uint32_t mode, uint32_t protocol, uint32_t datawidth, uint32_t baudrate) { // Store SPI mode, protoco, baudrate and datawidth mode_ = mode; protocol_ = protocol; baudrate_ = baudrate; datawidth_ = datawidth; // Enable peripheral except in deep sleep modes (e.g. LPM1, LPM2, LPM3) SysCtrlPeripheralEnable(peripheral_); SysCtrlPeripheralSleepEnable(peripheral_); SysCtrlPeripheralDeepSleepDisable(peripheral_); // Reset peripheral previous to configuring it SSIDisable(base_); // Set IO clock as SPI0 clock source SSIClockSourceSet(base_, clock_); // Configure the MISO, MOSI, CLK and nCS pins as peripheral IOCPinConfigPeriphInput(miso_.getPort(), miso_.getPin(), miso_.getIoc()); IOCPinConfigPeriphOutput(mosi_.getPort(), mosi_.getPin(), mosi_.getIoc()); IOCPinConfigPeriphOutput(clk_.getPort(), clk_.getPin(), clk_.getIoc()); // IOCPinConfigPeriphOutput(ncs_.getPort(), ncs_.getPin(), ncs_.getIoc()); // Configure MISO, MOSI, CLK and nCS GPIOs GPIOPinTypeSSI(miso_.getPort(), miso_.getPin()); GPIOPinTypeSSI(mosi_.getPort(), mosi_.getPin()); GPIOPinTypeSSI(clk_.getPort(), clk_.getPin()); // GPIOPinTypeSSI(ncs_.getPort(), ncs_.getPin()); // Configure the SPI0 clock SSIConfigSetExpClk(base_, SysCtrlIOClockGet(), protocol_, \ mode_, baudrate_, datawidth_); // Enable the SPI0 module SSIEnable(base_); }
/* * Configura la interfaz SSI0 * * Notas: El formato Freescale SPI con SPO=1 y SPH=1 funciona bien con el TLV5616, * pero en cambio se configura con el formato TI, que es especifico para este integrado * */ void SSI0_Init(void) { #ifdef __CONFIGURACION_CON_REGISTROS__ volatile unsigned long delay; // Habilitar el modulo SSI y el puerto A SYSCTL_RCGCSSI_R |= SYSCTL_RCGCSSI_R0; SYSCTL_RCGCGPIO_R |= SYSCTL_RCGCGPIO_R0; delay = SYSCTL_RCGCGPIO_R; // Esperar a que se activen los modulos // Configurar funciones alternativas en los pines PA2, 3, 5 GPIO_PORTA_AFSEL_R |= 0x2c; // Configurar la funcion de SSI en los pines GPIO_PORTA_PCTL_R = (GPIO_PORTA_PCTL_R & 0xff0f00ff) + GPIO_PCTL_PA2_SSI0CLK + GPIO_PCTL_PA3_SSI0FSS + GPIO_PCTL_PA5_SSI0TX; // Configurar los registros de funciones digitales, configurar pull-up o pull-down alternativamente GPIO_PORTA_AMSEL_R = 0; GPIO_PORTA_DEN_R |= 0x2c; // Configurar los formatos de trama // Deshabilitar el modulo SSI antes de hacer cambios SSI0_CR1_R &= ~SSI_CR1_SSE; // Connfigurar la operacion como maestro SSI0_CR1_R &= ~SSI_CR1_MS; // Configurar la fuente de reloj como reloj del sistema basado en un factor de division SSI0_CC_R &= ~SSI_CC_CS_M; // Configurar el prescaler para una frecuencia del modulo SSI de 1Mhz = 40MHz/40 SSI0_CPSR_R = (SSI0_CPSR_R & ~SSI_CPSR_CPSDVSR_M) + 20; // Configurar el serial clock rate, polaridad del reloj y fase, protocolo y tamaño de los datos SSI0_CR0_R &= ~(SSI_CR0_SCR_M); // SCR = 0 // SSI0_CR0_R |= SSI_CR0_SPO; // SPO = 1 // SSI0_CR0_R |= SSI_CR0_SPH; // SPH = 1 // SSI0_CR0_R = (SSI0_CR0_R & ~SSI_CR0_FRF_M) + SSI_CR0_FRF_MOTO; // Freescale SPI SSI0_CR0_R = (SSI0_CR0_R & ~SSI_CR0_FRF_M) + SSI_CR0_FRF_TI; // Texas Instruments Synchronous Serial Frame Format SSI0_CR0_R = (SSI0_CR0_R & ~SSI_CR0_DSS_M) + SSI_CR0_DSS_16; // 16 bits de datos // Finalmente, habilitar el modulo SPI SSI0_CR1_R |= SSI_CR1_SSE; #else // Habilitar el reloj SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI0); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); // Configurar los pines GPIOPinConfigure(GPIO_PA2_SSI0CLK); GPIOPinConfigure(GPIO_PA3_SSI0FSS); GPIOPinConfigure(GPIO_PA5_SSI0TX); GPIOPinTypeSSI(GPIO_PORTA_BASE, GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_5); // Configurar el modulo SSI y habilitarlo SSIConfigSetExpClk(SSI0_BASE, SysCtlClockGet(), SSI_FRF_TI, SSI_MODE_MASTER, 2000000, 16); SSIEnable(SSI0_BASE); #endif }
void Ssi1_ad7567Init(void) /*Act as Master*/ { SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI1); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE); GPIOPinConfigure(GPIO_PE0_SSI1CLK); GPIOPinConfigure(GPIO_PE1_SSI1FSS); GPIOPinConfigure(GPIO_PE2_SSI1RX); GPIOPinConfigure(GPIO_PE3_SSI1TX); GPIOPinTypeSSI(GPIO_PORTE_BASE, GPIO_PIN_0 | GPIO_PIN_1|GPIO_PIN_2 | GPIO_PIN_3 ); SSIConfigSetExpClk(SSI1_BASE,SysCtlClockGet(),SSI_FRF_MOTO_MODE_2,SSI_MODE_MASTER,20000000,14); SSIEnable(SSI1_BASE); }
//------------------------------------LCD------------------------------------------- //初始化SPI端口 void SSI0_InitialSPI(void) { SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI0); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); GPIOPinConfigure(GPIO_PA2_SSI0CLK); GPIOPinConfigure(GPIO_PA3_SSI0FSS); GPIOPinConfigure(GPIO_PA5_SSI0TX); GPIOPinConfigure(GPIO_PA4_SSI0RX); GPIOPinTypeSSI(GPIO_PORTA_BASE,GPIO_PIN_5|GPIO_PIN_4|GPIO_PIN_3|GPIO_PIN_2); SSIConfigSetExpClk(SSI0_BASE, SysCtlClockGet(), SSI_FRF_MOTO_MODE_0, SSI_MODE_MASTER,50000, 16); SSIEnable(SSI0_BASE); SSI0_FlushFIFO(); }
void Ssi0Init(void) /*Act as Master*/ { SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI0); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); GPIOPinConfigure(GPIO_PA2_SSI0CLK); GPIOPinConfigure(GPIO_PA3_SSI0FSS); GPIOPinConfigure(GPIO_PA4_SSI0RX); // GPIOPinConfigure(GPIO_PA5_SSI0TX); GPIOPinTypeSSI(GPIO_PORTA_BASE, GPIO_PIN_2 | GPIO_PIN_4); SSIConfigSetExpClk(SSI0_BASE,SysCtlClockGet(),SSI_FRF_MOTO_MODE_2,SSI_MODE_MASTER,20000000,14); SSIEnable(SSI0_BASE); }
/* * This configures the SSI. * Setups only the TX and configures the SSI to work at 6.4Mhz and 8bit packets. * It's 6.4Mhz because 6.4Mhz/8 is about 800Khz, the frequency needed for the WS2812B * */ void SPIInit() { // put your setup code here, to run once: SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI0); SysCtlDelay(3); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); SysCtlDelay(3); GPIOPinConfigure(GPIO_PA5_SSI0TX); GPIOPinTypeSSI(GPIO_PORTA_BASE, GPIO_PIN_5); SSIIntClear(SSI0_BASE,SSI_TXEOT); SSIConfigSetExpClk(SSI0_BASE, 80000000, SSI_FRF_MOTO_MODE_0,SSI_MODE_MASTER, 6400000, 8); SSIEnable(SSI0_BASE); }
int main(void) { //Clock del sistema SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ); //Configuro la UART1 para el GPS SysCtlPeripheralEnable(SYSCTL_PERIPH_UART1); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB); GPIOPinConfigure(GPIO_PB0_U1RX); GPIOPinConfigure(GPIO_PB1_U1TX); GPIOPinTypeUART(GPIO_PORTB_BASE, GPIO_PIN_0 | GPIO_PIN_1); UARTConfigSetExpClk(UART1_BASE, SysCtlClockGet(), 9600, (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE)); //Uso el modulo SPI3 para el YEI3 SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI3); //Habilito el puerto correspondiente D SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD); //Configuro c/u de los pines para la funcion especificada GPIOPinConfigure(GPIO_PD0_SSI3CLK); GPIOPinConfigure(GPIO_PD1_SSI3FSS); GPIOPinConfigure(GPIO_PD2_SSI3RX); GPIOPinConfigure(GPIO_PD3_SSI3TX); GPIOPinTypeSSI(GPIO_PORTD_BASE, GPIO_PIN_3 | GPIO_PIN_2 | GPIO_PIN_1 | GPIO_PIN_0); //Configuro el SPI para trabajar a 115200bps SSIConfigSetExpClk(SSI3_BASE, SysCtlClockGet(), SSI_FRF_MOTO_MODE_0, SSI_MODE_MASTER, 115200, 8); SSIEnable(SSI3_BASE); //Orden enviada al Yei return(0); }
/* * ======== EK_LM4F120XL_initWiFi ======== */ Void EK_LM4F120XL_initWiFi(Void) { /* Configure SSI2 */ SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI2); GPIOPinConfigure(GPIO_PB4_SSI2CLK); GPIOPinConfigure(GPIO_PB6_SSI2RX); GPIOPinConfigure(GPIO_PB7_SSI2TX); GPIOPinTypeSSI(GPIO_PORTB_BASE, GPIO_PIN_4 | GPIO_PIN_6 | GPIO_PIN_7); /* Call necessary SPI init functions */ SPI_init(); EK_LM4F120XL_initDMA(); /* Initialize WiFi driver */ WiFi_init(); }
u32 platform_spi_setup( unsigned id, int mode, u32 clock, unsigned cpol, unsigned cpha, unsigned databits ) { unsigned protocol; if( cpol == 0 ) protocol = cpha ? SSI_FRF_MOTO_MODE_1 : SSI_FRF_MOTO_MODE_0; else protocol = cpha ? SSI_FRF_MOTO_MODE_3 : SSI_FRF_MOTO_MODE_2; mode = mode == PLATFORM_SPI_MASTER ? SSI_MODE_MASTER : SSI_MODE_SLAVE; SSIDisable( spi_base[ id ] ); GPIOPinTypeSSI( spi_gpio_base[ id ], spi_gpio_pins[ id ] ); // FIXME: not sure this is always "right" // GPIOPadConfigSet(spi_gpio_base[ id ], spi_gpio_clk_pin[ id ], GPIO_STRENGTH_8MA, GPIO_PIN_TYPE_STD_WPU); SSIConfigSetExpClk( spi_base[ id ], SysCtlClockGet(), protocol, mode, clock, databits ); SSIEnable( spi_base[ id ] ); return clock; }
/* * spi_config_SSI0 (); * Enable SPI on * SSIOClk PA2 * SSIOFss PA3 * SSIOR PA4 * SSIT PA5 */ void spi_config_SSI0(void) { volatile uint32_t clk_freq = 0; SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI0); // enable SSI0 GPIOPinConfigure(GPIO_PA2_SSI0CLK); GPIOPinConfigure(GPIO_PA3_SSI0FSS); GPIOPinConfigure(GPIO_PA5_SSI0TX); GPIOPinConfigure(GPIO_PA4_SSI0RX); GPIOPinTypeSSI(GPIO_PORTA_BASE, GPIO_PIN_5 | GPIO_PIN_4 | GPIO_PIN_2); clk_freq = SysCtlClockGet()/20; SSIConfigSetExpClk(SSI0_BASE, clk_freq, SSI_FRF_MOTO_MODE_0, SSI_MODE_MASTER, 10000, 16); SSIEnable(SSI0_BASE); clk_freq = SSIClockSourceGet(SSI0_BASE); }
void spi_uart_init(unsigned short uart_idx, unsigned long baud, unsigned short config) { unsigned long divisor; /* Enable the peripherals used to drive the UART on SSI, and the CS */ SysCtlPeripheralEnable(UART4_SSI_SYSCTL_PERIPH); SysCtlPeripheralEnable(UART4_GPIO_SYSCTL_PERIPH); SysCtlPeripheralEnable(UART4_CS_GPIO_SYSCTL_PERIPH); // set MOD_RES == Low SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE); GPIOPinTypeGPIOOutput(GPIO_PORTE_BASE, GPIO_PIN_5); GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_5 , 1); /* Configure the appropriate pins to be SSI instead of GPIO */ GPIOPinTypeSSI(UART4_GPIO_PORT_BASE, UART4_SSI_PINS); GPIOPinTypeGPIOOutput(UART4_CS_GPIO_PORT_BASE, UART4_CS); GPIOPadConfigSet(UART4_GPIO_PORT_BASE, UART4_SSI_PINS, GPIO_STRENGTH_4MA, GPIO_PIN_TYPE_STD_WPU); GPIOPadConfigSet(UART4_CS_GPIO_PORT_BASE, UART4_CS, GPIO_STRENGTH_4MA, GPIO_PIN_TYPE_STD_WPU); DESELECT(); /* Configure the SSI1 port */ SSIConfigSetExpClk(UART4_SSI_BASE, SysCtlClockGet()/16, SSI_FRF_MOTO_MODE_0, SSI_MODE_MASTER, 400000, 8); SSIEnable(UART4_SSI_BASE); /* SELECT(); xmit_spi( LCR); // write to LCR xmit_spi( 0x83 ); // write 8N1 divisor = 7372800 / baud / 16; INFO("divisor %X",divisor); xmit_spi(DLL); // write to DLL register xmit_spi((unsigned short)divisor ); // low xmit_spi(DLH); // write to DLH register xmit_spi( (unsigned short)(divisor >> 8) ); // low DESELECT(); */ }
//***************************************************************************** // //! Enable the SSI component of the OLED display driver. //! //! \param ulFrequency specifies the SSI Clock Frequency to be used. //! //! This function initializes the SSI interface to the OLED display. //! //! \return None. // //***************************************************************************** void RIT128x96x4Enable(unsigned long ulFrequency) { unsigned long ulTemp; // // Disable the SSI port. // SSIDisable(SSI0_BASE); // // Configure the SSI0 port for master mode. // SSIConfigSetExpClk(SSI0_BASE, SysCtlClockGet(), SSI_FRF_MOTO_MODE_2, SSI_MODE_MASTER, ulFrequency, 8); // // (Re)Enable SSI control of the FSS pin. // GPIOPinTypeSSI(GPIO_PORTA_BASE, GPIO_PIN_3); GPIOPadConfigSet(GPIO_PORTA_BASE, GPIO_PIN_3, GPIO_STRENGTH_8MA, GPIO_PIN_TYPE_STD_WPU); // // Enable the SSI port. // SSIEnable(SSI0_BASE); // // Drain the receive fifo. // while(SSIDataGetNonBlocking(SSI0_BASE, &ulTemp) != 0) { } // // Indicate that the RIT driver can use the SSI Port. // g_bSSIEnabled = true; }