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

📄 memory.c

📁 单片机开发列程
💻 C
字号:
#define __MEMORY_H__

#include "Config.h"
/********************************************************************************************************
**函数名称:MemInit
**函数功能:外部存储器初始化
**输    入:无
**输    出:无
********************************************************************************************************/
void MemInit(void)
{
    DEVMEMCFG |= BIT7;          //使能外部总线访问
}

/********************************************************************************************************
**函数名称:FM18L08Test
**函数功能:并行FRAM存储器FM18L08测试程序,每次写入256个字节,再读回来与写入的比较
**输    入:无
**输    出:无
********************************************************************************************************/
void FM18L08Test(void)
{
    //------------------------------------------------------------
    //并行存储器FM18L08测试时用到的变量
    //------------------------------------------------------------
    uchar xdata FM18L08Cnt128;
    uchar xdata FM18L08Cnt256_1;
    uchar xdata FM18L08Cnt256_2;
    uint  xdata FM18L08Addr_1;
    uint  xdata FM18L08Addr_2;
    uchar xdata FM18L08DatWR;
    uchar xdata FM18L08DatRD;
    uchar xdata FM18L08WRStore[256] = {0};    //写入的数据存储数组
    //------------------------------------------------------------

    FM18L08Addr_1 = 0x8000;
    FM18L08Addr_2 = 0x8000;

    UART0_Printf("\n ->FM18L08 test begin: \n");
    for(FM18L08Cnt128 = 128; FM18L08Cnt128 > 0; FM18L08Cnt128 --)
    {
        //写入数据
        //------------------------------------------------------------
        //为了方便察看读写的数据可以定义宏  FM18L08DATASHOW
        #ifdef FM18L08DATASHOW
            UART0_Printf("\n\n write to 0x:%x \n",FM18L08Addr_1);
        #endif
        //------------------------------------------------------------
        for(FM18L08Cnt256_1 = 0; FM18L08Cnt256_1 < 0xFF; FM18L08Cnt256_1 ++)
        {
            FM18L08DatWR = (int)rand();                             //产生随机数
            //------------------------------------------------------------
            #ifdef FM18L08DATASHOW
                UART0_Printf(" %d ",(int)FM18L08DatWR);
            #endif
            //------------------------------------------------------------
            FM18L08WRStore[FM18L08Cnt256_1] = FM18L08DatWR;         //把写入的数据保留待比较
            XBYTE[FM18L08Addr_1] = FM18L08DatWR;                    //把随机数写入存储器
            FM18L08Addr_1 ++;                                       //地址产生增量
        }
            
            FM18L08DatWR = (int)rand();                             //产生随机数
            //------------------------------------------------------------
            #ifdef FM18L08DATASHOW
                UART0_Printf(" %d ",(int)FM18L08DatWR);
            #endif
            //------------------------------------------------------------
            FM18L08WRStore[FM18L08Cnt256_1] = FM18L08DatWR;         //把写入的数据保留待比较
            XBYTE[FM18L08Addr_1] = FM18L08DatWR;                    //把随机数写入存储器
            FM18L08Addr_1 ++;                                       //地址产生增量
        
        //读出数据
        //------------------------------------------------------------
        #ifdef FM18L08DATASHOW
            UART0_Printf("\n Read From  0x:%x \n",FM18L08Addr_2);
        #endif
        //------------------------------------------------------------
        for(FM18L08Cnt256_2 = 0; FM18L08Cnt256_2 < 0xFF; FM18L08Cnt256_2 ++)
        {
            FM18L08DatRD = XBYTE[FM18L08Addr_2];                    //读回来的数据
            //***************************************************************
            #ifdef FM18L08DATASHOW
                UART0_Printf(" %d ",(int)FM18L08DatRD);
            #endif
            //***************************************************************
            if(FM18L08DatRD == FM18L08WRStore[FM18L08Cnt256_2])     //读写的数据一致
            {;}
            else                                                    //读写的数据不一致
            {
                UART0_Printf("\n\n Data Err Occur at 0x:%x \n\n",FM18L08Addr_2);
            }
            FM18L08Addr_2 ++;                                       //地址产生增量
        }

            FM18L08DatRD = XBYTE[FM18L08Addr_2];                    //读回来的数据
            //***************************************************************
            #ifdef FM18L08DATASHOW
                UART0_Printf(" %d ",(int)FM18L08DatRD);
            #endif
            //***************************************************************
            if(FM18L08DatRD == FM18L08WRStore[FM18L08Cnt256_2])     //读写的数据一致
            {;}
            else                                                    //读写的数据不一致
            {
                UART0_Printf("\n\n Data Err Occur at 0x:%x \n\n",FM18L08Addr_2);
            }
            FM18L08Addr_2 ++;                                       //地址产生增量

        //这256个字节测试完毕,输出一个点
        UART0_Printf(".");
    }

    UART0_Printf("\n   FM18L08 test End! \n");
}

⌨️ 快捷键说明

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