找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4280|回复: 1
打印 上一主题 下一主题
收起左侧

LPC2148像往U盘拷贝文件一样更新用户程序

[复制链接]
跳转到指定楼层
楼主
在网上爬行了很久才找到一个介绍USBMEM_BOOTLOADER的且有源代码的论坛,用KEIL 编译后结果不能运行,后来才找到问题的根源:
//usbhw.c
void USB_Init (void) {
  PINSEL1 &= ~0xC000C000;
//PINSEL1 |=  0x40004000;  //这是原来的程序
  PINSEL1 |=  0x80004000;     /* Select USB Link, VBUS */

原来得改一下才能用到我的板子上面。

另外,原来的程序是在复位时检测P0.15是否为低来判断是进入用户程序,还是USB IAP程序,我针对我的板子改了一下,我用了两个按钮来控制它,当按下P0.21的按钮时运行用户程序,当按下P0.22的按钮时则运行USB IAP程序:

首先要在sbl_config.h中做一下修改:

#define USER_START_SECTOR 2   //用户程序起始扇区
#define MAX_USER_SECTOR 26    //最大扇区    LPC2146是 14,LPC2148是26

#define ISP_ENTRY_GPIO_REG 0xE0028000                  /* Port */
#define ISP_ENTRY_PIN21            21          /* User Code Pin  */ //这里原来是 15
#define ISP_ENTRY_PIN22            22          /* USB IAP Pin  */  //这个是增加的

然后把sbl_iap.c里面的相关内容修改一下:

void check_isp_entry_pin(void)
{
while(1)
  {
    if(!( (*(volatile unsigned *)ISP_ENTRY_GPIO_REG) & (0x1<<isp_entry_pin21)) )[="" size][="" font][="" backcolor][="" color]
        {
            execute_user_code(); break;
        }
        if(!( (*(volatile unsigned *)ISP_ENTRY_GPIO_REG) & (0x1<<isp_entry_pin22)) )[="" size][="" font][="" backcolor][="" color]
        {
         break;   // Enter ISP mode
        }
  }
}

现在就可以来实验一下了:

usbmem程序的设置
boot程序按照这个设置编译程序,要输出HEX文件,然后试用ISP工具将其下载到LPC2148中。
现在按一下复位按钮,按K1(P0.21)没有反应,因为现在还没有用户程序;按一下K2(P0.22),指示灯亮了,此时电脑会显示发现了新硬件:

电脑中出现了一个可移动磁盘
打开这个磁盘,会发现里面有一个文件是492K,

得把这个文件删除掉才能拷贝入你自己的程序
然后再编译用户程序,要把起始位置修改为0x2000;同时要输出BIN文件:(在user  run  写入fromelf --bin .FlashBlinky.axf -o .FlashBlinky.bin)把得到的BIN文件拷贝入空白的磁盘:

拷入用户程序
按一下复位键,再按一下K1,就开始运行流水灯程序了。

单片机源程序如下:
  1. /*----------------------------------------------------------------------------
  2. *      U S B  -  K e r n e l
  3. *----------------------------------------------------------------------------
  4. *      Name:    USBUSER.C
  5. *      Purpose: USB Custom User Module
  6. *      Version: V1.10
  7. *----------------------------------------------------------------------------
  8. *      This software is supplied "AS IS" without any warranties, express,
  9. *      implied or statutory, including but not limited to the implied
  10. *      warranties of fitness for purpose, satisfactory quality and
  11. *      noninfringement. Keil extends you a royalty-free right to reproduce
  12. *      and distribute executable files created using this software for use
  13. *      on Philips LPC2xxx microcontroller devices only. Nothing else gives
  14. *      you the right to use this software.
  15. *
  16. *      Copyright (c) 2005-2006 Keil Software.
  17. *---------------------------------------------------------------------------*/

  18. #include <LPC214X.H>                        /* LPC214x definitions */

  19. #include "type.h"

  20. #include "usb.h"
  21. #include "usbcfg.h"
  22. #include "usbhw.h"
  23. #include "usbcore.h"
  24. #include "usbuser.h"
  25. #include "mscuser.h"

  26. #include "memory.h"


  27. /*
  28. *  USB Power Event Callback
  29. *   Called automatically on USB Power Event
  30. *    Parameter:       power: On(TRUE)/Off(FALSE)
  31. */

  32. #if USB_POWER_EVENT
  33. void USB_Power_Event (BOOL  power) {
  34. }
  35. #endif


  36. /*
  37. *  USB Reset Event Callback
  38. *   Called automatically on USB Reset Event
  39. */

  40. #if USB_RESET_EVENT
  41. void USB_Reset_Event (void) {
  42.   USB_ResetCore();
  43.   IOCLR1 = LED_CFG;                         /* Turn Off Cfg LED */
  44. }
  45. #endif


  46. /*
  47. *  USB Suspend Event Callback
  48. *   Called automatically on USB Suspend Event
  49. */

  50. #if USB_SUSPEND_EVENT
  51. void USB_Suspend_Event (void) {
  52.   IOSET1 = LED_SUSP;                        /* Turn On Suspend LED */
  53. }
  54. #endif


  55. /*
  56. *  USB Resume Event Callback
  57. *   Called automatically on USB Resume Event
  58. */

  59. #if USB_RESUME_EVENT
  60. void USB_Resume_Event (void) {
  61.   IOCLR1 = LED_SUSP;                        /* Turn Off Suspend LED */
  62. }
  63. #endif


  64. /*
  65. *  USB Remote Wakeup Event Callback
  66. *   Called automatically on USB Remote Wakeup Event
  67. */

  68. #if USB_WAKEUP_EVENT
  69. void USB_WakeUp_Event (void) {
  70. }
  71. #endif


  72. /*
  73. *  USB Start of Frame Event Callback
  74. *   Called automatically on USB Start of Frame Event
  75. */

  76. #if USB_SOF_EVENT
  77. void USB_SOF_Event (void) {
  78. }
  79. #endif


  80. /*
  81. *  USB Error Event Callback
  82. *   Called automatically on USB Error Event
  83. *    Parameter:       error: Error Code
  84. */

  85. #if USB_ERROR_EVENT
  86. void USB_Error_Event (DWORD error) {
  87. }
  88. #endif


  89. /*
  90. *  USB Set Configuration Event Callback
  91. *   Called automatically on USB Set Configuration Request
  92. */

  93. #if USB_CONFIGURE_EVENT
  94. void USB_Configure_Event (void) {

  95.   if (USB_Configuration) {                  /* Check if USB is configured */
  96.     IOSET1 = LED_CFG;                       /* Turn On Cfg LED */
  97.   } else {
  98.     IOCLR1 = LED_CFG;                       /* Turn Off Cfg LED */
  99.   }
  100. }
  101. #endif


  102. /*
  103. *  USB Set Interface Event Callback
  104. *   Called automatically on USB Set Interface Request
  105. */

  106. #if USB_INTERFACE_EVENT
  107. void USB_Interface_Event (void) {
  108. }
  109. #endif


  110. /*
  111. *  USB Set/Clear Feature Event Callback
  112. *   Called automatically on USB Set/Clear Feature Request
  113. */

  114. #if USB_FEATURE_EVENT
  115. void USB_Feature_Event (void) {
  116. }
  117. #endif


  118. #define P_EP(n) ((USB_EP_EVENT & (1 << (n))) ? USB_EndPoint##n : NULL)

  119. /* USB Endpoint Events Callback Pointers */
  120. void (* const USB_P_EP[16]) (DWORD event) = {
  121.   P_EP(0),
  122.   P_EP(1),
  123.   P_EP(2),
  124.   P_EP(3),
  125.   P_EP(4),
  126.   P_EP(5),
  127.   P_EP(6),
  128.   P_EP(7),
  129.   P_EP(8),
  130.   P_EP(9),
  131.   P_EP(10),
  132.   P_EP(11),
  133.   P_EP(12),
  134.   P_EP(13),
  135.   P_EP(14),
  136.   P_EP(15),
  137. };


  138. /*
  139. *  USB Endpoint 1 Event Callback
  140. *   Called automatically on USB Endpoint 1 Event
  141. *    Parameter:       event
  142. */

  143. void USB_EndPoint1 (DWORD event) {
  144. }


  145. /*
  146. *  USB Endpoint 2 Event Callback
  147. *   Called automatically on USB Endpoint 2 Event
  148. *    Parameter:       event
  149. */

  150. void USB_EndPoint2 (DWORD event) {

  151.   switch (event) {
  152.     case USB_EVT_OUT:
  153.       MSC_BulkOut();
  154.       break;
  155.     case USB_EVT_IN:
  156.       MSC_BulkIn();
  157.       break;
  158.   }
  159. }


  160. /*
  161. *  USB Endpoint 3 Event Callback
  162. *   Called automatically on USB Endpoint 3 Event
  163. *    Parameter:       event
  164. */

  165. void USB_EndPoint3 (DWORD event) {
  166. }


  167. /*
  168. *  USB Endpoint 4 Event Callback
  169. *   Called automatically on USB Endpoint 4 Event
  170. *    Parameter:       event
  171. */

  172. void USB_EndPoint4 (DWORD event) {
  173. }


  174. /*
  175. *  USB Endpoint 5 Event Callback
  176. *   Called automatically on USB Endpoint 5 Event
  177. *    Parameter:       event
  178. */

  179. void USB_EndPoint5 (DWORD event) {
  180. }


  181. /*
  182. *  USB Endpoint 6 Event Callback
  183. *   Called automatically on USB Endpoint 6 Event
  184. *    Parameter:       event
  185. */

  186. void USB_EndPoint6 (DWORD event) {
  187. }


  188. /*
  189. *  USB Endpoint 7 Event Callback
  190. *   Called automatically on USB Endpoint 7 Event
  191. *    Parameter:       event
  192. */

  193. void USB_EndPoint7 (DWORD event) {
  194. }


  195. /*
  196. *  USB Endpoint 8 Event Callback
  197. *   Called automatically on USB Endpoint 8 Event
  198. *    Parameter:       event
  199. */

  200. void USB_EndPoint8 (DWORD event) {
  201. }


  202. /*
  203. *  USB Endpoint 9 Event Callback
  204. *   Called automatically on USB Endpoint 9 Event
  205. *    Parameter:       event
  206. */

  207. void USB_EndPoint9 (DWORD event) {
  208. }


  209. /*
  210. *  USB Endpoint 10 Event Callback
  211. *   Called automatically on USB Endpoint 10 Event
  212. *    Parameter:       event
  213. */

  214. void USB_EndPoint10 (DWORD event) {
  215. }


  216. /*
  217. *  USB Endpoint 11 Event Callback
  218. *   Called automatically on USB Endpoint 11 Event
  219. *    Parameter:       event
  220. */

  221. void USB_EndPoint11 (DWORD event) {
  222. }


  223. /*
  224. *  USB Endpoint 12 Event Callback
  225. *   Called automatically on USB Endpoint 12 Event
  226. ……………………

  227. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码


所有资料51hei提供下载:
USB IAP 程序.rar (427.99 KB, 下载次数: 18)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:574696 发表于 2019-6-29 18:29 | 只看该作者
您好,LPC2148的IAP程序编译不通过。请求帮助。QQ:810001560
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表