LPC1778的IAP编程源码

2019-11-11来源: 51hei关键字:LPC1778  IAP  编程

最近在做一个LPC1778的远程烧写,应用到了IAP编程,所以分享一下。

单片机源程序如下:

#include "IAP.h"


/*********************************************************************************************************

  宏定义

*********************************************************************************************************/


                                                                            

#define IAP_ENTER_ADR   0x1FFF1FF1                                      /* IAP入口地址定义              */


#if defined   ( __CC_ARM   )

__align(4)        INT8U            GucIapTmp[1024];                                                            /* 定义4K空间,编程Flash时使用  */                          

#elif defined ( __ICCARM__ )

#pragma pack(push)

#pragma pack(4)

INT8U            GucIapTmp[1024];        

#pragma pack(pop)

#endif                          


/* 

*  定义CCLK值大小,单位为KHz 

*/

#define  IAP_FCCLK            (96000)

#define  IAP_ENTER_ADR        0x1FFF1FF1                                  /* IAP入口地址定义              */


/*

*  定义函数指针  

*/

void (*IAP_Entry) (INT32U param_tab[], INT32U result_tab[]);


INT32U  paramin[8];                                                     /* IAP入口参数缓冲区            */

INT32U  paramout[8]; 


#define     UARTBPS     9600                                            /* 串口通信波特率               */

volatile    INT8U       GucRcvOver;                                                        /* 接收完成标志 1:表示完成     */

volatile    INT32U      GulRcvCount;                                                                    /* 接收字节数                                        */


INT32U                  *GpulFlagPoint   = (INT32U *)UserFlag;                                                /* 用户程序标志指针                                */


INT32U                  *pSECTORADDL1   = (INT32U *)SECTORADDL1;                                        /* 用户程序标志指针                                */

INT32U                  *pSECTORADDL2   = (INT32U *)SECTORADDL2;                                        /* 用户程序标志指针                                */

INT32U                  *pSECTORADDL3   = (INT32U *)SECTORADDL3;                                        /* 用户程序标志指针                                */


INT32U                  *pSECTORADDH1   = (INT32U *)SECTORADDH1;                                        /* 用户程序标志指针                                */

INT32U                  *pSECTORADDH2   = (INT32U *)SECTORADDH2;                                        /* 用户程序标志指针                                */

INT32U                  *pSECTORADDH3   = (INT32U *)SECTORADDH3;                                        /* 用户程序标志指针                                */


                                                   /* IAP出口参数缓冲区            */


/*********************************************************************************************************

** Function name:       sectorPrepare

** Descriptions:        IAP操作扇区选择,命令代码50

** input parameters:    sec1:           起始扇区

**                      sec2:           终止扇区

** output parameters:   paramout[0]:    IAP操作状态码,IAP返回值     

** Returned value:      paramout[0]:    IAP操作状态码,IAP返回值                     

*********************************************************************************************************/

INT32U  sectorPrepare (INT8U sec1, INT8U sec2)

{  

    paramin[0] = IAP_Prepare;                                           /* 设置命令字                   */

    paramin[1] = sec1;                                                  /* 设置参数                     */

    paramin[2] = sec2;                            

    (*IAP_Entry)(paramin, paramout);                                    /* 调用IAP服务程序              */

   

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

}


/*********************************************************************************************************

** Function name:       ramCopy

** Descriptions:        复制RAM的数据到FLASH,命令代码51

** input parameters:    dst:            目标地址,即FLASH起始地址。以512字节为分界

**                      src:            源地址,即RAM地址。地址必须字对齐

**                      no:             复制字节个数,为512/1024/4096/8192

** output parameters:   paramout[0]:    IAP操作状态码,IAP返回值     

** Returned value:      paramout[0]:    IAP操作状态码,IAP返回值                     

*********************************************************************************************************/

INT32U  ramToFlash (INT32U dst, INT32U src, INT32U no)

{  

paramin[0] = IAP_RAMTOFLASH; /* 设置命令字

[1] [2] [3] [4] [5] [6] [7]
关键字:LPC1778  IAP  编程 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic479589.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:2440裸机编程之六 实时时钟
下一篇:2440裸机编程之五 定时器

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

(C与汇编语言)ARM9之LPC2132控制LCD1602显示字符串
GPADIR             EQU            0xE0028008GPASET             EQU            0xE0028004GPACLR             EQU            0xE
发表于 2019-10-29
(C与汇编语言)ARM9之LPC2132控制LCD1602显示字符串
ARM之LPC2132流水灯LCD1602
1、汇编程序GPADIR             EQU            0xE0028008GPASET            EQU            0xE0028004GPACLR            EQU            0xE002800
发表于 2019-10-29
ARM之LPC2132流水灯LCD1602
LPC2124+L297+L298+驱动电机proteus仿真
 /***************************************************************************** File:Main.C* 功能:****************************************************************************/#include  "config.h"/********************************************************************************名称:IRQ_Eint0()*功能:外部中断EINT
发表于 2019-10-25
LPC2124+L297+L298+驱动电机proteus仿真
LPC2124流水灯及闪烁灯proteus仿真和源码
分享一个LPC2124芯片做的流水灯及闪烁灯的proteus仿真,下面是原理图:源码:/****************************************Copyright (c)****************************************************                               Guangzou ZLG-MCU Development Co.,LTD.**     
发表于 2019-10-24
LPC2124流水灯及闪烁灯proteus仿真和源码
基于数字相关的时栅信号处理设计LPC2138源程序及proteus仿真
设计要求如下:1.时栅传感器模拟器:通过输入两路时间和空间的信号。(1) 设计一路正弦载波信号模拟信号输出 sina * cos(wt)(2) 设计一路余弦信号模拟信号输出     cosa *sin(wt)    (3) 设计两路信号的合成模拟信号输出   sin(wt+a)2. 设计数据采集模块。(要求整周期采样)3.  ARM硬件接口电路设计:显示路和键盘电路4. 软件设计:数字相关算法求解角度、显示、按键、A/D.5.  proteus仿真和实做。希望对大家有用!仿真原理图如下LPC2138单片机源程序
发表于 2019-10-17
基于数字相关的时栅信号处理设计LPC2138源程序及proteus仿真
STM32f030弄IAP时遇到的问题
bootloard中的跳转和F1(M3内核)的没什么区别这里的这句话if((((__IO uint32_t)IAP_ADDR)&0x2FFE0000)==0x20000000)并不是‘与’“&”操作,而是取出IAP_ADDR的值,判断栈顶地址特别注意的地方在bootloard跳转过去的程序需要添加 memcpy((void*)0x20000000,(void*)IAP_ADDR,0xB4); __HAL_SYSCFG_REMAPMEMORY_SRAM();在M3内核中可以通过操作VTOR寄存器来重映射中断向量表SCB->VTOR = FLASH_BASE | 0x10000;/* Vector Table
发表于 2019-11-07
STM32f030弄IAP时遇到的问题
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved