Root/plasma/kernel/flash.c

1/*--------------------------------------------------------------------
2 * TITLE: Plasma Flash
3 * AUTHOR: Steve Rhoads (rhoadss@yahoo.com)
4 * DATE CREATED: 12/17/05
5 * FILENAME: plasma.h
6 * PROJECT: Plasma CPU core
7 * COPYRIGHT: Software placed into the public domain by the author.
8 * Software 'as is' without warranty. Author liable for nothing.
9 * DESCRIPTION:
10 * Plasma flash controller
11 * Only the lower 16-bits of each 32-bit word are connected --
12 * this changes the address mapping to the flash.
13 * ByteOffset and bytes must be a multiple of two.
14 *--------------------------------------------------------------------*/
15#include "plasma.h"
16#include "rtos.h"
17
18
19void FlashRead(uint16 *dst, uint32 byteOffset, int bytes)
20{
21   volatile uint32 *ptr=(uint32*)(FLASH_BASE + (byteOffset << 1));
22   *ptr = 0xff; //read mode
23   while(bytes > 0)
24   {
25      *dst++ = (uint16)*ptr++;
26      bytes -= 2;
27   }
28}
29
30
31void FlashWrite(uint16 *src, uint32 byteOffset, int bytes)
32{
33   volatile uint32 *ptr=(uint32*)(FLASH_BASE + (byteOffset << 1));
34   while(bytes > 0)
35   {
36      *ptr = 0x40; //write mode
37      *ptr++ = *src++; //write data
38      while((*ptr & 0x80) == 0) //check status
39         ;
40      bytes -= 2;
41   }
42}
43
44
45void FlashErase(uint32 byteOffset)
46{
47   volatile uint32 *ptr=(uint32*)(FLASH_BASE + (byteOffset << 1));
48   *ptr = 0x20; //erase block
49   *ptr = 0xd0; //confirm
50   while((*ptr & 0x80) == 0) //check status
51      ;
52}
53

Archive Download this file

Branches:
master



interactive