void onenand_loadpage (unsigned int block, unsigned int page) { // Block Number onenand_writew(onenand_block_address(block), ONENAND_BASE + ONENAND_REG_START_ADDRESS1); // BufferRAM onenand_writew(onenand_bufferram_address(block), ONENAND_BASE + ONENAND_REG_START_ADDRESS2); // Page (Sector) Number Set: FPA, FSA onenand_writew(onenand_sector_address(page), ONENAND_BASE + ONENAND_REG_START_ADDRESS8); // BSA, BSC onenand_writew(onenand_buffer_address(), ONENAND_BASE + ONENAND_REG_START_BUFFER); // Interrupt clear onenand_writew(ONENAND_INT_CLEAR, ONENAND_BASE + ONENAND_REG_INTERRUPT); onenand_writew(ONENAND_CMD_READ, ONENAND_BASE + ONENAND_REG_COMMAND); #if 1 while (!(READ_INTERRUPT() & ONENAND_INT_READ)) continue; #else while (!(READ_INTERRUPT() & ONENAND_INT_MASTER)) continue; #endif }
//void ONENAND_WriteReg() // void ONENAND_ReadPage( void* base, unsigned int block, unsigned int page) { int len; unsigned int* dest; unsigned int* src; // Block Number onenand_writel(onenand_block_address(block), ONENAND_MAP11_BASE + (ONENAND_REG_START_ADDRESS1<<1)); // BufferRAM onenand_writel(onenand_bufferram_address(block), ONENAND_MAP11_BASE + (ONENAND_REG_START_ADDRESS2<<1)); // Page (Sector) Number Set: FPA, FSA onenand_writel(onenand_sector_address(page), ONENAND_MAP11_BASE + (ONENAND_REG_START_ADDRESS8<<1)); // BSA, BSC onenand_writel(onenand_buffer_address(), ONENAND_MAP11_BASE + (ONENAND_REG_START_BUFFER<<1)); // Interrupt clear onenand_writel(ONENAND_INT_CLEAR, ONENAND_MAP11_BASE + (ONENAND_REG_INTERRUPT<<1)); onenand_writel(ONENAND_CMD_READ, ONENAND_MAP11_BASE + (ONENAND_REG_COMMAND<<1)); #if 1 while (!(READ_INTERRUPT() & ONENAND_INT_READ)) continue; #else while (!(READ_INTERRUPT() & ONENAND_INT_MASTER)) continue; #endif len = ONENAND_PAGE_SIZE >> 2; dest = (unsigned short *)(base); src = (unsigned short *)(ONENAND_MAP00_BASE + ONENAND_DATARAM); while (len-- > 0) { *dest++ = *src++; } }