/*---------------------------------------------------------------------------* * Routine: LCD_RH320240T_Configure *---------------------------------------------------------------------------* * Description: * Setup the LCD to use a particular LCD controller. * Inputs: * void *aW -- Workspace * Outputs: * T_uezError -- If the device is successfully configured, * returns UEZ_ERROR_NONE. *---------------------------------------------------------------------------*/ T_uezError LCD_RH320240T_Configure( void *aW, HAL_LCDController **aLCDController, TUInt32 aBaseAddress, DEVICE_Backlight **aBacklight) { T_uezDevice spi; T_uezDeviceWorkspace *p_spi; // T_uezDeviceWorkspace *p_gpio2; T_RH320240TWorkspace *p = (T_RH320240TWorkspace *)aW; p->iLCDController = aLCDController; p->iBaseAddress = aBaseAddress; p->iBacklight = aBacklight; UEZDeviceTableFind(p->iSPIBus, &spi); UEZDeviceTableGetWorkspace(spi, (T_uezDeviceWorkspace **)&p_spi); p->iSPI = (DEVICE_SPI_BUS **)p_spi; p->r.iDataMOSI = p->iCmd; p->r.iDataMISO = p->iCmd; p->r.iNumTransfers = 0; p->r.iBitsPerTransfer = 8; p->r.iRate = 9000; p->r.iClockOutPolarity = ETrue;//EFalse; p->r.iClockOutPhase = ETrue; p->r.iCSGPIOPort = GPIO_TO_HAL_PORT(p->iCSGPIOPin); p->r.iCSGPIOBit = GPIO_TO_PIN_BIT(p->iCSGPIOPin); p->r.iCSPolarity = EFalse; // LOW true return UEZ_ERROR_NONE; }
T_uezError RS485_Generic_Timer_Create( const char *aName, const T_RS485_Generic_Timer_Settings *aSettings) { T_uezDeviceWorkspace *p; HAL_Serial **p_serial; HAL_Timer **p_timer; UEZDeviceTableRegister(aName, (T_uezDeviceInterface *)&RS485_Generic_Timer_Stream_Interface, 0, &p); HALInterfaceFind(aSettings->iSerialName, (T_halWorkspace **)&p_serial); HALInterfaceFind(aSettings->iTimerName, (T_halWorkspace **)&p_timer); return RS485_Generic_Timer_Configure(p, p_serial, aSettings->iQueueSendSize, aSettings->iQueueReceiveSize, GPIO_TO_HAL_PORT(aSettings->iDriveEnable), GPIO_TO_PIN_BIT(aSettings->iDriveEnable), aSettings->iDriveEnablePolarity, GPIO_TO_HAL_PORT(aSettings->iReceiveEnable), GPIO_TO_PIN_BIT(aSettings->iReceiveEnable), aSettings->iReceiveEnablePolarity, p_timer, aSettings->iReleaseTime, aSettings->iDriveTime); }
static T_uezError SPIWriteCmd( T_LQ043T1DG28Workspace *p, const T_lcdSPICmd *aCmd) { SPI_Request r; TUInt8 cmd[3]; TUInt8 data[3]; T_uezError error = UEZ_ERROR_NONE; #define LCD_SPI_WRITE (0<<0) #define LCD_SPI_READ (1<<0) #define LCD_SPI_CMD (0<<1) #define LCD_SPI_DATA (1<<1) #define LCD_SPI_ID0 (0<<2) #define LCD_SPI_ID1 (1<<2) cmd[0] = 0x74|LCD_SPI_ID0|LCD_SPI_WRITE|LCD_SPI_CMD; cmd[1] = 0x00; cmd[2] = aCmd->iReg; r.iNumTransfers = 3; r.iBitsPerTransfer = 8; r.iRate = 1000; // spec says 12 MHz, but we'll start slow at 1 MHz r.iClockOutPolarity = ETrue; // rising edge r.iClockOutPhase = ETrue; r.iCSGPIOPort = GPIO_TO_HAL_PORT(p->iCSGPIOPin); r.iCSGPIOBit = GPIO_TO_PIN_BIT(p->iCSGPIOPin); r.iCSPolarity = EFalse; r.iDataMISO = cmd; r.iDataMOSI = cmd; error = UEZSPITransferPolled(p->iSPI, &r); if (!error) { data[0] = 0x74|LCD_SPI_ID0|LCD_SPI_WRITE|LCD_SPI_DATA; data[1] = aCmd->iData>>8; data[2] = aCmd->iData & 0xFF; r.iDataMOSI = data; r.iDataMISO = data; error = UEZSPITransferPolled(p->iSPI, &r); }
/*--------------------------------------------------------------------------*/ T_uezError GainSpan_CmdLib_ConfigureForSPI( const T_GainSpan_CmdLib_SPISettings *aSettings) { T_uezError error; ATLIBGS_MSG_ID_E r; int i; G_GSCmdLibSettings = *aSettings; G_GSSPITemplate.iBitsPerTransfer = 8; G_GSSPITemplate.iCSPolarity = EFalse; // Falling edge G_GSSPITemplate.iClockOutPolarity = EFalse; // Falling edge G_GSSPITemplate.iClockOutPhase = EFalse; // ETrue; G_GSSPITemplate.iDataMISO = 0; G_GSSPITemplate.iDataMISO = 0; G_GSSPITemplate.iNumTransferredIn = 0; G_GSSPITemplate.iNumTransferredOut = 0; G_GSSPITemplate.iRate = aSettings->iRate / 1000; G_GSSPITemplate.iCSGPIOPort = GPIO_TO_HAL_PORT(aSettings->iSPIChipSelect); G_GSSPITemplate.iCSGPIOBit = GPIO_TO_PIN_BIT(aSettings->iSPIChipSelect); error = UEZSPIOpen(G_GSCmdLibSettings.iSPIDeviceName, &G_GSSPI); if (error) return error; // Ensure these pins are not configured elsewhere UEZGPIOLock(G_GSCmdLibSettings.iDataReadyIO); if (G_GSCmdLibSettings.iSRSTn != GPIO_NONE ){ UEZGPIOLock(G_GSCmdLibSettings.iSRSTn); UEZGPIOOutput(G_GSCmdLibSettings.iSRSTn); // WIFI_SRSTn } UEZGPIOInput(G_GSCmdLibSettings.iDataReadyIO); // WIFI IRQ if (G_GSCmdLibSettings.iProgramMode != GPIO_NONE ) { UEZGPIOLock(G_GSCmdLibSettings.iProgramMode); UEZGPIOClear(G_GSCmdLibSettings.iProgramMode); // WIFI PROGRAM OFF UEZGPIOOutput(G_GSCmdLibSettings.iProgramMode); // WIFI PROGRAM OFF } if (G_GSCmdLibSettings.iSPIMode != GPIO_NONE ) { UEZGPIOLock(G_GSCmdLibSettings.iSPIMode); UEZGPIOSet(G_GSCmdLibSettings.iSPIMode); // WIFI_MODE SPI UEZGPIOOutput(G_GSCmdLibSettings.iSPIMode); // WIFI_MODE SPI } UEZTaskDelay(1250); if (G_GSCmdLibSettings.iSRSTn != GPIO_NONE ) UEZGPIOSet(G_GSCmdLibSettings.iSRSTn); // WIFI_SRSTn UEZTaskDelay(1000); // Initialize the GainSpan SPI routines GainSpan_SPI_Start(); // Flush anything there AtLibGs_FlushIncomingMessage(); /* Send command to check 5 times for module */ for (i = 0; i < 5; i++){ AtLibGs_FlushIncomingMessage(); r = AtLibGs_Check(GAINSPAN_AT_DEFAULT_TIMEOUT); if(ATLIBGS_MSG_ID_OK == r){ break; } } if(ATLIBGS_MSG_ID_RESPONSE_TIMEOUT == r){ return UEZ_ERROR_NOT_FOUND; } /* Send command to DISABLE echo */ do { r = AtLibGs_SetEcho(ATLIBGS_DISABLE); } while (ATLIBGS_MSG_ID_OK != r); // For now, just report it is not found if (r != ATLIBGS_MSG_ID_OK) return UEZ_ERROR_NOT_FOUND; return UEZ_ERROR_NONE; }