ERROR_CODE SetToPageMode(void) { SetupForFlash(); GetCodes(); *pEBIU_AMGCTL = 0x0000; /* disable the Async Memory */ /* Set the mode to async Mode (0-async mode, 1-flash mode, 2-page mode, 3-burst mode) */ *pEBIU_MODE = ( B0MODE_PAGE | B1MODE_PAGE | B2MODE_PAGE | B3MODE_PAGE ); *pEBIU_FCTL = ( PGWS | BCLK ); *pEBIU_AMGCTL = ( AMCKEN | AMBEN ); /* enable the Async Memory */ ssync(); SetRCR ( uwRCR_Default ); ResetFlash(); return NO_ERR; }
ERROR_CODE SetToBurstMode(void) { u16 uwRCRtmp; SetupForFlash(); GetCodes(); *pEBIU_AMGCTL = 0x0000; /* disable the Async Memory */ /* Set the mode to async Mode (0-async mode, 1-flash mode, 2-page mode, 3-burst mode) */ *pEBIU_MODE = ( B0MODE_BURST | B1MODE_BURST | B2MODE_BURST | B3MODE_BURST ); *pEBIU_FCTL = ( BCLK ); *pEBIU_AMGCTL = ( AMCKEN | AMBEN ); /* enable the Async Memory */ ssync(); uwRCRtmp = uwRCR_Default & 0x05F0; uwRCRtmp |= 0x0003; uwRCRtmp |= 3 << 11; SetRCR ( uwRCRtmp ); ResetFlash(); return NO_ERR; }
u32 adi_pdd_Control( ADI_DEV_PDD_HANDLE PDDHandle, u32 Command, void *pArg) { ERROR_CODE ErrorCode = NO_ERR; COMMAND_STRUCT *pCmdStruct = (COMMAND_STRUCT *)pArg; // switch on the command switch ( Command ) { // erase all case CNTRL_ERASE_ALL: ErrorCode = EraseFlash(pCmdStruct->SEraseAll.ulFlashStartAddr); break; // erase sector case CNTRL_ERASE_SECT: ErrorCode = EraseBlock( pCmdStruct->SEraseSect.nSectorNum, pCmdStruct->SEraseSect.ulFlashStartAddr ); break; // get manufacturer and device codes case CNTRL_GET_CODES: ErrorCode = GetCodes((int *)pCmdStruct->SGetCodes.pManCode, (int *)pCmdStruct->SGetCodes.pDevCode, (unsigned long)pCmdStruct->SGetCodes.ulFlashStartAddr); break; case CNTRL_GET_DESC: //Filling the contents with data pCmdStruct->SGetDesc.pDesc = pFlashDesc; pCmdStruct->SGetDesc.pFlashCompany = pDeviceCompany; break; // get sector number based on address case CNTRL_GET_SECTNUM: ErrorCode = GetSectorNumber( pCmdStruct->SGetSectNum.ulOffset, (int *)pCmdStruct->SGetSectNum.pSectorNum ); break; // get sector number start and end offset case CNTRL_GET_SECSTARTEND: ErrorCode = GetSectorStartEnd( pCmdStruct->SSectStartEnd.pStartOffset, pCmdStruct->SSectStartEnd.pEndOffset, pCmdStruct->SSectStartEnd.nSectorNum ); break; // get the number of sectors case CNTRL_GETNUM_SECTORS: pCmdStruct->SGetNumSectors.pnNumSectors[0] = gNumSectors; break; // reset case CNTRL_RESET: ErrorCode = ResetFlash(pCmdStruct->SReset.ulFlashStartAddr); break; // turn on dataflow (command required of all device drivers) case ADI_DEV_CMD_SET_DATAFLOW: ErrorCode = NO_ERR; break; case ADI_DEV_CMD_SET_DATAFLOW_METHOD: // Do nothing & simply return back for these commands break; // get peripheral DMA support (command required of all device drivers) case ADI_DEV_CMD_GET_PERIPHERAL_DMA_SUPPORT: (*(u32 *)pArg) = FALSE; // no, this device is not supported by peripheral DMA break; // no command or unknown command do nothing default: // set our error ErrorCode = UNKNOWN_COMMAND; break; } // return return(ErrorCode); }
u32 adi_pdd_Control( ADI_DEV_PDD_HANDLE PDDHandle, u32 Command, void *pArg) { ERROR_CODE ErrorCode = NO_ERR; COMMAND_STRUCT *pCmdStruct = (COMMAND_STRUCT *)pArg; // switch on the command switch ( Command ) { // erase all case CNTRL_ERASE_ALL: ErrorCode = EraseFlash(pCmdStruct->SEraseAll.ulFlashStartAddr); break; // erase sector case CNTRL_ERASE_SECT: ErrorCode = EraseBlock( pCmdStruct->SEraseSect.nSectorNum, pCmdStruct->SEraseSect.ulFlashStartAddr ); break; // get manufacturer and device codes case CNTRL_GET_CODES: ErrorCode = GetCodes((int *)pCmdStruct->SGetCodes.pManCode, (int *)pCmdStruct->SGetCodes.pDevCode, (unsigned long)pCmdStruct->SGetCodes.ulFlashStartAddr); break; //Filling the contents with data case CNTRL_GET_DESC: pCmdStruct->SGetDesc.pTitle = pEzKitTitle; pCmdStruct->SGetDesc.pDesc = pFlashDesc; pCmdStruct->SGetDesc.pFlashCompany = pDeviceCompany; break; // get sector number based on address case CNTRL_GET_SECTNUM: ErrorCode = GetSectorNumber( pCmdStruct->SGetSectNum.ulOffset, (int *)pCmdStruct->SGetSectNum.pSectorNum ); break; // get sector number start and end offset case CNTRL_GET_SECSTARTEND: ErrorCode = GetSectorStartEnd( pCmdStruct->SSectStartEnd.pStartOffset, pCmdStruct->SSectStartEnd.pEndOffset, pCmdStruct->SSectStartEnd.nSectorNum ); break; // get the number of sectors case CNTRL_GETNUM_SECTORS: pCmdStruct->SGetNumSectors.pnNumSectors[0] = NUM_SECTORS; break; // reset case CNTRL_RESET: ErrorCode = ResetFlash(pCmdStruct->SReset.ulFlashStartAddr); break; // no command or unknown command do nothing default: // set our error ErrorCode = UNKNOWN_COMMAND; break; } // return return(ErrorCode); }