From 044ad7c3987460ede48ff27afd6bdb0ca05a0432 Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Mon, 4 Jul 2011 20:52:54 +0200 Subject: import at91lib from at91lib_20100901_softpack_1_9_v_1_0_svn_v15011 it's sad to see that atmel doesn't publish their svn repo or has a centralized location or even puts proper version/release info into the library itself --- memories/norflash/NorFlashCommon.c | 142 +++++++++++++++++++++++++++++++++++++ 1 file changed, 142 insertions(+) create mode 100644 memories/norflash/NorFlashCommon.c (limited to 'memories/norflash/NorFlashCommon.c') diff --git a/memories/norflash/NorFlashCommon.c b/memories/norflash/NorFlashCommon.c new file mode 100644 index 0000000..2e18372 --- /dev/null +++ b/memories/norflash/NorFlashCommon.c @@ -0,0 +1,142 @@ +/* ---------------------------------------------------------------------------- + * ATMEL Microcontroller Software Support + * ---------------------------------------------------------------------------- + * Copyright (c) 2008, Atmel Corporation + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the disclaimer below. + * + * Atmel's name may not be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * ---------------------------------------------------------------------------- + */ + +//------------------------------------------------------------------------------ +// Headers +//------------------------------------------------------------------------------ +#include "NorFlashCommon.h" + +#include +#include + +//------------------------------------------------------------------------------ +// Internal macros +//------------------------------------------------------------------------------ + +#define WRITE_COMMAND8(commandAddress, command) \ + {*(volatile unsigned char *)(commandAddress) = (unsigned char) command;} +#define WRITE_COMMAND16(commandAddress, command) \ + {*(volatile unsigned short *)(commandAddress) = (unsigned short) command;} +#define WRITE_COMMAND32(commandAddress, command) \ + {*(volatile unsigned int *)(commandAddress) = (unsigned int) command;} + +#define WRITE_DATA8(dataAddress, data) \ + {(*((volatile unsigned char *) dataAddress)) = (unsigned char) data;} +#define WRITE_DATA16(dataAddress, data) \ + {(*((volatile unsigned short *) dataAddress)) = (unsigned short) data;} +#define WRITE_DATA32(dataAddress, data) \ + {(*((volatile unsigned int *) dataAddress)) = (unsigned int) data;} + +#define READ_DATA8(dataAddress) \ + (*((volatile unsigned char *) dataAddress)) +#define READ_DATA16(dataAddress) \ + (*((volatile unsigned short *) dataAddress)) +#define READ_DATA32(dataAddress) \ + (*((volatile unsigned int *) dataAddress)) + + +//------------------------------------------------------------------------------ +// Exported functions +//------------------------------------------------------------------------------ + +//------------------------------------------------------------------------------ +/// Write a command to address. +/// \param busWidth Bus width in device. +/// \param commandAddress Command address offset. +/// \param command Command to be send. +//------------------------------------------------------------------------------ +unsigned char WriteCommand( + unsigned char busWidth, + unsigned int commandAddress, + unsigned int command) +{ + if (busWidth == 8 ){ + WRITE_COMMAND8(commandAddress, command); + } + else if( busWidth == 16 ){ + WRITE_COMMAND16(commandAddress, command); + } + else if(busWidth == 32 ){ + WRITE_COMMAND32(commandAddress, command); + } + return 0; +} + + +//------------------------------------------------------------------------------ +/// Reads data from the NorFlash chip into the provided buffer. +/// \param busWidth Bus width in device. +/// \param address Address of data. +/// \param buffer Buffer where the data will be stored. +//------------------------------------------------------------------------------ +void ReadRawData( + unsigned char busWidth, + unsigned int address, + unsigned char *buffer) +{ + if (busWidth == 8 ){ + *buffer = READ_DATA8(address); + } + else if( busWidth == 16 ){ + + unsigned short *buffer16 = (unsigned short *) buffer; + *buffer16 = READ_DATA16(address); + } + else if(busWidth == 32 ){ + unsigned int *buffer32 = (unsigned int *) buffer; + *buffer32 = READ_DATA32(address); + } +} + +//------------------------------------------------------------------------------ +/// Writes data to the NorFlash chip from the provided buffer. +/// \param busWidth Bus width in device. +/// \param address Address of data. +/// \param buffer Buffer where the data will be stored. +//------------------------------------------------------------------------------ + +void WriteRawData( + unsigned char busWidth, + unsigned int address, + unsigned char *buffer) + +{ + if (busWidth == 8 ){ + WRITE_DATA8(address, *buffer); + } + else if( busWidth == 16 ){ + unsigned short *buffer16 = (unsigned short *) buffer; + WRITE_DATA16(address, *buffer16); + } + else if(busWidth == 32 ){ + unsigned int *buffer32 = (unsigned int *) buffer; + WRITE_DATA32(address, *buffer32); + } +} + -- cgit v1.2.3