⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 norflashcommon.c

📁 这是在linux下gnu环境中进行norflash测试的代码
💻 C
字号:
/* ---------------------------------------------------------------------------- *         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 <utility/trace.h>#include <string.h>//------------------------------------------------------------------------------//         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);    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -