历史上的今天
返回首页

历史上的今天

今天是:2024年11月11日(星期一)

正在发生

2019年11月11日 | LPC1778的IAP编程源码

2019-11-11 来源:51hei

最近在做一个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;                                        /* 设置命令字                   */

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

    paramin[2] = src;

    paramin[3] = no;

    paramin[4] = IAP_FCCLK;

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

推荐阅读

史海拾趣

千志电子(CCO)公司的发展小趣事

为了满足市场需求和扩大生产规模,千志电子不断加大投资力度。2014年,千志电子在湖北投资建设了千志电子科技(湖北)有限公司项目,总投资额达到5000万元人民币。该项目占地面积50亩,主要生产电阻等电子产品。预计项目建成后可实现年产值4000万元,年创利税350万元,安置劳动力120人左右。这一项目的投资建设不仅使千志电子的生产规模得到了进一步扩大,还为其未来的发展奠定了坚实基础。

ACE [ACE Technology Co., Ltd.]公司的发展小趣事

随着技术的不断进步和市场的日益成熟,千志电子开始注重电阻产业的深耕。公司不仅专注于电阻的生产,还逐渐向电阻专用设备、原材料等领域延伸。2006年,千志电子成立了深圳市鑫兴志实业有限公司,主要生产电阻相关的生产机器如切割机、焊接机、成型机、涂装机等。同时,千志电子还成立了千志电子科技(湖北)有限公司,生产各类型电阻器、设备及电阻所需原材料如碳棒、线材等。这一战略调整使千志电子形成了从原材料到设备的完整产业链,提高了生产效率和产品质量,进一步巩固了其在电阻行业的领先地位。

Avic公司的发展小趣事

Avic公司积极参与中国民用飞机项目的研发和生产。通过与国内外合作伙伴的紧密合作,公司成功研制出了多款具有市场竞争力的民用飞机。这些飞机的成功研制和生产,不仅提升了中国民用航空工业的水平,也为国内外航空公司提供了更多优质的航空产品选择。

Bce Sud公司的发展小趣事

随着技术的成熟,Bce Sud开始积极拓展市场,与多家电子设备制造商建立了合作关系。通过与这些企业的紧密合作,Bce Sud的产品逐渐应用于智能手机、平板电脑等消费电子产品中。同时,公司还积极寻求与上下游企业的战略合作,共同推动产业链的升级与发展。

Elpaq公司的发展小趣事
EOZ S.A.S公司的发展小趣事

EOZ S.A.S公司自创立之初,就致力于电子技术的研发与创新。在智能手机市场饱和之际,公司敏锐地捕捉到可穿戴设备市场的潜力,投入大量资源进行智能手表的研发。通过不断优化算法和硬件设计,EOZ S.A.S成功推出了一款具有超长待机、高精度健康监测和丰富应用场景的智能手表,迅速在市场上获得认可,公司因此崭露头角。

问答坊 | AI 解惑

TI芯片选型指南

相信很多工程师都在用TI的产品 本人在此分享一下官网公布的选型指南 希望对面临选型困惑的工程师有帮助 http://focus.ti.com.cn/cn/analog/docs/selectionguides.tsp…

查看全部问答>

【藏书阁】数字信号处理课件

第00章 数字信号处理 绪论 27页 0.5M PDF格式.pdf 第01章 离散时间信号与离散时间系统基础 71页 1.7M PDF格式 .pdf 第02章 Z变换及离散系统分析 43页 1.1M PDF格式.pdf 第03章 离散傅立叶变换 65页 1.4M PDF格式.pdf 第04章 附:关于图象压缩 4 ...…

查看全部问答>

如何在WM5.0上安装sqlite?

如题:如何在WM5.0上安装sqlite?    wce上又该怎么装?…

查看全部问答>

printk奇怪问题,请高手指点!

小弟我在调试网卡驱动的时候写了下面语句:             static   long   long   count   =   0;           stati ...…

查看全部问答>

电路板打样超级便宜

最近发现一个做电路板便宜的地方  www.sz-jlc.com/o   5*5cm以内50元 10*10以内100元 到现在为止最便宜的了 分享一下哈哈…

查看全部问答>

ST10技术资料

有关ST10的技术资料介绍,请参考:http://mcu.st.com/mcu/inchtml.php?fdir=pages&fnam=st10http://mcu.st.com/mcu/modules.php?name=mcu&file=familiesdocs&FAM=17ST10的中文手册书籍(类似ST7一样)不久也会面世了!!…

查看全部问答>

CC3000 wifi模块有木有

soso姐,帮我问一下TI办事处,CC3000什么时候搞一个活动哈,我看了TI 官网的宣传片了,我想要学习一下wifi的实时性能,我看他的DEMO 的是实时性还可以呀…

查看全部问答>

纽扣电池请教

关于纽扣电池,使用万用表测试其两端电阻,发现只有几欧姆的样子,这个是正常的吗?此外,想请教一下,如果我将纽扣电池串接在5V的电压源上放电,当串联电压降低后可以认为其电流都出自纽扣电池内吗?…

查看全部问答>