#define Fcco (Fcclk * 4) //CCO頻率,必須為Fcclk的2、4、8、16倍,范圍為156MHz~320MHz
#define Fpclk (Fcclk / 4) * 1 //VPB時鐘頻率,只能為(Fcclk / 4)的1、2、4倍
#include 'target.h'
#endif
5.target.h
#ifndef __TARGET_H
#define __TARGET_H
#ifdef __cplusplus
extern 'C' {
#endif
#ifndef IN_TARGET
extern void Reset(void); //復位
extern void TargetInit(void); //目標板初始化
#endif
#ifdef __cplusplus
}
#endif
#endif
__swi(0x00) void SwiHandle1(int Handle); //軟件中斷
#define IRQDisable() SwiHandle1(0) //禁止IRQ中斷
#define IRQEnable() SwiHandle1(1) //使能IRQ中斷
#define FIQDisable() SwiHandle1(2) //禁止FIQ中斷
#define FIQEnable() SwiHandle1(3) //使能FIQ中斷
6.LPC2294.H
/* 向量中斷控制器(VIC)的特殊寄存器 */
#define VICIRQStatus (*((volatile unsigned long *) 0xFFFFF000))
#define VICFIQStatus (*((volatile unsigned long *) 0xFFFFF004))
#define VICRawIntr (*((volatile unsigned long *) 0xFFFFF008))
#define VICIntSelect (*((volatile unsigned long *) 0xFFFFF00C))
#define VICIntEnable (*((volatile unsigned long *) 0xFFFFF010))
#define VICIntEnClr (*((volatile unsigned long *) 0xFFFFF014))
#define VICSoftInt (*((volatile unsigned long *) 0xFFFFF018))
#define VICSoftIntClear (*((volatile unsigned long *) 0xFFFFF01C))
#define VICProtection (*((volatile unsigned long *) 0xFFFFF020))
。。。。。。省略
7.men_a.Scf適用于片內Flash發布
ROM_LOAD 0x00000000 ;加載區,從0x00000000開始
{
ROM_EXEC 0x00000000 ;執行區,起始地址,空間大小要和加載區一致
{
Startup.o (vectors, +First) ;startup.S中的向量表
* (+RO) ;其他代碼
}
IRAM 0x40000000 ;變量區,內部RAM開始
{
Startup.o (MyStacks) ;startup.S中的MyStacks
* (+RW,+ZI) ;文件中的其他變量
}
HEAP +0 UNINIT ;系統堆空間
{
Startup.o (Heap) ;startup.S中的Heap
}
STACKS 0x40002000 UNINIT ;LPC2131片內RAM最高端
{ ;系統的堆空間
Startup.o (Stacks) ;startup.S中的Stacks
}
}
8.men_c.Scf適用于片內Flash調試
ROM_LOAD 0x0
{
ROM_EXEC 0x00000000
{
Startup.o (vectors, +First)
* (+RO)
}
IRAM 0x40000000
{
Startup.o (MyStacks)
* (+RW,+ZI)
}
HEAP +0 UNINIT
{
Startup.o (Heap)
}
STACKS 0x40002000 UNINIT
{
Startup.o (Stacks)
}
}
2.啟動代碼工作流程
1.芯片復位后,PC=0x00000000,在異常向量表0x00000000處
2.芯片根據異常處理程序地址表,得到復位程序的地址
3.跳轉到復位處理程序處
4.調用InitStack()函數,初始化個模式的堆棧
5.調用Target.c中的TargetResetInit函數,初始化目標板:設置Remap,各部分時鐘,存儲器加速模塊和VIC等
6.跳轉到用戶C程序入口main()處
3.修改uC/OSII代碼(完成移植)
1.要移植一個操作系統到一個特定的CPU體系結構上,并不是一件很容易的事情。對移植者有以下要求:
(1)對目標體系結構要有深入的了解:
參考資料:ARM公司。ARM Architecture Reference Manual。
(2)對OS原理要有深入的了解;
參考資料:Labrosse J Jean。嵌入式實時操作系統uC/OS-II(第二版)。邵貝貝等譯。
(3)對所使用的編譯器要有較深的了解;
參考資料:ADS自帶的編譯器和連接器的手冊
(4)對需要移植的操作系統要有相當的了解;
參考資料:Labrosse J Jean。嵌入式實時操作系統uC/OS-II(第二版)。邵貝貝等譯。
(5)對具體使用的芯片也要一定的了解;
參考資料:LPC2131的數據手冊和使用手冊
2.需要移植的文件有:OS_CPU.H,OS_CPU_A.ASM,OS_CPU_C.C,IRQINC
(1).OS_CPU.H文件:定義與編譯器無關的數據類型和堆棧的數據類型,以及一些開關中斷的宏代碼,例如:BOOLEAN,INT8U等數據類型,OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()開關中斷宏,OS_STK_GROWTH堆棧的增長方向,OS_TASLK_SW任務切換時執行的代碼。源代碼如下:
/****************************************Copyright (c)************************************
** FreshAir嵌入式軟件開發團隊
** 軟件開發團隊
** 技術部
** http://www.freshiair.com
**--------------文件信息-------------------------------------------------------------------
**文 件 名: os_cpu.h
**創 建 人: 吳友強
**最后修改日期: 2009年7月28日
**描 述: μCOS-II在LPC210x上的移植代碼CPU配置部分,用ADS1.2編譯
**--------------當前版本修訂---------------------------------------------------------------
** 修改人: 吳友強
** 日 期: 2009年7月18日
** 描 述: 增加函數
**-----------------------------------------------------------------------------------------
******************************************************************************************/
#ifdef OS_CPU_GLOBALS
#define OS_CPU_EXT
#else
#define OS_CPU_EXT extern
#endif
/******************************************************************************************
* 定義與編譯器無關的數據類型
******************************************************************************************/
typedef unsigned char BOOLEAN;
typedef unsigned char INT8U;
typedef signed char INT8S;
typedef unsigned short INT16U;
typedef signed short INT16S;
typedef unsigned int INT32U;
typedef signed int INT32S;
typedef float FP32;
typedef double FP64;
typedef unsigned int OS_STK;
/******************************************************************************************
* 與ARM7體系結構相關的一些定義
******************************************************************************************/
#define OS_CRITICAL_METHOD 2 /*選擇開、關中斷的方式*/
__swi(0x00) void OS_TASK_SW(void); /*任務級任務切換函數*/
__swi(0x01) void _OSStartHighRdy(void); /*運行優先級最高的任務*/
__swi(0x02) void OS_ENTER_CRITICAL(void); /*關中斷*/
__swi(0x03) void OS_EXIT_CRITICAL(void); /*開中斷*/
__swi(0x80) void ChangeToSYSMode(void); /*任務切換到系統模式*/
__swi(0x81) void ChangeToUSRMode(void); /*任務切換到用戶模式*/
__swi(0x82) void TaskIsARM(INT8U prio); /*任務代碼是ARM代碼*/
__swi(0x83) void TaskIsTHUMB(INT8U prio); /*任務代碼是Thumb代碼*/
__swi(0x40) void *GetOSFunctionAddr(int Index); /*獲取系統服務函數入口*/
__swi(0x41) void *GetUsrFunctionAddr(int Index);/*獲取自定義服務函數入口*/
__swi(0x42) void OSISRBegin(void); /*中斷開始處理*/
__swi(0x43) void OSISRNeedSwap(void); /*判斷中斷是否需要切換*/
#define OS_STK_GROWTH 1 /*堆棧是從上往下長的*/
#define USR32Mode 0x10
#define SYS32Mode 0x1f
#define NoInt 0x80
#ifndef USER_USING_MODE
#define USER_USING_MODE USER32Mode /*任務缺省模式*/
#endif
#ifndef OS_SELF_EN
#define OS_SELF_EN 0 /*允許返回OS與任務分別編譯、固化*/
#endif
OS_CPU_EXT INT32U OsEnterSum; /*關中斷計數器(開關中斷的信號量)*/
(2).OS_CPU_C.C文件:OSTaskStkInit()任務堆棧初始化函數和一些uC/OS-II在執行某些操作時調用的用戶函數,一般為空,但是需要,避免編譯警告。源代碼如下:
/****************************************Copyright (c)************************************
** FreshAir嵌入式軟件開發團隊
** 軟件開發團隊
** 技術部
上一篇:Windows CE6.0中斷實驗過程
下一篇:arm linux 移植 mtd-utils 1.x
推薦閱讀最新更新時間:2025-05-10 23:43




設計資源 培訓 開發板 精華推薦
- MC34072ADR2G 交流耦合反相放大器的典型應用
- 具有低電池電量指示的 MCP1259 穩壓 3.3V、低紋波電荷泵和低工作電流睡眠模式或旁路模式的典型應用
- ADRF6780-EVALZ,ADRF6780 5.9GHz - 23.6GHz 寬帶上變頻器評估板
- 用于中心局交換機的 90W、20V 交直流單輸出電源
- LT6654BHS6-2.048 擴展電源范圍電壓基準的典型應用
- LT1171HVCT、5V/2.5A 升壓轉換器的典型應用
- MPU9250 低成本 十軸傳感器(磁力計 陀螺儀 加速度計)
- PCF2127 TCXO RTC 的計時、CLKOUT、電源管理、時間戳、電池連接和外部設備應用的供電
- LTM8032EV 演示板、超低噪聲 36V、2A DC/DC 模塊穩壓器
- LT6654AHS6-4.096、16 位 ADC 電壓基準的典型應用
- 南芯科技推出高集成度多口移動電源解決方案,助力充電寶市場穩健發展
- 英飛凌推出具有超低導通電阻的CoolSiC? MOSFET 750 V G2,適用于汽車和工業功率電子應用
- DigiKey 慶祝 B 站賬號粉絲突破 10 萬,贈送驚喜禮包
- 碳化硅企業 Wolfspeed 啟動破產重組,預計 2025 年三季度末完成司法重整
- 蘋果被曝考慮放棄自研模型 轉而與Anthropic或OpenAI合作
- ?百度文心4.5來襲!英特爾Day0即支持端側部署
- 【廣瀨電機】關于中國發明專利侵權訴訟達成和解的公告
- 英飛凌BMS解決方案推動電動汽車創新
- 地平線的L3判斷與實踐路徑
- 汽車網絡升級攻略:CAN-CAN FD-車載以太網