在網上爬行了很久才找到一個介紹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<
execute_user_code(); break;
}
if(!( (*(volatile unsigned *)ISP_ENTRY_GPIO_REG) & (0x1<
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,就開始運行流水燈程序了。
單片機源程序如下:
/*----------------------------------------------------------------------------
* U S B - K e r n e l
*----------------------------------------------------------------------------
* Name: USBUSER.C
* Purpose: USB Custom User Module
* Version: V1.10
*----------------------------------------------------------------------------
* This software is supplied "AS IS" without any warranties, express,
* implied or statutory, including but not limited to the implied
* warranties of fitness for purpose, satisfactory quality and
* noninfringement. Keil extends you a royalty-free right to reproduce
* and distribute executable files created using this software for use
* on Philips LPC2xxx microcontroller devices only. Nothing else gives
* you the right to use this software.
*
* Copyright (c) 2005-2006 Keil Software.
*---------------------------------------------------------------------------*/
#include
/* LPC214x definitions */ #include "type.h"
#include "usb.h"
#include "usbcfg.h"
#include "usbhw.h"
#include "usbcore.h"
#include "usbuser.h"
#include "mscuser.h"
#include "memory.h"
/*
* USB Power Event Callback
* Called automatically on USB Power Event
* Parameter: power: On(TRUE)/Off(FALSE)
*/
#if USB_POWER_EVENT
void USB_Power_Event (BOOL power) {
}
#endif
/*
* USB Reset Event Callback
* Called automatically on USB Reset Event
*/
#if USB_RESET_EVENT
void USB_Reset_Event (void) {
USB_ResetCore();
IOCLR1 = LED_CFG; /* Turn Off Cfg LED */
}
#endif
/*
* USB Suspend Event Callback
* Called automatically on USB Suspend Event
*/
#if USB_SUSPEND_EVENT
void USB_Suspend_Event (void) {
IOSET1 = LED_SUSP; /* Turn On Suspend LED */
}
#endif
/*
* USB Resume Event Callback
* Called automatically on USB Resume Event
*/
#if USB_RESUME_EVENT
void USB_Resume_Event (void) {
IOCLR1 = LED_SUSP; /* Turn Off Suspend LED */
}
#endif
/*
* USB Remote Wakeup Event Callback
* Called automatically on USB Remote Wakeup Event
*/
#if USB_WAKEUP_EVENT
void USB_WakeUp_Event (void) {
}
#endif
/*
* USB Start of Frame Event Callback
* Called automatically on USB Start of Frame Event
*/
#if USB_SOF_EVENT
void USB_SOF_Event (void) {
}
#endif
/*
* USB Error Event Callback
* Called automatically on USB Error Event
* Parameter: error: Error Code
*/
#if USB_ERROR_EVENT
void USB_Error_Event (DWORD error) {
}
#endif
/*
* USB Set Configuration Event Callback
* Called automatically on USB Set Configuration Request
*/
#if USB_CONFIGURE_EVENT
void USB_Configure_Event (void) {
if (USB_Configuration) { /* Check if USB is configured */
IOSET1 = LED_CFG; /* Turn On Cfg LED */
} else {
IOCLR1 = LED_CFG; /* Turn Off Cfg LED */
}
}
#endif
/*
* USB Set Interface Event Callback
* Called automatically on USB Set Interface Request
*/
#if USB_INTERFACE_EVENT
void USB_Interface_Event (void) {
}
#endif
/*
* USB Set/Clear Feature Event Callback
* Called automatically on USB Set/Clear Feature Request
*/
#if USB_FEATURE_EVENT
void USB_Feature_Event (void) {
}
#endif
#define P_EP(n) ((USB_EP_EVENT & (1 << (n))) ? USB_EndPoint##n : NULL)
/* USB Endpoint Events Callback Pointers */
void (* const USB_P_EP[16]) (DWORD event) = {
P_EP(0),
P_EP(1),
P_EP(2),
P_EP(3),
P_EP(4),
P_EP(5),
P_EP(6),
P_EP(7),
P_EP(8),
P_EP(9),
P_EP(10),
P_EP(11),
P_EP(12),
P_EP(13),
P_EP(14),
P_EP(15),
};
/*
* USB Endpoint 1 Event Callback
* Called automatically on USB Endpoint 1 Event
* Parameter: event
*/
void USB_EndPoint1 (DWORD event) {
}
/*
* USB Endpoint 2 Event Callback
* Called automatically on USB Endpoint 2 Event
* Parameter: event
*/
void USB_EndPoint2 (DWORD event) {
switch (event) {
case USB_EVT_OUT:
MSC_BulkOut();
break;
case USB_EVT_IN:
MSC_BulkIn();
break;
}
}
/*
* USB Endpoint 3 Event Callback
* Called automatically on USB Endpoint 3 Event
* Parameter: event
*/
void USB_EndPoint3 (DWORD event) {
}
/*
* USB Endpoint 4 Event Callback
* Called automatically on USB Endpoint 4 Event
* Parameter: event
*/
void USB_EndPoint4 (DWORD event) {
}
/*
* USB Endpoint 5 Event Callback
* Called automatically on USB Endpoint 5 Event
* Parameter: event
*/
void USB_EndPoint5 (DWORD event) {
}
/*
* USB Endpoint 6 Event Callback
* Called automatically on USB Endpoint 6 Event
* Parameter: event
*/
void USB_EndPoint6 (DWORD event) {
}
/*
* USB Endpoint 7 Event Callback
* Called automatically on USB Endpoint 7 Event
* Parameter: event
*/
void USB_EndPoint7 (DWORD event) {
}
/*
* USB Endpoint 8 Event Callback
* Called automatically on USB Endpoint 8 Event
* Parameter: event
*/
void USB_EndPoint8 (DWORD event) {
}
/*
* USB Endpoint 9 Event Callback
* Called automatically on USB Endpoint 9 Event
* Parameter: event
*/
void USB_EndPoint9 (DWORD event) {
}
/*
* USB Endpoint 10 Event Callback
* Called automatically on USB Endpoint 10 Event
* Parameter: event
*/
void USB_EndPoint10 (DWORD event) {
}
/*
* USB Endpoint 11 Event Callback
* Called automatically on USB Endpoint 11 Event
* Parameter: event
*/
void USB_EndPoint11 (DWORD event) {
}
/*
* USB Endpoint 12 Event Callback
* Called automatically on USB Endpoint 12 Event
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………

上一篇:LPC2000系列Proteus仿真+代碼 菜鳥的ARM學習筆記
下一篇:LPC2000系列ARM芯片的電子琴的設計
推薦閱讀
史海拾趣
ESTEK公司深知產品質量對于企業發展的重要性。因此,公司從源頭上把控原材料的質量,并在生產過程中嚴格執行質量管理體系標準。通過一系列嚴格的質量管控措施,ESTEK公司的產品質量得到了有效保障。在市場上,ESTEK公司的產品以高質量、高可靠性著稱,贏得了廣大客戶的信賴和好評。
在電子行業中,品質是企業生存和發展的關鍵。Caliber公司深知這一點,從原材料采購到生產制造的每一個環節,都嚴格把控品質。公司建立了完善的質量管理體系,通過不斷的技術改進和工藝優化,確保每一款產品的品質都達到行業最高標準。正是這種對品質的執著追求,讓Caliber的產品在市場上獲得了良好的口碑,也為公司的長期發展奠定了堅實的基礎。
品質一直是Coleman Cable的生命線。公司建立了嚴格的質量控制體系,從原材料采購、生產過程到成品檢驗,每一個環節都嚴格把關。這種對品質的執著追求,使得Coleman Cable的產品在市場上享有良好的聲譽。同時,公司還積極聽取客戶反饋,不斷改進產品和服務,贏得了客戶的信賴和忠誠。
隨著電子行業的不斷發展,B&K Precision始終保持著創新的步伐。公司不斷推出具有創新性和競爭力的新產品,如數字電流表、三路輸出直流清潔電源等,滿足了市場對于高精度、高可靠性測試儀器的需求。這些產品的推出不僅提升了公司的市場份額,也進一步鞏固了公司在電子行業中的地位。
在隨后的幾十年里,B&K Precision通過合并和收購其他電子公司,不斷增強自身的市場競爭力。其中,1961年收購光遠公司是一個重要的里程碑。這次收購不僅擴大了公司的業務范圍,還帶來了更多的技術和人才資源,為公司的后續發展注入了新的活力。
面對日益嚴峻的環境問題,Allied公司積極承擔社會責任,致力于可持續發展。公司注重環保生產,采用環保材料和工藝,減少對環境的影響。同時,公司還關注未來發展趨勢,制定了一系列戰略規劃,包括加大研發投入、拓展新興市場、提升品牌影響力等,為公司的未來發展奠定了堅實的基礎。
這些故事基于Allied Wire & Cable Inc公司的歷史和發展情況構建,旨在展現其在電子行業中的成長和進步。如需更詳細的信息,建議查閱公司的官方網站或相關新聞報道。
----處理閃電和ESD感應情況的最好方法是從敏感元件上將瞬態電壓轉移走。一般由一個并聯連接的保護器件完成。發生瞬態事件時,瞬態電流通過瞬態抑制器分流,使被保護電路上的電壓降低。… 查看全部問答∨ |
|
春節回來后,在家里待了一個多月。 做不成的事,重新認識了自己, 明白了安心做技術, 看看壇子里哪個大哥那缺人, 幫忙留意一下 謝謝 現在,看看行情,原則上可以即時到任 可能過清明吧。。。 本人適應能力強,北待過天津,西到過成都,家 ...… 查看全部問答∨ |
|
所在公司的一個項目,比較類似于手持gps。 大致上硬件環境就是FPGA的開發板,Altera的2c系列,采用nios的軟核cpu。 開發環境就是NIOSII 6.1,c語言。 具體要實現的具體功能已經部分有一些代碼,測試功能用。 現在想加操作系統,需要高手幫忙。 ...… 查看全部問答∨ |
隨著全球各國政府將節能減排列為重要工作,作為能源消耗大戶的照明成為節能減排追捧的對象,各國政府紛紛推出淘汰白熾燈的時間表,不過隨著白熾燈的淡出,另一個問題產生了――誰能取代白熾燈的照明地位?很多人認為是LED照明,但是由于成本、使用 ...… 查看全部問答∨ |
3EW85和43A,010(電阻在100k左右)J226L是什么?EES86和VU LPSPHM, K23V5M4PM [ 本帖最后由 michaellyx123 于 2011-8-16 22:32 編輯 ]… 查看全部問答∨ |