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

📄 flash.c

📁 基于keil 3环境下的lpc2132的pwm试验
💻 C
字号:

#include  <LPC213x.h> 
#include "config.h"

/* 定义IAP命令字 */
                                    //   命令           参数
#define     IAP_SELECTOR        50  // 选择扇区     【起始扇区号、结束扇区号】
#define     IAP_RAMTOFLASH      51  // 拷贝数据     【FLASH目标地址、RAM源地址、写入字节数、系统时钟频率】
#define     IAP_ERASESECTOR     52  // 擦除扇区     【起始扇区号、结束扇区号、系统时钟频率】
#define     IAP_BLANKCHK        53  // 查空扇区     【起始扇区号、结束扇区号】
#define     IAP_READPARTID      54  // 读器件ID     【无】
#define     IAP_BOOTCODEID      55  // 读Boot版本号 【无】
#define     IAP_COMPARE         56  // 比较命令     【Flash起始地址、RAM起始地址、需要比较的字节数】


/* 定义CCLK值大小,单位为KHz */
#define  IAP_FCCLK            11059
void (*IAP_Entry)(uint32 param_tab[], uint32 result_tab[]);
#define IAP_ENTER_ADR   0x7FFFFFF1  // IAP入口地址定义

uint32  paramin[8];                         // IAP入口参数缓冲区
uint32  paramout[8];                        // IAP出口参数缓冲区
/*
*********************************************************************************************************
** 函数名称:SelSector()
** 函数功能:IAP操作扇区选择,命令代码50。
** 入口参数:sec1        起始扇区
**           sec2        终止扇区
** 出口参数:IAP操作状态码
**           IAP返回值(paramout缓冲区)
*******************************************************************************************************
*/
uint32  SelSector(uint8 sec1, uint8 sec2)
{  
    paramin[0] = IAP_SELECTOR;               // 设置命令字
    paramin[1] = sec1;                       // 设置参数
    paramin[2] = sec2;
    (*IAP_Entry)(paramin, paramout);         // 调用IAP服务程序
   
    return(paramout[0]);                     // 返回状态码
}

/*
*******************************************************************************************************
** 函数名称:RamToFlash()
** 函数功能:复制RAM的数据到FLASH,命令代码51。
** 入口参数:dst        目标地址,即FLASH起始地址。以512字节为分界
**           src        源地址,即RAM地址。地址必须字对齐
**           no         复制字节个数,为512/1024/4096/8192
** 出口参数:IAP操作状态码
**           IAP返回值(paramout缓冲区)
*******************************************************************************************************
*/
uint32  RamToFlash(uint32 dst, uint32 src, uint32 no)
{  
    paramin[0] = IAP_RAMTOFLASH;             // 设置命令字
    paramin[1] = dst;                        // 设置参数
    paramin[2] = src;
    paramin[3] = no;
    paramin[4] = IAP_FCCLK;
    (*IAP_Entry)(paramin, paramout);         // 调用IAP服务程序
    
    return(paramout[0]);                     // 返回状态码
}

/*
*******************************************************************************************************
** 函数名称:EraseSector()
** 函数功能:扇区擦除,命令代码52。
** 入口参数:sec1       起始扇区
**           sec2       终止扇区
** 出口参数:IAP操作状态码
**           IAP返回值(paramout缓冲区)
*******************************************************************************************************
*/
uint32  EraseSector(uint8 sec1, uint8 sec2)
{  
    paramin[0] = IAP_ERASESECTOR;            // 设置命令字
    paramin[1] = sec1;                       // 设置参数
    paramin[2] = sec2;
    paramin[3] = IAP_FCCLK;
    (*IAP_Entry)(paramin, paramout);         // 调用IAP服务程序
   
    return(paramout[0]);                     // 返回状态码
}

/*
*******************************************************************************************************
** 函数名称:BlankCHK()
** 函数功能:扇区查空,命令代码53。
** 入口参数:sec1       起始扇区
**           sec2       终止扇区
** 出口参数:IAP操作状态码
**           IAP返回值(paramout缓冲区)
*******************************************************************************************************
*/
uint32  BlankCHK(uint8 sec1, uint8 sec2)
{  
    paramin[0] = IAP_BLANKCHK;               // 设置命令字
    paramin[1] = sec1;                       // 设置参数
    paramin[2] = sec2;
    (*IAP_Entry)(paramin, paramout);         // 调用IAP服务程序

    return(paramout[0]);                     // 返回状态码
}

/*
*******************************************************************************************************
** 函数名称:ReadParID()
** 函数功能:扇区查空,命令代码53。
** 入口参数:无
** 出口参数:IAP操作状态码
**           IAP返回值(paramout缓冲区)
*******************************************************************************************************
*/
uint32  ReadParID(void)
{  
    paramin[0] = IAP_READPARTID;             // 设置命令字
    (*IAP_Entry)(paramin, paramout);         // 调用IAP服务程序

    return(paramout[0]);                     // 返回状态码
}

/*
*******************************************************************************************************
** 函数名称:BootCodeID()
** 函数功能:读取boot代码版本号,命令代码55。
** 入口参数:无
** 出口参数:IAP操作状态码
**           IAP返回值(paramout缓冲区)
*******************************************************************************************************
*/
uint32  BootCodeID(void)
{  
    paramin[0] = IAP_BOOTCODEID;             // 设置命令字
    (*IAP_Entry)(paramin, paramout);         // 调用IAP服务程序

    return(paramout[0]);                     // 返回状态码
}

/*
*******************************************************************************************************
** 函数名称:Compare()
** 函数功能:校验数据,命令代码56。
** 入口参数:dst        目标地址,即RAM/FLASH起始地址。地址必须字对齐
**           src        源地址,即FLASH/RAM地址。地址必须字对齐
**           no         复制字节个数,必须能被4整除
** 出口参数:IAP操作状态码
**           IAP返回值(paramout缓冲区)
*******************************************************************************************************
*/
uint32  Compare(uint32 dst, uint32 src, uint32 no)
{  
    paramin[0] = IAP_COMPARE;                // 设置命令字
    paramin[1] = dst;                        // 设置参数
    paramin[2] = src;
    paramin[3] = no;
    (*IAP_Entry)(paramin, paramout);         // 调用IAP服务程序

    return(paramout[0]);                     // 返回状态码
}




//=============================
void zhuanhuan_uart(uint8 *s,uint32 no)
{uint8 i;
 for(i=0;i<10;i++)
      {
	  *s=no%10+48;
      no=no/10;
	  s++;  
  	  }
	  *s='\0';
}
void flash_int()   // 初始化函数指针IAP_Entry
 {
  IAP_Entry =(void(*)(uint32 [],uint32 []))IAP_ENTER_ADR;    // 初始化函数指针IAP_Entry
 }  
/*void ram_int()
      {uint32 i;
	   for(i=0;i<256;i++)
	   tian[i]=i;
	  }	  */
//=============================	  
/*
*******************************************************************************************************
end of
*******************************************************************************************************
*/

⌨️ 快捷键说明

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