ASPカーネルツリーのリポジトリ
Revision | 14f34bc48d03891fa959c9e1ada2afe19045bb7e (tree) |
---|---|
Time | 2011-08-27 17:36:10 |
Author | suikan <suikan@user...> |
Commiter | suikan |
ディレクトリ構造を公式CORTEX-M3依存部の推奨に変更
@@ -0,0 +1,29 @@ | ||
1 | +PACKAGE asp_arch_arm_m_gcc | |
2 | + | |
3 | +cmsis/LPC17xx.h | |
4 | +cmsis/core_cm3.h | |
5 | +cmsis/system_LPC17xx.h | |
6 | +MANIFEST | |
7 | +Makefile.chip | |
8 | +chip.tf | |
9 | +chip_cfg1_out.h | |
10 | +chip_check.tf | |
11 | +chip_config.c | |
12 | +chip_config.h | |
13 | +chip_kernel.h | |
14 | +chip_serial.cfg | |
15 | +chip_serial.h | |
16 | +chip_sil.h | |
17 | +chip_stddef.h | |
18 | +chip_syssvc.h | |
19 | +chip_test.h | |
20 | +chip_timer.cfg | |
21 | +chip_timer.h | |
22 | +chip_user.txt | |
23 | +lpc1700.h | |
24 | +chip_rename.def | |
25 | +chip_rename.h | |
26 | +chip_unrename.h | |
27 | + | |
28 | + | |
29 | +INCLUDE ../../pdic/uart/MANIFEST |
@@ -0,0 +1,79 @@ | ||
1 | +# | |
2 | +# Makefile のチップ依存部(LPC17xx用) | |
3 | +# | |
4 | + | |
5 | +# | |
6 | +# ディレクトリの定義 | |
7 | +# | |
8 | +CHIPDIR = $(SRCDIR)/arch/$(PRC)_$(TOOL)/$(CHIP)_$(TOOL) | |
9 | + | |
10 | +# | |
11 | +# GNU開発環境のターゲットアーキテクチャの定義 | |
12 | +# | |
13 | +GCC_TARGET = arm-none-eabi | |
14 | + | |
15 | +# | |
16 | +# コンパイルオプション | |
17 | +# | |
18 | +INCLUDES := $(INCLUDES) -I$(CHIPDIR) -I$(CHIPDIR)/cmsis | |
19 | +CDEFS := $(CDEFS) | |
20 | +COPTS := $(COPTS) -mcpu=cortex-m3 | |
21 | + | |
22 | +# | |
23 | +# カーネルに関する定義 | |
24 | +# | |
25 | +KERNEL_DIR := $(KERNEL_DIR) $(CHIPDIR) | |
26 | +KERNEL_ASMOBJS := $(KERNEL_ASMOBJS) | |
27 | +KERNEL_COBJS := $(KERNEL_COBJS) chip_config.o core_timer.o | |
28 | +KERNEL_CFLAGS := $(KERNEL_CFLAGS) -fno-strict-aliasing -mcpu=cortex-m3 | |
29 | + | |
30 | +# | |
31 | +# システムサービスに関する定義 | |
32 | +# | |
33 | +SYSSVC_DIR := $(SYSSVC_DIR) $(SRCDIR)/pdic/uart | |
34 | +SYSSVC_COBJS := $(SYSSVC_COBJS) uart.o | |
35 | + | |
36 | + | |
37 | +# | |
38 | +# トレースログに関する設定 | |
39 | +# | |
40 | +ifeq ($(ENABLE_TRACE),true) | |
41 | + COPTS := $(COPTS) -DTOPPERS_ENABLE_TRACE | |
42 | + KERNEL_DIR := $(KERNEL_DIR) $(SRCDIR)/arch/logtrace | |
43 | + KERNEL_COBJS := $(KERNEL_COBJS) trace_config.o trace_dump.o | |
44 | +endif | |
45 | + | |
46 | +# | |
47 | +# ROM化時は ROM_BOOTをtrueに定義する | |
48 | +# | |
49 | +ifeq ($(ROM_BOOT),true) | |
50 | + CDEFS := $(CDEFS) -DROM_BOOT | |
51 | +endif | |
52 | + | |
53 | +# | |
54 | +# スタートアップモジュールに関する定義 | |
55 | +# | |
56 | +# ldファイルに「STARTUP(start.o)」を記述したため,スタートアップモジュー | |
57 | +# ルの名前をHIDDEN_OBJSに定義する.また,LDFLAGSに-nostdlibを追加している. | |
58 | +# | |
59 | +HIDDEN_OBJS = start.o | |
60 | + | |
61 | +$(HIDDEN_OBJS): %.o: %.S | |
62 | + $(CC) -c $(CFLAGS) $(KERNEL_CFLAGS) $< | |
63 | + | |
64 | +$(HIDDEN_OBJS:.o=.d): %.d: %.S | |
65 | + @$(PERL) $(SRCDIR)/utils/makedep -C $(CC) \ | |
66 | + -O "$(CFLAGS) $(KERNEL_CFLAGS)" $< >> Makefile.depend | |
67 | + | |
68 | +LDFLAGS := -nostdlib $(LDFLAGS) | |
69 | + | |
70 | +# | |
71 | +# 依存関係の定義 | |
72 | +# | |
73 | +kernel_cfg.timestamp: $(CHIPDIR)/chip.tf | |
74 | +$(OBJFILE): $(CHIPDIR)/chip_check.tf | |
75 | + | |
76 | +# | |
77 | +# プロセッサ依存部のインクルード | |
78 | +# | |
79 | +include $(SRCDIR)/arch/$(PRC)_$(TOOL)/common/Makefile.core |
@@ -0,0 +1,8 @@ | ||
1 | +$ | |
2 | +$ パス2のターゲット依存テンプレート(NXP LPC17XX汎用) | |
3 | +$ | |
4 | + | |
5 | +$ | |
6 | +$ プロセッサ依存のテンプレートファイルのインクルード | |
7 | +$ | |
8 | +$INCLUDE"arm_m_gcc/common/core.tf"$ |
@@ -0,0 +1,18 @@ | ||
1 | +/** | |
2 | + * \addtogroup TOPPERS_CHIP | |
3 | + * \{ | |
4 | + */ | |
5 | + | |
6 | +/** | |
7 | + * \file chip_cfg1_out.h | |
8 | + * \brief cfg1_out.cをリンクするために必要なスタブの定義 | |
9 | + */ | |
10 | + | |
11 | +/* | |
12 | + * コア依存のスタブの定義を読み込む | |
13 | + */ | |
14 | +#include "arm_m_gcc/common/core_cfg1_out.h" | |
15 | + | |
16 | +/** | |
17 | + * \} | |
18 | + */ |
@@ -0,0 +1,8 @@ | ||
1 | +$ | |
2 | +$ パス3のチップ依存テンプレート(NXP LPC17XX汎用) | |
3 | +$ | |
4 | + | |
5 | +$ | |
6 | +$ パス3のプロセッサ依存のテンプレートのインクルード | |
7 | +$ | |
8 | +$INCLUDE"arm_m_gcc/common/core_check.tf"$ |
@@ -0,0 +1,146 @@ | ||
1 | +/* | |
2 | + * TOPPERS/ASP Kernel | |
3 | + * Toyohashi Open Platform for Embedded Real-Time Systems/ | |
4 | + * Advanced Standard Profile Kernel | |
5 | + * | |
6 | + * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory | |
7 | + * Toyohashi Univ. of Technology, JAPAN | |
8 | + * Copyright (C) 2005-2007 by Embedded and Real-Time Systems Laboratory | |
9 | + * Graduate School of Information Science, Nagoya Univ., JAPAN | |
10 | + * Copyright (C) 2010 by TOPPERS/ASP for LPC project | |
11 | + * http://sourceforge.jp/projects/toppersasp4lpc/ | |
12 | + * | |
13 | + * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ | |
14 | + * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 | |
15 | + * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. | |
16 | + * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 | |
17 | + * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー | |
18 | + * スコード中に含まれていること. | |
19 | + * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 | |
20 | + * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 | |
21 | + * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 | |
22 | + * の無保証規定を掲載すること. | |
23 | + * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 | |
24 | + * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ | |
25 | + * と. | |
26 | + * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 | |
27 | + * 作権表示,この利用条件および下記の無保証規定を掲載すること. | |
28 | + * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに | |
29 | + * 報告すること. | |
30 | + * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 | |
31 | + * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. | |
32 | + * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 | |
33 | + * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを | |
34 | + * 免責すること. | |
35 | + * | |
36 | + * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お | |
37 | + * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 | |
38 | + * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ | |
39 | + * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ | |
40 | + * の責任を負わない. | |
41 | + * | |
42 | + */ | |
43 | +/** | |
44 | + * \addtogroup TOPPERS_CHIP | |
45 | + * \{ | |
46 | + */ | |
47 | +/** | |
48 | + * \file chip_config.c | |
49 | + * \brief カーネル実装のチップ依存モジュール(LPC17xx汎用) | |
50 | + */ | |
51 | +#include "kernel_impl.h" | |
52 | +#include <sil.h> | |
53 | +#include "lpc1700.h" | |
54 | +#include "target_serial.h" | |
55 | +#include "target_syssvc.h" | |
56 | + | |
57 | + | |
58 | + | |
59 | +void chip_initialize(void) | |
60 | +{ | |
61 | + | |
62 | + /* | |
63 | + * プロセッサ依存部の初期化 | |
64 | + */ | |
65 | + core_initialize(); | |
66 | + | |
67 | +} | |
68 | + | |
69 | +extern void initPLL0( | |
70 | + pllClockSource_type clkSrc, | |
71 | + unsigned int isMainOsc20MHzMore, | |
72 | + unsigned int N, | |
73 | + unsigned int M, | |
74 | + unsigned int cpuClkDiv | |
75 | + ) | |
76 | +{ | |
77 | + | |
78 | + if ( clkSrc == eMainOsc ) | |
79 | + { | |
80 | + // メインオシレータを使う場合には、周波数レンジに応じてSCSの設定を変える。 | |
81 | + if ( isMainOsc20MHzMore ) | |
82 | + LPC_SC->SCS = 1<<5; | |
83 | + else | |
84 | + LPC_SC->SCS = 1<<5 | 1<<4; | |
85 | + | |
86 | + while | |
87 | + ((LPC_SC->SCS & (1<<6)) == 0); /* 発振器の準備が整うまで待つ */ | |
88 | + } | |
89 | + | |
90 | + LPC_SC->CCLKCFG = cpuClkDiv-1; /* CPUクロックデバイダの設定 */ | |
91 | + LPC_SC->CLKSRCSEL = clkSrc; /* PLLに入力するクロック源の設定 */ | |
92 | + | |
93 | + LPC_SC->PLL0CFG = (N-1) <<16 | (M-1); /* 分周比と低倍比の設定 */ | |
94 | + LPC_SC->PLL0FEED = 0xAA; | |
95 | + LPC_SC->PLL0FEED = 0x55; | |
96 | + | |
97 | + LPC_SC->PLL0CON = 0x01; /* PLL0 イネーブル */ | |
98 | + LPC_SC->PLL0FEED = 0xAA; | |
99 | + LPC_SC->PLL0FEED = 0x55; | |
100 | + while | |
101 | + (!(LPC_SC->PLL0STAT & (1<<26))); /* PLLの準備が整うまで待つ */ | |
102 | + | |
103 | + LPC_SC->PLL0CON = 0x03; /* PLL0 をクロックとして使う */ | |
104 | + LPC_SC->PLL0FEED = 0xAA; | |
105 | + LPC_SC->PLL0FEED = 0x55; | |
106 | + while | |
107 | + (!(LPC_SC->PLL0STAT & ((1<<25) | (1<<24))));/* PLLの準備が整うまで待つ */ | |
108 | + | |
109 | + | |
110 | +} | |
111 | + | |
112 | +void chip_exit(void) | |
113 | +{ | |
114 | + /* チップ依存部の終了処理 */ | |
115 | + core_terminate(); | |
116 | +} | |
117 | + | |
118 | + | |
119 | + | |
120 | +void chip_fput_log(char_t c) | |
121 | +{ | |
122 | + /* Newlineなら、CRも追加する */ | |
123 | + if (c == '\n') { | |
124 | + sio_pol_snd_chr('\r', SIO_PORTID); | |
125 | + } | |
126 | + sio_pol_snd_chr(c, SIO_PORTID); | |
127 | +} | |
128 | + | |
129 | +/** | |
130 | + * \brief 低レベルのターゲット依存の初期化 | |
131 | + * \details | |
132 | + * メモリ初期化の前に呼び出される | |
133 | + * CCRのSTKALIGNビットをクリアする | |
134 | + * このビットはCORTEX-M3コアがR1からR2に変化する過程で"1"に変更された。クリアしないと | |
135 | + * TOPPERS/ASPはクラッシュする。 | |
136 | + */ | |
137 | +void hardware_init_hook() | |
138 | +{ | |
139 | + SCB->CCR &= ~SCB_CCR_STKALIGN_Msk; | |
140 | +} | |
141 | + | |
142 | +/** | |
143 | + * \} | |
144 | + */ | |
145 | + | |
146 | + |
@@ -0,0 +1,168 @@ | ||
1 | +/* | |
2 | + * TOPPERS/ASP Kernel | |
3 | + * Toyohashi Open Platform for Embedded Real-Time Systems/ | |
4 | + * Advanced Standard Profile Kernel | |
5 | + * | |
6 | + * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory | |
7 | + * Toyohashi Univ. of Technology, JAPAN | |
8 | + * Copyright (C) 2005-2007 by Embedded and Real-Time Systems Laboratory | |
9 | + * Graduate School of Information Science, Nagoya Univ., JAPAN | |
10 | + * Copyright (C) 2010 by TOPPERS/ASP for LPC project | |
11 | + * http://sourceforge.jp/projects/toppersasp4lpc/ | |
12 | + * | |
13 | + * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ | |
14 | + * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 | |
15 | + * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. | |
16 | + * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 | |
17 | + * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー | |
18 | + * スコード中に含まれていること. | |
19 | + * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 | |
20 | + * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 | |
21 | + * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 | |
22 | + * の無保証規定を掲載すること. | |
23 | + * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 | |
24 | + * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ | |
25 | + * と. | |
26 | + * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 | |
27 | + * 作権表示,この利用条件および下記の無保証規定を掲載すること. | |
28 | + * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに | |
29 | + * 報告すること. | |
30 | + * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 | |
31 | + * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. | |
32 | + * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 | |
33 | + * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを | |
34 | + * 免責すること. | |
35 | + * | |
36 | + * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お | |
37 | + * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 | |
38 | + * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ | |
39 | + * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ | |
40 | + * の責任を負わない. | |
41 | + * | |
42 | + */ | |
43 | + | |
44 | +#ifndef TOPPERS_CHIP_CONFIG_H | |
45 | +#define TOPPERS_CHIP_CONFIG_H | |
46 | +/** | |
47 | + * \addtogroup TOPPERS_CHIP | |
48 | + * \{ | |
49 | + */ | |
50 | + | |
51 | +/** | |
52 | + * \file chip_config.h | |
53 | + * \brief カーネル実装のチップ依存部モジュール(NXP LPC17XX用汎用) | |
54 | + * \details | |
55 | + * カーネルのターゲット依存部のインクルードファイル.kernel_impl.hのター | |
56 | + * ゲット依存部の位置付けとなす. | |
57 | + */ | |
58 | + | |
59 | +/* | |
60 | + * チップ依存部の読み込み | |
61 | + */ | |
62 | +#include "lpc1700.h" | |
63 | + | |
64 | +/* | |
65 | + * トレースログに関する設定 | |
66 | + */ | |
67 | +#ifdef TOPPERS_ENABLE_TRACE | |
68 | +#include "logtrace/trace_config.h" | |
69 | +#endif /* TOPPERS_ENABLE_TRACE */ | |
70 | + | |
71 | + | |
72 | + | |
73 | + | |
74 | +/** | |
75 | + * \brief 非タスクコンテキスト用スタックポインタの初期値を格納する変数 | |
76 | + * \details | |
77 | + * porting.txtは、*_kernel_istkptを変数として使い、そこに非タスクコンテキスト用 | |
78 | + * スタックポインタの初期値を格納することを要請している。LPC1763の場合、*_kernel_istkptの | |
79 | + * 値は、SRAM実行とROM実行で異なる。これに対応するため、LDスクリプトで例外ベクトルの先頭を | |
80 | + * 指す値、_vector_start_lmaを作り、_kernel_istkptとして使用している。 | |
81 | + */ | |
82 | +#define _kernel_istkpt _vector_start_lma | |
83 | + | |
84 | +#ifndef DEFAULT_ISTKSZ | |
85 | +/** | |
86 | + * \brief デフォルトの非タスクコンテキスト用のスタック領域の定義 | |
87 | + * \details | |
88 | + * 割り込み用のスタックのサイズを指定する。8の倍数として指定すること。このマクロは | |
89 | + * ターゲット依存部で指定していない場合にのみ使用される。 | |
90 | + */ | |
91 | +#define DEFAULT_ISTKSZ (2048) | |
92 | +#endif | |
93 | + | |
94 | + | |
95 | + | |
96 | +#ifndef TOPPERS_MACRO_ONLY | |
97 | + | |
98 | +/** | |
99 | + * @brief PLLのクロックソース。 initPLL0に渡して使う。 | |
100 | + */ | |
101 | +typedef enum { eIrc, eMainOsc, eRtcOsc} pllClockSource_type; | |
102 | + | |
103 | +/** | |
104 | + * @param clkSrc PLLのソースとなるクロック。eIrc, eMainOsc, eRtcOscのうち一つを指定する。 | |
105 | + * @param isMainOsc20MHzMore メイン発振器の周波数が20MHz以上なら真を渡す | |
106 | + * @param M 逓倍比を決める整数。6から512が許される。 | |
107 | + * @param N PLLのリファレンス入力の分周比を決める整数。1から32が許される | |
108 | + * @param cpuClkDiv PLLの出力の分周器。1/cpuClkDivになる。0,1,2は禁止。 | |
109 | + * @details | |
110 | + * PLL0の周波数を設定する。クロックソースとなる発振器、その周波数、PLLのデバイダ、PLL後のデバイダを | |
111 | + * 指定する。生成するクロックの周波数は以下の通りとなる。CCLKがCPUのコアクロックである。 | |
112 | + * @code | |
113 | + * PLLCLK = (2 × M × FIN) / N | |
114 | + * CCLK = PLLCLK / cpuClkDiv | |
115 | + * @endcode | |
116 | + * LPC1768のPLLに関しては次のような物理上限値がNXPによって定められている | |
117 | + * - 入力は32kHz - 50MHz (UM10360, section 5.1) | |
118 | + * - PLL出力は 275MHz - 550MHz (同上) | |
119 | + * - CCLKは最大100MHz (データシート) | |
120 | + * | |
121 | + * このプログラムはNXP社のCMSIS中のルーチンをコピーし、改良したものである。 | |
122 | + */ | |
123 | +extern void initPLL0( | |
124 | + pllClockSource_type clkSrc, | |
125 | + unsigned int isMainOsc20MHzMore, | |
126 | + unsigned int N, | |
127 | + unsigned int M, | |
128 | + unsigned int cpuClkDiv | |
129 | + ); | |
130 | + | |
131 | + | |
132 | +/** | |
133 | + * \brief チップ依存の初期化 | |
134 | + * \details | |
135 | + * この館数はtarget_initializeから呼ぶことを前提としている。 | |
136 | + */ | |
137 | +extern void chip_initialize(void); | |
138 | + | |
139 | +/** | |
140 | + * \brief チップの終了処理 | |
141 | + * \details | |
142 | + * システムを終了する時に使う.この関数はtarget_exit()から | |
143 | + * 呼ぶことを前提としており、prc_terminate()を呼び、処理が終了すると制御を戻す。 | |
144 | + */ | |
145 | +extern void chip_exit(void); | |
146 | + | |
147 | +/** | |
148 | + * \brief システムログの低レベル出力のための文字出力 | |
149 | + * \param c 出力キャラクタ | |
150 | + * \details | |
151 | + * コンソールに1文字出力する。 | |
152 | + */ | |
153 | +extern void chip_fput_log(char_t c); | |
154 | + | |
155 | + | |
156 | +#endif /* TOPPERS_MACRO_ONLY */ | |
157 | + | |
158 | +/* | |
159 | + * プロセッサ依存モジュール(ARM-M用) | |
160 | + */ | |
161 | +#include "arm_m_gcc/common/core_config.h" | |
162 | + | |
163 | +#endif /* TOPPERS_CHIP_CONFIG_H */ | |
164 | + | |
165 | +/** | |
166 | + * \} | |
167 | + */ | |
168 | + |
@@ -0,0 +1,115 @@ | ||
1 | +/* | |
2 | + * TOPPERS/ASP Kernel | |
3 | + * Toyohashi Open Platform for Embedded Real-Time Systems/ | |
4 | + * Advanced Standard Profile Kernel | |
5 | + * | |
6 | + * Copyright (C) 2007 by Embedded and Real-Time Systems Laboratory | |
7 | + * Graduate School of Information Science, Nagoya Univ., JAPAN | |
8 | + * Copyright (C) 2010 by TOPPERS/ASP for LPC project | |
9 | + * http://sourceforge.jp/projects/toppersasp4lpc/ | |
10 | + * | |
11 | + * | |
12 | + * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ | |
13 | + * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 | |
14 | + * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. | |
15 | + * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 | |
16 | + * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー | |
17 | + * スコード中に含まれていること. | |
18 | + * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 | |
19 | + * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 | |
20 | + * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 | |
21 | + * の無保証規定を掲載すること. | |
22 | + * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 | |
23 | + * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ | |
24 | + * と. | |
25 | + * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 | |
26 | + * 作権表示,この利用条件および下記の無保証規定を掲載すること. | |
27 | + * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに | |
28 | + * 報告すること. | |
29 | + * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 | |
30 | + * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. | |
31 | + * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 | |
32 | + * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを | |
33 | + * 免責すること. | |
34 | + * | |
35 | + * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お | |
36 | + * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 | |
37 | + * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ | |
38 | + * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ | |
39 | + * の責任を負わない. | |
40 | + * | |
41 | + */ | |
42 | +/** | |
43 | + * \addtogroup TOPPERS_CHIP | |
44 | + * \{ | |
45 | + */ | |
46 | + | |
47 | + | |
48 | +/** | |
49 | + * \file chip_kernel.h | |
50 | + * \brief kernel.hのターゲット依存部(NXP LPC17XX汎用) | |
51 | + * \details | |
52 | + * このインクルードファイルは,kernel.hでインクルードされる.他のファ | |
53 | + * イルから直接インクルードすることはない.このファイルをインクルード | |
54 | + * する前に,t_stddef.hがインクルードされるので,それらに依存してもよ | |
55 | + * い. | |
56 | + */ | |
57 | + | |
58 | +#ifndef TOPPERS_CHIP_KERNEL_H | |
59 | +#define TOPPERS_CHIP_KERNEL_H | |
60 | + | |
61 | +/** | |
62 | + * \brief 割込み優先度の最小値(最高値)。 | |
63 | + * \details | |
64 | + * SoC設計者によるCORTEX-M3のコンフィギュレーションに従った値を | |
65 | + * 指定する。 prc_user.txtによれば、CORTEX-M3においてはTMIN_INTPRIの値は | |
66 | + * \code | |
67 | + * -(2^(TBITW_IPRI)) + (2^TBITW_SUBIPRI)) 〜 -1 | |
68 | + * \endcode | |
69 | + * の範囲内にしなければならない。UM10360によれば、LPC1768は | |
70 | + * TBIW_IPRI = 5, TBITW_SUIPRI = 0となるため、上記範囲は | |
71 | + * \code | |
72 | + * -32 + 1 〜 -1 | |
73 | + * \endcode | |
74 | + * となる。そこで、lpc1700_gcc依存部では、TMIN_INTPRIを-31と定めている。 | |
75 | + * | |
76 | + */ | |
77 | +#define TMIN_INTPRI (-31) | |
78 | + | |
79 | +/** | |
80 | + * \brief サポートする機能の定義 | |
81 | + * \details | |
82 | + * get_utim()関数をアプリケーションに提供することを宣言する。 | |
83 | + */ | |
84 | +#define TOPPERS_SUPPORT_GET_UTM /* get_utmをサポートする */ | |
85 | + | |
86 | +/** | |
87 | + * \brief タイムティックの周期の分子 | |
88 | + * \details | |
89 | + * porting.txtの5章で要請されており、タイマーの割り込み周期から | |
90 | + * 1mSのシステム・タイマーを作るために宣言する。タイマーの割り込み | |
91 | + * 周期が1mSなら、1でいい。 | |
92 | + */ | |
93 | +#define TIC_NUME 1U | |
94 | + | |
95 | +/** | |
96 | + * \brief タイムティックの周期の分母 | |
97 | + * \details | |
98 | + * porting.txtの5章で要請されており、タイマーの割り込み周期から | |
99 | + * 1mSのシステム・タイマーを作るために宣言する。タイマーの割り込み | |
100 | + * 周期が1mSなら、1でいい。 | |
101 | + */ | |
102 | +#define TIC_DENO 1U | |
103 | + | |
104 | +/* | |
105 | + * プロセッサで共通な定義 | |
106 | + */ | |
107 | +#include "arm_m_gcc/common/core_kernel.h" | |
108 | + | |
109 | +#endif /* TOPPERS_CHIP_KERNEL_H */ | |
110 | + | |
111 | +/** | |
112 | + * \} | |
113 | + */ | |
114 | + | |
115 | + |
@@ -0,0 +1,6 @@ | ||
1 | +INCLUDE "arm_m_gcc/common/core" | |
2 | + | |
3 | +chip_initialize | |
4 | +initPLL0 | |
5 | +chip_exit | |
6 | +chip_fput_log | |
\ No newline at end of file |
@@ -0,0 +1,24 @@ | ||
1 | +/* This file is generated from chip_rename.def by genrename. */ | |
2 | + | |
3 | +#ifndef TOPPERS_CHIP_RENAME_H | |
4 | +#define TOPPERS_CHIP_RENAME_H | |
5 | + | |
6 | + | |
7 | +#define chip_initialize _kernel_chip_initialize | |
8 | +#define initPLL0 _kernel_initPLL0 | |
9 | +#define chip_exit _kernel_chip_exit | |
10 | +#define chip_fput_log _kernel_chip_fput_log | |
11 | + | |
12 | +#ifdef TOPPERS_LABEL_ASM | |
13 | + | |
14 | + | |
15 | +#define _chip_initialize __kernel_chip_initialize | |
16 | +#define _initPLL0 __kernel_initPLL0 | |
17 | +#define _chip_exit __kernel_chip_exit | |
18 | +#define _chip_fput_log __kernel_chip_fput_log | |
19 | + | |
20 | +#endif /* TOPPERS_LABEL_ASM */ | |
21 | + | |
22 | +#include "arm_m_gcc/common/core_rename.h" | |
23 | + | |
24 | +#endif /* TOPPERS_CHIP_RENAME_H */ |
@@ -0,0 +1,8 @@ | ||
1 | +/* | |
2 | + * SIOドライバ(UART汎用)のコンフィグレーションファイル | |
3 | + */ | |
4 | + | |
5 | +#include "target_serial.h" | |
6 | +ATT_INI({ TA_NULL, 0, sio_initialize }); | |
7 | +ATT_ISR({ TA_NULL, SIO_PORTID, INTNO_SIO, sio_isr, 1 }); | |
8 | +CFG_INT(INTNO_SIO, { TA_ENAINT|INTATR_SIO, INTPRI_SIO }); |
@@ -0,0 +1,82 @@ | ||
1 | +/* | |
2 | + * TOPPERS/ASP Kernel | |
3 | + * Toyohashi Open Platform for Embedded Real-Time Systems/ | |
4 | + * Advanced Standard Profile Kernel | |
5 | + * | |
6 | + * Copyright (C) 2007 by Embedded and Real-Time Systems Laboratory | |
7 | + * Graduate School of Information Science, Nagoya Univ., JAPAN | |
8 | + * Copyright (C) 2010 by TOPPERS/ASP for LPC project | |
9 | + * http://sourceforge.jp/projects/toppersasp4lpc/ | |
10 | + * | |
11 | + * | |
12 | + * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ | |
13 | + * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 | |
14 | + * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. | |
15 | + * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 | |
16 | + * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー | |
17 | + * スコード中に含まれていること. | |
18 | + * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 | |
19 | + * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 | |
20 | + * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 | |
21 | + * の無保証規定を掲載すること. | |
22 | + * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 | |
23 | + * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ | |
24 | + * と. | |
25 | + * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 | |
26 | + * 作権表示,この利用条件および下記の無保証規定を掲載すること. | |
27 | + * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに | |
28 | + * 報告すること. | |
29 | + * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 | |
30 | + * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. | |
31 | + * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 | |
32 | + * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを | |
33 | + * 免責すること. | |
34 | + * | |
35 | + * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お | |
36 | + * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 | |
37 | + * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ | |
38 | + * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ | |
39 | + * の責任を負わない. | |
40 | + * | |
41 | + */ | |
42 | + | |
43 | +/** | |
44 | + * \addtogroup TOPPERS_CHIP | |
45 | + * \{ | |
46 | + */ | |
47 | + | |
48 | +/** | |
49 | + * \file chip_serial.h | |
50 | + * \brief シリアルI/Oデバイス(SIO)ドライバ(UART汎用) | |
51 | + * \details | |
52 | + * このファイルはasp/pdic/uart/uart.hをそのまま読み込む。 | |
53 | + * それによって、あらかじめ用意されているuartドライバを使用する。 | |
54 | + */ | |
55 | + | |
56 | +#ifndef TOPPERS_CHIP_SERIAL_H | |
57 | +#define TOPPERS_CHIP_SERIAL_H | |
58 | + | |
59 | +#include "../../pdic/uart/uart.h" | |
60 | + | |
61 | +/** | |
62 | + * \brief 割込み優先度 | |
63 | + * \details | |
64 | + * UART割込みハンドラ登録のための定数。コンフィギュレータが静的コンフィギュレーション時に、シリアルポート登録用 | |
65 | + * 引数として使う。 | |
66 | + */ | |
67 | + | |
68 | +#define INTPRI_SIO -3 /* 割込み優先度 */ | |
69 | + | |
70 | +/** | |
71 | + * \brief 割込み優先度 | |
72 | + * \details | |
73 | + * UART割込みハンドラ登録のための定数。コンフィギュレータが静的コンフィギュレーション時に、シリアルポート登録用 | |
74 | + * 引数として使う。この値は0でかまわない。 | |
75 | + */ | |
76 | +#define INTATR_SIO 0 /* 割込み属性 */ | |
77 | + | |
78 | +#endif /* TOPPERS_CHIP_SERIAL_H */ | |
79 | +/** | |
80 | + * \} | |
81 | + */ | |
82 | + |
@@ -0,0 +1,88 @@ | ||
1 | +/* | |
2 | + * TOPPERS Software | |
3 | + * Toyohashi Open Platform for Embedded Real-Time Systems | |
4 | + * | |
5 | + * Copyright (C) 2007 by Embedded and Real-Time Systems Laboratory | |
6 | + * Graduate School of Information Science, Nagoya Univ., JAPAN | |
7 | + * Copyright (C) 2010 by TOPPERS/ASP for LPC project | |
8 | + * http://sourceforge.jp/projects/toppersasp4lpc/ | |
9 | + * | |
10 | + * | |
11 | + * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ | |
12 | + * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 | |
13 | + * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. | |
14 | + * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 | |
15 | + * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー | |
16 | + * スコード中に含まれていること. | |
17 | + * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 | |
18 | + * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 | |
19 | + * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 | |
20 | + * の無保証規定を掲載すること. | |
21 | + * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 | |
22 | + * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ | |
23 | + * と. | |
24 | + * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 | |
25 | + * 作権表示,この利用条件および下記の無保証規定を掲載すること. | |
26 | + * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに | |
27 | + * 報告すること. | |
28 | + * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 | |
29 | + * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. | |
30 | + * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 | |
31 | + * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを | |
32 | + * 免責すること. | |
33 | + * | |
34 | + * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お | |
35 | + * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 | |
36 | + * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ | |
37 | + * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ | |
38 | + * の責任を負わない. | |
39 | + * | |
40 | + */ | |
41 | +/** | |
42 | + * \addtogroup TOPPERS_CHIP | |
43 | + * \{ | |
44 | + */ | |
45 | + | |
46 | +/** | |
47 | + * \file chip_sil.h | |
48 | + * \brief sil.hのチップ依存部(NXP LPC17XX汎用) | |
49 | + * \details | |
50 | + * このインクルードファイルは,sil.hの先頭でインクルードされる.他のファ | |
51 | + * イルからは直接インクルードすることはない.このファイルをインクルー | |
52 | + * ドする前に,t_stddef.hがインクルードされるので,それらに依存しても | |
53 | + * よい. | |
54 | + */ | |
55 | + | |
56 | +#ifndef TOPPERS_CHIP_SIL_H | |
57 | +#define TOPPERS_CHIP_SIL_H | |
58 | + | |
59 | +/** | |
60 | + * \brief プロセッサのエンディアン宣言 | |
61 | + * \details | |
62 | + * プロセッサがリトル・エンディアンの場合には、このマクロを宣言する。 | |
63 | + * LPC17xxはリトル・エンディアンとして設計されている。 | |
64 | + */ | |
65 | +#define SIL_ENDIAN_LITTLE | |
66 | + | |
67 | +/** | |
68 | + * \brief リセット時のMSP設定 | |
69 | + * \details | |
70 | + * INIT_MSPを宣言すると、start.Sの中でリセット直後にMSPに初期値を代入する。 | |
71 | + * この操作はLPC1700においてRAM上でGDBからダウンロードしたソフトを実行する場合に必要になる。 | |
72 | + * | |
73 | + * デバッグ時に便利なので、ROM化、SRAM実行いずれの場合もメモリ量で困っていない限り、 | |
74 | + * INIT_MSPを宣言しておくとよい。 | |
75 | + */ | |
76 | + | |
77 | +#define INIT_MSP | |
78 | + | |
79 | +/* | |
80 | + * プロセッサで共通な定義 | |
81 | + */ | |
82 | +#include "arm_m_gcc/common/core_sil.h" | |
83 | + | |
84 | + | |
85 | +#endif /* TOPPERS_CHIP_SIL_H */ | |
86 | +/** | |
87 | + * \} | |
88 | + */ |
@@ -0,0 +1,94 @@ | ||
1 | +/* | |
2 | + * TOPPERS Software | |
3 | + * Toyohashi Open Platform for Embedded Real-Time Systems | |
4 | + * | |
5 | + * Copyright (C) 2007 by Embedded and Real-Time Systems Laboratory | |
6 | + * Graduate School of Information Science, Nagoya Univ., JAPAN | |
7 | + * Copyright (C) 2010 by TOPPERS/ASP for LPC project | |
8 | + * http://sourceforge.jp/projects/toppersasp4lpc/ | |
9 | + * | |
10 | + * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ | |
11 | + * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 | |
12 | + * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. | |
13 | + * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 | |
14 | + * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー | |
15 | + * スコード中に含まれていること. | |
16 | + * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 | |
17 | + * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 | |
18 | + * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 | |
19 | + * の無保証規定を掲載すること. | |
20 | + * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 | |
21 | + * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ | |
22 | + * と. | |
23 | + * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 | |
24 | + * 作権表示,この利用条件および下記の無保証規定を掲載すること. | |
25 | + * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに | |
26 | + * 報告すること. | |
27 | + * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 | |
28 | + * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. | |
29 | + * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 | |
30 | + * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを | |
31 | + * 免責すること. | |
32 | + * | |
33 | + * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お | |
34 | + * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 | |
35 | + * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ | |
36 | + * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ | |
37 | + * の責任を負わない. | |
38 | + * | |
39 | + */ | |
40 | +/** | |
41 | + * \addtogroup TOPPERS_CHIP | |
42 | + * \{ | |
43 | + */ | |
44 | + | |
45 | +/** | |
46 | + * \file chip_stddef.h | |
47 | + * \brief t_stddef.hのチップ依存部(NXP LPC17xx用) | |
48 | + * \details | |
49 | + * このインクルードファイルは,target_stddef.hの先頭でインクルードされる. | |
50 | + * 他のファイルからは直接インクルードすることはない.他のインクルード | |
51 | + * ファイルに先立って処理されるため,他のインクルードファイルに依存し | |
52 | + * てはならない. | |
53 | + */ | |
54 | + | |
55 | +#ifndef TOPPERS_CHIP_STDDEF_H | |
56 | +#define TOPPERS_CHIP_STDDEF_H | |
57 | + | |
58 | +/** | |
59 | + * \brief ターゲットを識別するためのマクロの定義 | |
60 | + * \details | |
61 | + * 各種のチップに対応可能なコードの中で、LPC17xxに依存する部分がある場合は | |
62 | + * このマクロによる条件コンパイルにする。 | |
63 | + * | |
64 | + * ターゲット依存部とはっきり区別するため、チップ依存部の識別名の前にTOPPERS_CHIP_を | |
65 | + * つけることを推奨する。 | |
66 | + */ | |
67 | +#define TOPPERS_CHIP_LPC17XX /* チップ略称 */ | |
68 | + | |
69 | + | |
70 | +/* | |
71 | + * 開発環境で共通な定義 | |
72 | + */ | |
73 | +#ifndef TOPPERS_MACRO_ONLY | |
74 | +#include "stdint.h" | |
75 | +#endif | |
76 | + | |
77 | +/** | |
78 | + * \brief 標準浮動小数点型を使う | |
79 | + * \details | |
80 | + * IEEE標準の浮動小数点型を使うことを宣言。version.txt参照 | |
81 | + */ | |
82 | +#define TOPPERS_STDFLOAT_TYPE1 | |
83 | +#include "gcc/tool_stddef.h" | |
84 | + | |
85 | +/* | |
86 | + * プロセッサで共通な定義 | |
87 | + */ | |
88 | +#include "arm_m_gcc/common/core_stddef.h" | |
89 | + | |
90 | +#endif /* TOPPERS_CHIP_STDDEF_H */ | |
91 | + | |
92 | +/** | |
93 | + * \} | |
94 | + */ |
@@ -0,0 +1,115 @@ | ||
1 | +/* | |
2 | + * TOPPERS/ASP Kernel | |
3 | + * Toyohashi Open Platform for Embedded Real-Time Systems/ | |
4 | + * Advanced Standard Profile Kernel | |
5 | + * | |
6 | + * Copyright (C) 2007 by Embedded and Real-Time Systems Laboratory | |
7 | + * Graduate School of Information Science, Nagoya Univ., JAPAN | |
8 | + * Copyright (C) 2010 by TOPPERS/ASP for LPC project | |
9 | + * http://sourceforge.jp/projects/toppersasp4lpc/ | |
10 | + * | |
11 | + * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ | |
12 | + * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 | |
13 | + * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. | |
14 | + * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 | |
15 | + * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー | |
16 | + * スコード中に含まれていること. | |
17 | + * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 | |
18 | + * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 | |
19 | + * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 | |
20 | + * の無保証規定を掲載すること. | |
21 | + * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 | |
22 | + * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ | |
23 | + * と. | |
24 | + * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 | |
25 | + * 作権表示,この利用条件および下記の無保証規定を掲載すること. | |
26 | + * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに | |
27 | + * 報告すること. | |
28 | + * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 | |
29 | + * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. | |
30 | + * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 | |
31 | + * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを | |
32 | + * 免責すること. | |
33 | + * | |
34 | + * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お | |
35 | + * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 | |
36 | + * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ | |
37 | + * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ | |
38 | + * の責任を負わない. | |
39 | + * | |
40 | + */ | |
41 | +/** | |
42 | + * \addtogroup TOPPERS_CHIP | |
43 | + * \{ | |
44 | + */ | |
45 | + | |
46 | + | |
47 | +/** | |
48 | + * \file chip_syssvc.h | |
49 | + * \brief システムサービスのチップ依存部(NXP LPC17xx用) | |
50 | + * \details | |
51 | + * システムサービスのターゲット依存部のインクルードファイル.このファ | |
52 | + * イルの内容は,コンポーネント記述ファイルに記述され,このファイルは | |
53 | + * 無くなる見込み. | |
54 | + */ | |
55 | + | |
56 | +#ifndef TOPPERS_CHIP_SYSSVC_H | |
57 | +#define TOPPERS_CHIP_SYSSVC_H | |
58 | + | |
59 | +/* | |
60 | + * ターゲットシステムのハードウェア資源の定義 | |
61 | + */ | |
62 | +#include "lpc1700.h" | |
63 | + | |
64 | +/* | |
65 | + * トレースログに関する設定 | |
66 | + */ | |
67 | +#ifdef TOPPERS_TRACE_ENABLE | |
68 | +#include "logtrace/trace_config.h" | |
69 | +#endif /* TOPPERS_TRACE_ENABLE */ | |
70 | + | |
71 | + | |
72 | +/** | |
73 | + * \brief 起動メッセージ | |
74 | + * \details | |
75 | + * 起動メッセージにチップ依存部の著作権表示を | |
76 | + * 追加するためのマクロ. | |
77 | + */ | |
78 | +#ifdef PRC_COPYRIGHT | |
79 | +#define CHIP_COPYRIGHT PRC_COPYRIGHT "Copyright (C) 2010 by TOPPERS/ASP for LPC project\n http://sourceforge.jp/projects/toppersasp4lpc/\n" | |
80 | +#else | |
81 | +#define CHIP_COPYRIGHT "Copyright (C) 2010 by TOPPERS/ASP for LPC project\n http://sourceforge.jp/projects/toppersasp4lpc/\n" | |
82 | +#endif /* CHIP_COPYRIGHT */ | |
83 | + | |
84 | + | |
85 | +/** | |
86 | + * \brief UARTへの入力クロック | |
87 | + * \details | |
88 | + * 内蔵UARTのクロック周波数を指定する。単位はHz。LPC17xxはそれぞれのUARTに対して | |
89 | + * 独立した周波数を入力できるが、今回の実装ではtarget_serial.cはすべてのUARTに | |
90 | + * 同じクロックが入力されれると仮定している。 | |
91 | + * | |
92 | + * この実装では、UART用のペリフェラル・クロックの分周比は1/4であり、これはリセット値である。 | |
93 | + */ | |
94 | +#define SIO_UART_CLOCK (SYS_CLOCK/4) | |
95 | + | |
96 | +#ifndef TOPPERS_MACRO_ONLY | |
97 | + | |
98 | +/** | |
99 | + * \brief システムログの低レベル出力のための文字出力 | |
100 | + * \details | |
101 | + * ターゲット依存の方法で,文字cを表示/出力/保存する.LPC17XXの実装では、 | |
102 | + * pdic/uartのポーリングによる出力ルーチンを呼ぶ。 | |
103 | + * | |
104 | + * このルーチンを呼ぶ前に、初期化として #target_uart_init()を一度呼ばなければ | |
105 | + * ならない。ターゲット依存部の#target_initialize()で呼ぶとよい。 | |
106 | + */ | |
107 | +extern void chip_fput_log(char_t c); | |
108 | + | |
109 | +#endif /* TOPPERS_MACRO_ONLY */ | |
110 | +#endif /* TOPPERS_CHIP_SYSSVC_H */ | |
111 | + | |
112 | +/** | |
113 | + * \} | |
114 | + */ | |
115 | + |
@@ -0,0 +1,66 @@ | ||
1 | +/* | |
2 | + * TOPPERS/ASP Kernel | |
3 | + * Toyohashi Open Platform for Embedded Real-Time Systems/ | |
4 | + * Advanced Standard Profile Kernel | |
5 | + * | |
6 | + * Copyright (C) 2007 by Embedded and Real-Time Systems Laboratory | |
7 | + * Graduate School of Information Science, Nagoya Univ., JAPAN | |
8 | + * Copyright (C) 2010 by TOPPERS/ASP for LPC project | |
9 | + * http://sourceforge.jp/projects/toppersasp4lpc/ | |
10 | + * | |
11 | + * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ | |
12 | + * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 | |
13 | + * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. | |
14 | + * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 | |
15 | + * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー | |
16 | + * スコード中に含まれていること. | |
17 | + * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 | |
18 | + * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 | |
19 | + * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 | |
20 | + * の無保証規定を掲載すること. | |
21 | + * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 | |
22 | + * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ | |
23 | + * と. | |
24 | + * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 | |
25 | + * 作権表示,この利用条件および下記の無保証規定を掲載すること. | |
26 | + * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに | |
27 | + * 報告すること. | |
28 | + * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 | |
29 | + * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. | |
30 | + * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 | |
31 | + * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを | |
32 | + * 免責すること. | |
33 | + * | |
34 | + * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お | |
35 | + * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 | |
36 | + * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ | |
37 | + * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ | |
38 | + * の責任を負わない. | |
39 | + * | |
40 | + */ | |
41 | +/** | |
42 | + * \addtogroup TOPPERS_CHIP | |
43 | + * \{ | |
44 | + */ | |
45 | + | |
46 | + | |
47 | +/** | |
48 | + * \file chip_test.h | |
49 | + * \brief テストプログラムのチップ依存定義(NXP LPC17xx用) | |
50 | + */ | |
51 | + | |
52 | +#ifndef TOPPERS_CHIP_TEST_H | |
53 | +#define TOPPERS_CHIP_TEST_H | |
54 | + | |
55 | + | |
56 | +/* | |
57 | + * プロセッサ依存モジュール(ARM-M用) | |
58 | + */ | |
59 | +#include "arm_m_gcc/common/core_test.h" | |
60 | + | |
61 | +#endif /* TOPPERS_CHIP_TEST_H */ | |
62 | + | |
63 | +/** | |
64 | + * \} | |
65 | + */ | |
66 | + |
@@ -0,0 +1,3 @@ | ||
1 | +#include "target_timer.h" | |
2 | + | |
3 | +INCLUDE("arm_m_gcc/common/core_timer.cfg"); |
@@ -0,0 +1,87 @@ | ||
1 | +/* | |
2 | + * TOPPERS/ASP Kernel | |
3 | + * Toyohashi Open Platform for Embedded Real-Time Systems/ | |
4 | + * Advanced Standard Profile Kernel | |
5 | + * | |
6 | + * Copyright (C) 2007 by Embedded and Real-Time Systems Laboratory | |
7 | + * Graduate School of Information Science, Nagoya Univ., JAPAN | |
8 | + * Copyright (C) 2010 by TOPPERS/ASP for LPC project | |
9 | + * http://sourceforge.jp/projects/toppersasp4lpc/ | |
10 | + * | |
11 | + * | |
12 | + * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ | |
13 | + * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 | |
14 | + * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. | |
15 | + * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 | |
16 | + * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー | |
17 | + * スコード中に含まれていること. | |
18 | + * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 | |
19 | + * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 | |
20 | + * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 | |
21 | + * の無保証規定を掲載すること. | |
22 | + * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 | |
23 | + * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ | |
24 | + * と. | |
25 | + * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 | |
26 | + * 作権表示,この利用条件および下記の無保証規定を掲載すること. | |
27 | + * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに | |
28 | + * 報告すること. | |
29 | + * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 | |
30 | + * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. | |
31 | + * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 | |
32 | + * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを | |
33 | + * 免責すること. | |
34 | + * | |
35 | + * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お | |
36 | + * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 | |
37 | + * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ | |
38 | + * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ | |
39 | + * の責任を負わない. | |
40 | + * | |
41 | + */ | |
42 | +/** | |
43 | + * \addtogroup TOPPERS_CHIP | |
44 | + * \{ | |
45 | + */ | |
46 | + | |
47 | +/** | |
48 | + * \file chip_timer.h | |
49 | + * \brief タイマドライバ(NXP LPC17XX汎用) | |
50 | + */ | |
51 | + | |
52 | +#ifndef TOPPERS_CHIP_TIMER_H | |
53 | +#define TOPPERS_CHIP_TIMER_H | |
54 | + | |
55 | +#include "target_syssvc.h" | |
56 | + | |
57 | +/** | |
58 | + * \brief CPUコアクロックとタイマー割り込み周期の比 | |
59 | + */ | |
60 | +#define TIMER_CLOCK (SYS_CLOCK / 1000) | |
61 | + | |
62 | +/** | |
63 | + * \brief 割込み優先度 | |
64 | + * \details | |
65 | + * タイマ割込みハンドラ登録のための定数。コンフィギュレータが静的コンフィギュレーション時に、タイマー登録用 | |
66 | + * 引数として使う。 | |
67 | + */ | |
68 | +#define INTPRI_TIMER (-6) | |
69 | + | |
70 | +/** | |
71 | + * \brief 割込み属性 | |
72 | + * \details | |
73 | + * タイマ割込みハンドラ登録のための定数。コンフィギュレータが静的コンフィギュレーション時に、タイマー登録用 | |
74 | + * 引数として使う。この値は0でいい。 | |
75 | + */ | |
76 | +#define INTATR_TIMER 0U | |
77 | + | |
78 | +/* | |
79 | + * プロセッサ依存部で定義する | |
80 | + */ | |
81 | +#include "arm_m_gcc/common/core_timer.h" | |
82 | + | |
83 | +#endif /* TOPPERS_CHIP_TIMER_H */ | |
84 | + | |
85 | +/** | |
86 | + * \} | |
87 | + */ |
@@ -0,0 +1,25 @@ | ||
1 | +/* This file is generated from chip_rename.def by genrename. */ | |
2 | + | |
3 | +/* This file is included only when chip_rename.h has been included. */ | |
4 | +#ifdef TOPPERS_CHIP_RENAME_H | |
5 | +#undef TOPPERS_CHIP_RENAME_H | |
6 | + | |
7 | + | |
8 | +#undef chip_initialize | |
9 | +#undef initPLL0 | |
10 | +#undef chip_exit | |
11 | +#undef chip_fput_log | |
12 | + | |
13 | +#ifdef TOPPERS_LABEL_ASM | |
14 | + | |
15 | + | |
16 | +#undef _chip_initialize | |
17 | +#undef _initPLL0 | |
18 | +#undef _chip_exit | |
19 | +#undef _chip_fput_log | |
20 | + | |
21 | +#endif /* TOPPERS_LABEL_ASM */ | |
22 | + | |
23 | +#include "arm_m_gcc/common/core_unrename.h" | |
24 | + | |
25 | +#endif /* TOPPERS_CHIP_RENAME_H */ |
@@ -0,0 +1,175 @@ | ||
1 | +===================================================================== | |
2 | + CHIP_LPC17XXチップ依存部 (asp-1.6.0対応) | |
3 | + Last Modified: 2010/Oct/23 | |
4 | +===================================================================== | |
5 | + | |
6 | +このチップ依存部は、TOPPERS/ASP 1.3.2対応 CQ-STARM依存部を元に開発した。 | |
7 | + | |
8 | +(1) 対応しているターゲットシステムの種類・構成,バージョン番号 | |
9 | + | |
10 | + ・ターゲットハードウェア(ボード等)の名称と対応している構成 | |
11 | + NXP製LPC17シリーズに共有のチップ依存部 | |
12 | + | |
13 | + ・ターゲット略称 | |
14 | + lpc17xx_gcc | |
15 | + | |
16 | + ・ターゲット非依存部のバージョン番号 | |
17 | + 1.6 | |
18 | + | |
19 | + ・プロセッサ,チップ,開発環境依存部の構成とバージョン番号 | |
20 | + 1.6.1 | |
21 | + | |
22 | + ・使用するPDICとバージョン番号 | |
23 | + ターゲットに選択は任せてあるが、標準でpdic/uartを用意している。 | |
24 | + | |
25 | +(2) 使用する開発環境と動作検証した条件(バージョン,オプション等) | |
26 | + | |
27 | + ・言語処理系(コンパイラ,アセンブラ,リンカ等) | |
28 | + gcc version 4.4.1 (Sourcery G++ Lite 2010q1-188) | |
29 | + | |
30 | + ・デバッグ環境 | |
31 | + GNU gdb (Sourcery G++ Lite 2010q1-188) 7.0.50.20100218-cvs | |
32 | + Open On-Chip Debugger 0.4.0 (2010-08-12-22:40) | |
33 | + HJ/LINK USB | |
34 | + | |
35 | +(3) ターゲット定義事項の規定 | |
36 | +(3-1) データ型に関する規定 | |
37 | +(3-2) 割込み処理に関する規定 | |
38 | + | |
39 | + TMIN_INTPRIは -31 である。詳細は chip_kernel.hを参照。 | |
40 | + | |
41 | + | |
42 | + 以下の割り込みベクトル用インデックスを使用している。INHNO_XXXおよびINTNO_XXXも同じ値を持つ。 | |
43 | + | |
44 | +#define IRQ_VECTOR_WDT (16+WDT_IRQn) | |
45 | +#define IRQ_VECTOR_TIMER0 (16+TIMER0_IRQn) | |
46 | +#define IRQ_VECTOR_TIMER1 (16+TIMER1_IRQn) | |
47 | +#define IRQ_VECTOR_TIMER2 (16+TIMER2_IRQn) | |
48 | +#define IRQ_VECTOR_TIMER3 (16+TIMER3_IRQn) | |
49 | +#define IRQ_VECTOR_UART0 (16+UART0_IRQn) | |
50 | +#define IRQ_VECTOR_UART1 (16+UART1_IRQn) | |
51 | +#define IRQ_VECTOR_UART2 (16+UART2_IRQn) | |
52 | +#define IRQ_VECTOR_UART3 (16+UART3_IRQn) | |
53 | +#define IRQ_VECTOR_PWM1 (16+PWM1_IRQn) | |
54 | +#define IRQ_VECTOR_I2C0 (16+I2C0_IRQn) | |
55 | +#define IRQ_VECTOR_I2C1 (16+I2C1_IRQn) | |
56 | +#define IRQ_VECTOR_I2C2 (16+I2C2_IRQn) | |
57 | +#define IRQ_VECTOR_SPI (16+SPI_IRQn) | |
58 | +#define IRQ_VECTOR_SSP0 (16+SSP0_IRQn) | |
59 | +#define IRQ_VECTOR_SSP1 (16+SSP1_IRQn) | |
60 | +#define IRQ_VECTOR_PLL0 (16+PLL0_IRQn) | |
61 | +#define IRQ_VECTOR_RTC (16+RTC_IRQn) | |
62 | +#define IRQ_VECTOR_EINT0 (16+EINT0_IRQn) | |
63 | +#define IRQ_VECTOR_EINT1 (16+EINT1_IRQn) | |
64 | +#define IRQ_VECTOR_EINT2 (16+EINT2_IRQn) | |
65 | +#define IRQ_VECTOR_EINT3 (16+EINT3_IRQn) | |
66 | +#define IRQ_VECTOR_ADC (16+ADC_IRQn) | |
67 | +#define IRQ_VECTOR_BOD (16+BOD_IRQn) | |
68 | +#define IRQ_VECTOR_USB (16+USB_IRQn) | |
69 | +#define IRQ_VECTOR_CAN (16+CAN_IRQn) | |
70 | +#define IRQ_VECTOR_DMA (16+DMA_IRQn) | |
71 | +#define IRQ_VECTOR_I2S (16+I2S_IRQn) | |
72 | +#define IRQ_VECTOR_ENET (16+ENET_IRQn) | |
73 | +#define IRQ_VECTOR_RIT (16+RIT_IRQn) | |
74 | +#define IRQ_VECTOR_MCPWM (16+MCPWM_IRQn) | |
75 | +#define IRQ_VECTOR_QEI (16+QEI_IRQn) | |
76 | +#define IRQ_VECTOR_PLL1 (16+PLL1_IRQn) | |
77 | +#define IRQ_VECTOR_USBActivity (16+USBActivity_IRQn) | |
78 | +#define IRQ_VECTOR_CANActivity (16+CANActivity_IRQn) | |
79 | + | |
80 | +(3-3) カーネル管理外の割込みに関する規定 | |
81 | +(3-4) CPU例外処理に関する規定 | |
82 | +(3-5) 性能評価用システム時刻の参照に関する規定 | |
83 | +(3-6) オーバランハンドラ機能拡張のサポートに関する規定 | |
84 | +(3-7) その他 | |
85 | + | |
86 | +(4) カーネルの起動/終了処理に関する情報 | |
87 | + ・用意しているスタートアップモジュールの処理内容 | |
88 | + chip_initialize()では、prc_initialize()を呼び出してプロセッサを初期化する。 | |
89 | + | |
90 | + ・hardware_init_hook | |
91 | + SCB_CCR_STKALIGN_Mskをクリアして、例外割り込みのアライメントをCORETX-M3 rev 1に | |
92 | + あわせている。 | |
93 | + | |
94 | + ・カーネルを終了した後の振舞い | |
95 | + chip_exit()はprc_terminate()を呼ぶ。 | |
96 | + | |
97 | + | |
98 | +(5) メモリマップ | |
99 | + ターゲット依存部で決定するので、チップ依存部はメモリマップを操作しない。 | |
100 | + | |
101 | +(6) タイマドライバ関連の情報 | |
102 | + | |
103 | + ・タイムティックの周期,その変更方法 | |
104 | + タイムティックはchip_timer.hによって変更できる。周期を変更した場合、 | |
105 | + chip_kernel.hのTIC_NUME, TIC_DENOを変更して1mSを生成する方法をカーネルに知らせる。 | |
106 | + | |
107 | + ・使用するリソース(タイマ) | |
108 | + SYSTICKタイマーを使う。 | |
109 | + | |
110 | + ・タイマ割込みの割込み優先度の変更方法 | |
111 | + chip_timer.hのINTPRI_TIMERを変更する。 | |
112 | + | |
113 | + ・オーバランタイマ割込みの割込み優先度の変更方法 | |
114 | + | |
115 | +(7) シリアルインタフェースドライバの情報 | |
116 | + | |
117 | + target_user.txtを参照。 | |
118 | + | |
119 | +(8) システムログ機能の情報 | |
120 | + | |
121 | + ・システムログの低レベル出力の実現方法 | |
122 | + target_config.hのtarget_fput_log()が使用できるよう、chip_fput_log()を用意している。 | |
123 | + | |
124 | +(9) システム構築手順 | |
125 | + | |
126 | + target_user.txt参照 | |
127 | + | |
128 | +(10) ターゲットシステム固有の注意事項 | |
129 | + | |
130 | +(10) 類似のターゲットにポーティングする開発者向けの参考情報 | |
131 | + CORTEX-M3を使った他のチップにポーティングする場合には、以下のオブジェクトを修正する | |
132 | + | |
133 | + lpc17xx.h (名前をチップ識別名に変更する) | |
134 | + CMSIS インクルードするCMSISヘッダファイルを変更する | |
135 | + TMAX_INTNO 最大の割り込みインデックス番号 | |
136 | + TBITW_IPRI NVICの割り込み優先順位のビット幅 | |
137 | + TBITW_SUBIPRI NVICのサブプライオリティのビット幅 | |
138 | + 割り込みベクトル番号 チップに沿った宣言に変更する。 | |
139 | + | |
140 | + chip_config.h | |
141 | + initPLL0() PLL初期化シーケンスはチップ依存である | |
142 | + | |
143 | + target_config.c | |
144 | + chip_initilaize() 初期火事にチップ依存の特殊処理が必要なら変更する | |
145 | + chip_exit() 終了時にチップ依存の特殊処理が必要なら変更する | |
146 | + chip_fput_log() 使用するSIOドライバが変わるなら変更する | |
147 | + initPLL0() PLL初期化シーケンスはチップ依存である | |
148 | + hardware_init_hook チップに強く依存するので必ず変更する | |
149 | + | |
150 | + chip_stddef.h | |
151 | + TOPPERS_CHIP_LPC17XX ターゲット識別マクロ。ターゲット識別名を大文字にし、頭に | |
152 | + TOPPERS_CHIP_をつける。 | |
153 | + | |
154 | + chip_syssvc.h | |
155 | + SIO_UART_CLOCK pdc/uartを使用する場合、UARTに入力されるクロックの周波数を宣言する | |
156 | + CHIP_COPYRIGHT チップ依存部の著作権表示文字列 | |
157 | + | |
158 | + chip_timer.h | |
159 | + TIMER_CLOCK CPUクロックとタイマー周期の比 | |
160 | + | |
161 | + LPC1700では、SYS_CLOCKを「CPUコアへの入力」としているが、チップによっては「PLLの出力」とする | |
162 | + ほうがよい。 | |
163 | + | |
164 | +(12) ディレクトリ構成・ファイル構成 | |
165 | + target_user.txtを参照。 | |
166 | + | |
167 | +(13) バージョン履歴 | |
168 | + | |
169 | +2010/Oct/23 | |
170 | + ver 1.6.0 | |
171 | + | |
172 | + | |
173 | + | |
174 | + | |
175 | + |
@@ -0,0 +1,1038 @@ | ||
1 | +/**************************************************************************//** | |
2 | + * @file LPC17xx.h | |
3 | + * @brief CMSIS Cortex-M3 Core Peripheral Access Layer Header File for | |
4 | + * NXP LPC17xx Device Series | |
5 | + * @version V1.07 | |
6 | + * @date 19. October 2009 | |
7 | + * | |
8 | + * @note | |
9 | + * Copyright (C) 2009 ARM Limited. All rights reserved. | |
10 | + * | |
11 | + * @par | |
12 | + * ARM Limited (ARM) is supplying this software for use with Cortex-M | |
13 | + * processor based microcontrollers. This file can be freely distributed | |
14 | + * within development tools that are supporting such ARM based processors. | |
15 | + * | |
16 | + * @par | |
17 | + * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED | |
18 | + * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF | |
19 | + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. | |
20 | + * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR | |
21 | + * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. | |
22 | + * | |
23 | + ******************************************************************************/ | |
24 | + | |
25 | + | |
26 | +#ifndef __LPC17xx_H__ | |
27 | +#define __LPC17xx_H__ | |
28 | + | |
29 | +/* | |
30 | + * ========================================================================== | |
31 | + * ---------- Interrupt Number Definition ----------------------------------- | |
32 | + * ========================================================================== | |
33 | + */ | |
34 | + | |
35 | +typedef enum IRQn | |
36 | +{ | |
37 | +/****** Cortex-M3 Processor Exceptions Numbers ***************************************************/ | |
38 | + NonMaskableInt_IRQn = -14, /*!< 2 Non Maskable Interrupt */ | |
39 | + MemoryManagement_IRQn = -12, /*!< 4 Cortex-M3 Memory Management Interrupt */ | |
40 | + BusFault_IRQn = -11, /*!< 5 Cortex-M3 Bus Fault Interrupt */ | |
41 | + UsageFault_IRQn = -10, /*!< 6 Cortex-M3 Usage Fault Interrupt */ | |
42 | + SVCall_IRQn = -5, /*!< 11 Cortex-M3 SV Call Interrupt */ | |
43 | + DebugMonitor_IRQn = -4, /*!< 12 Cortex-M3 Debug Monitor Interrupt */ | |
44 | + PendSV_IRQn = -2, /*!< 14 Cortex-M3 Pend SV Interrupt */ | |
45 | + SysTick_IRQn = -1, /*!< 15 Cortex-M3 System Tick Interrupt */ | |
46 | + | |
47 | +/****** LPC17xx Specific Interrupt Numbers *******************************************************/ | |
48 | + WDT_IRQn = 0, /*!< Watchdog Timer Interrupt */ | |
49 | + TIMER0_IRQn = 1, /*!< Timer0 Interrupt */ | |
50 | + TIMER1_IRQn = 2, /*!< Timer1 Interrupt */ | |
51 | + TIMER2_IRQn = 3, /*!< Timer2 Interrupt */ | |
52 | + TIMER3_IRQn = 4, /*!< Timer3 Interrupt */ | |
53 | + UART0_IRQn = 5, /*!< UART0 Interrupt */ | |
54 | + UART1_IRQn = 6, /*!< UART1 Interrupt */ | |
55 | + UART2_IRQn = 7, /*!< UART2 Interrupt */ | |
56 | + UART3_IRQn = 8, /*!< UART3 Interrupt */ | |
57 | + PWM1_IRQn = 9, /*!< PWM1 Interrupt */ | |
58 | + I2C0_IRQn = 10, /*!< I2C0 Interrupt */ | |
59 | + I2C1_IRQn = 11, /*!< I2C1 Interrupt */ | |
60 | + I2C2_IRQn = 12, /*!< I2C2 Interrupt */ | |
61 | + SPI_IRQn = 13, /*!< SPI Interrupt */ | |
62 | + SSP0_IRQn = 14, /*!< SSP0 Interrupt */ | |
63 | + SSP1_IRQn = 15, /*!< SSP1 Interrupt */ | |
64 | + PLL0_IRQn = 16, /*!< PLL0 Lock (Main PLL) Interrupt */ | |
65 | + RTC_IRQn = 17, /*!< Real Time Clock Interrupt */ | |
66 | + EINT0_IRQn = 18, /*!< External Interrupt 0 Interrupt */ | |
67 | + EINT1_IRQn = 19, /*!< External Interrupt 1 Interrupt */ | |
68 | + EINT2_IRQn = 20, /*!< External Interrupt 2 Interrupt */ | |
69 | + EINT3_IRQn = 21, /*!< External Interrupt 3 Interrupt */ | |
70 | + ADC_IRQn = 22, /*!< A/D Converter Interrupt */ | |
71 | + BOD_IRQn = 23, /*!< Brown-Out Detect Interrupt */ | |
72 | + USB_IRQn = 24, /*!< USB Interrupt */ | |
73 | + CAN_IRQn = 25, /*!< CAN Interrupt */ | |
74 | + DMA_IRQn = 26, /*!< General Purpose DMA Interrupt */ | |
75 | + I2S_IRQn = 27, /*!< I2S Interrupt */ | |
76 | + ENET_IRQn = 28, /*!< Ethernet Interrupt */ | |
77 | + RIT_IRQn = 29, /*!< Repetitive Interrupt Timer Interrupt */ | |
78 | + MCPWM_IRQn = 30, /*!< Motor Control PWM Interrupt */ | |
79 | + QEI_IRQn = 31, /*!< Quadrature Encoder Interface Interrupt */ | |
80 | + PLL1_IRQn = 32, /*!< PLL1 Lock (USB PLL) Interrupt */ | |
81 | + USBActivity_IRQn = 33, /*!< USB Activity Interrupt */ | |
82 | + CANActivity_IRQn = 34, /*!< CAN Activity Interrupt */ | |
83 | +} IRQn_Type; | |
84 | + | |
85 | + | |
86 | +/* | |
87 | + * ========================================================================== | |
88 | + * ----------- Processor and Core Peripheral Section ------------------------ | |
89 | + * ========================================================================== | |
90 | + */ | |
91 | + | |
92 | +/* Configuration of the Cortex-M3 Processor and Core Peripherals */ | |
93 | +#define __MPU_PRESENT 1 /*!< MPU present or not */ | |
94 | +#define __NVIC_PRIO_BITS 5 /*!< Number of Bits used for Priority Levels */ | |
95 | +#define __Vendor_SysTickConfig 0 /*!< Set to 1 if different SysTick Config is used */ | |
96 | + | |
97 | + | |
98 | +#include "core_cm3.h" /* Cortex-M3 processor and core peripherals */ | |
99 | +#include "system_LPC17xx.h" /* System Header */ | |
100 | + | |
101 | + | |
102 | +/******************************************************************************/ | |
103 | +/* Device Specific Peripheral registers structures */ | |
104 | +/******************************************************************************/ | |
105 | + | |
106 | +#if defined ( __CC_ARM ) | |
107 | +#pragma anon_unions | |
108 | +#endif | |
109 | + | |
110 | +/*------------- System Control (SC) ------------------------------------------*/ | |
111 | +typedef struct | |
112 | +{ | |
113 | + __IO uint32_t FLASHCFG; /* Flash Accelerator Module */ | |
114 | + uint32_t RESERVED0[31]; | |
115 | + __IO uint32_t PLL0CON; /* Clocking and Power Control */ | |
116 | + __IO uint32_t PLL0CFG; | |
117 | + __I uint32_t PLL0STAT; | |
118 | + __O uint32_t PLL0FEED; | |
119 | + uint32_t RESERVED1[4]; | |
120 | + __IO uint32_t PLL1CON; | |
121 | + __IO uint32_t PLL1CFG; | |
122 | + __I uint32_t PLL1STAT; | |
123 | + __O uint32_t PLL1FEED; | |
124 | + uint32_t RESERVED2[4]; | |
125 | + __IO uint32_t PCON; | |
126 | + __IO uint32_t PCONP; | |
127 | + uint32_t RESERVED3[15]; | |
128 | + __IO uint32_t CCLKCFG; | |
129 | + __IO uint32_t USBCLKCFG; | |
130 | + __IO uint32_t CLKSRCSEL; | |
131 | + uint32_t RESERVED4[12]; | |
132 | + __IO uint32_t EXTINT; /* External Interrupts */ | |
133 | + uint32_t RESERVED5; | |
134 | + __IO uint32_t EXTMODE; | |
135 | + __IO uint32_t EXTPOLAR; | |
136 | + uint32_t RESERVED6[12]; | |
137 | + __IO uint32_t RSID; /* Reset */ | |
138 | + uint32_t RESERVED7[7]; | |
139 | + __IO uint32_t SCS; /* Syscon Miscellaneous Registers */ | |
140 | + __IO uint32_t IRCTRIM; /* Clock Dividers */ | |
141 | + __IO uint32_t PCLKSEL0; | |
142 | + __IO uint32_t PCLKSEL1; | |
143 | + uint32_t RESERVED8[4]; | |
144 | + __IO uint32_t USBIntSt; /* USB Device/OTG Interrupt Register */ | |
145 | + __IO uint32_t DMAREQSEL; | |
146 | + __IO uint32_t CLKOUTCFG; /* Clock Output Configuration */ | |
147 | + } LPC_SC_TypeDef; | |
148 | + | |
149 | +/*------------- Pin Connect Block (PINCON) -----------------------------------*/ | |
150 | +typedef struct | |
151 | +{ | |
152 | + __IO uint32_t PINSEL0; | |
153 | + __IO uint32_t PINSEL1; | |
154 | + __IO uint32_t PINSEL2; | |
155 | + __IO uint32_t PINSEL3; | |
156 | + __IO uint32_t PINSEL4; | |
157 | + __IO uint32_t PINSEL5; | |
158 | + __IO uint32_t PINSEL6; | |
159 | + __IO uint32_t PINSEL7; | |
160 | + __IO uint32_t PINSEL8; | |
161 | + __IO uint32_t PINSEL9; | |
162 | + __IO uint32_t PINSEL10; | |
163 | + uint32_t RESERVED0[5]; | |
164 | + __IO uint32_t PINMODE0; | |
165 | + __IO uint32_t PINMODE1; | |
166 | + __IO uint32_t PINMODE2; | |
167 | + __IO uint32_t PINMODE3; | |
168 | + __IO uint32_t PINMODE4; | |
169 | + __IO uint32_t PINMODE5; | |
170 | + __IO uint32_t PINMODE6; | |
171 | + __IO uint32_t PINMODE7; | |
172 | + __IO uint32_t PINMODE8; | |
173 | + __IO uint32_t PINMODE9; | |
174 | + __IO uint32_t PINMODE_OD0; | |
175 | + __IO uint32_t PINMODE_OD1; | |
176 | + __IO uint32_t PINMODE_OD2; | |
177 | + __IO uint32_t PINMODE_OD3; | |
178 | + __IO uint32_t PINMODE_OD4; | |
179 | + __IO uint32_t I2CPADCFG; | |
180 | +} LPC_PINCON_TypeDef; | |
181 | + | |
182 | +/*------------- General Purpose Input/Output (GPIO) --------------------------*/ | |
183 | +typedef struct | |
184 | +{ | |
185 | + union { | |
186 | + __IO uint32_t FIODIR; | |
187 | + struct { | |
188 | + __IO uint16_t FIODIRL; | |
189 | + __IO uint16_t FIODIRH; | |
190 | + }; | |
191 | + struct { | |
192 | + __IO uint8_t FIODIR0; | |
193 | + __IO uint8_t FIODIR1; | |
194 | + __IO uint8_t FIODIR2; | |
195 | + __IO uint8_t FIODIR3; | |
196 | + }; | |
197 | + }; | |
198 | + uint32_t RESERVED0[3]; | |
199 | + union { | |
200 | + __IO uint32_t FIOMASK; | |
201 | + struct { | |
202 | + __IO uint16_t FIOMASKL; | |
203 | + __IO uint16_t FIOMASKH; | |
204 | + }; | |
205 | + struct { | |
206 | + __IO uint8_t FIOMASK0; | |
207 | + __IO uint8_t FIOMASK1; | |
208 | + __IO uint8_t FIOMASK2; | |
209 | + __IO uint8_t FIOMASK3; | |
210 | + }; | |
211 | + }; | |
212 | + union { | |
213 | + __IO uint32_t FIOPIN; | |
214 | + struct { | |
215 | + __IO uint16_t FIOPINL; | |
216 | + __IO uint16_t FIOPINH; | |
217 | + }; | |
218 | + struct { | |
219 | + __IO uint8_t FIOPIN0; | |
220 | + __IO uint8_t FIOPIN1; | |
221 | + __IO uint8_t FIOPIN2; | |
222 | + __IO uint8_t FIOPIN3; | |
223 | + }; | |
224 | + }; | |
225 | + union { | |
226 | + __IO uint32_t FIOSET; | |
227 | + struct { | |
228 | + __IO uint16_t FIOSETL; | |
229 | + __IO uint16_t FIOSETH; | |
230 | + }; | |
231 | + struct { | |
232 | + __IO uint8_t FIOSET0; | |
233 | + __IO uint8_t FIOSET1; | |
234 | + __IO uint8_t FIOSET2; | |
235 | + __IO uint8_t FIOSET3; | |
236 | + }; | |
237 | + }; | |
238 | + union { | |
239 | + __O uint32_t FIOCLR; | |
240 | + struct { | |
241 | + __O uint16_t FIOCLRL; | |
242 | + __O uint16_t FIOCLRH; | |
243 | + }; | |
244 | + struct { | |
245 | + __O uint8_t FIOCLR0; | |
246 | + __O uint8_t FIOCLR1; | |
247 | + __O uint8_t FIOCLR2; | |
248 | + __O uint8_t FIOCLR3; | |
249 | + }; | |
250 | + }; | |
251 | +} LPC_GPIO_TypeDef; | |
252 | + | |
253 | +typedef struct | |
254 | +{ | |
255 | + __I uint32_t IntStatus; | |
256 | + __I uint32_t IO0IntStatR; | |
257 | + __I uint32_t IO0IntStatF; | |
258 | + __O uint32_t IO0IntClr; | |
259 | + __IO uint32_t IO0IntEnR; | |
260 | + __IO uint32_t IO0IntEnF; | |
261 | + uint32_t RESERVED0[3]; | |
262 | + __I uint32_t IO2IntStatR; | |
263 | + __I uint32_t IO2IntStatF; | |
264 | + __O uint32_t IO2IntClr; | |
265 | + __IO uint32_t IO2IntEnR; | |
266 | + __IO uint32_t IO2IntEnF; | |
267 | +} LPC_GPIOINT_TypeDef; | |
268 | + | |
269 | +/*------------- Timer (TIM) --------------------------------------------------*/ | |
270 | +typedef struct | |
271 | +{ | |
272 | + __IO uint32_t IR; | |
273 | + __IO uint32_t TCR; | |
274 | + __IO uint32_t TC; | |
275 | + __IO uint32_t PR; | |
276 | + __IO uint32_t PC; | |
277 | + __IO uint32_t MCR; | |
278 | + __IO uint32_t MR0; | |
279 | + __IO uint32_t MR1; | |
280 | + __IO uint32_t MR2; | |
281 | + __IO uint32_t MR3; | |
282 | + __IO uint32_t CCR; | |
283 | + __I uint32_t CR0; | |
284 | + __I uint32_t CR1; | |
285 | + uint32_t RESERVED0[2]; | |
286 | + __IO uint32_t EMR; | |
287 | + uint32_t RESERVED1[12]; | |
288 | + __IO uint32_t CTCR; | |
289 | +} LPC_TIM_TypeDef; | |
290 | + | |
291 | +/*------------- Pulse-Width Modulation (PWM) ---------------------------------*/ | |
292 | +typedef struct | |
293 | +{ | |
294 | + __IO uint32_t IR; | |
295 | + __IO uint32_t TCR; | |
296 | + __IO uint32_t TC; | |
297 | + __IO uint32_t PR; | |
298 | + __IO uint32_t PC; | |
299 | + __IO uint32_t MCR; | |
300 | + __IO uint32_t MR0; | |
301 | + __IO uint32_t MR1; | |
302 | + __IO uint32_t MR2; | |
303 | + __IO uint32_t MR3; | |
304 | + __IO uint32_t CCR; | |
305 | + __I uint32_t CR0; | |
306 | + __I uint32_t CR1; | |
307 | + __I uint32_t CR2; | |
308 | + __I uint32_t CR3; | |
309 | + uint32_t RESERVED0; | |
310 | + __IO uint32_t MR4; | |
311 | + __IO uint32_t MR5; | |
312 | + __IO uint32_t MR6; | |
313 | + __IO uint32_t PCR; | |
314 | + __IO uint32_t LER; | |
315 | + uint32_t RESERVED1[7]; | |
316 | + __IO uint32_t CTCR; | |
317 | +} LPC_PWM_TypeDef; | |
318 | + | |
319 | +/*------------- Universal Asynchronous Receiver Transmitter (UART) -----------*/ | |
320 | +typedef struct | |
321 | +{ | |
322 | + union { | |
323 | + __I uint8_t RBR; | |
324 | + __O uint8_t THR; | |
325 | + __IO uint8_t DLL; | |
326 | + uint32_t RESERVED0; | |
327 | + }; | |
328 | + union { | |
329 | + __IO uint8_t DLM; | |
330 | + __IO uint32_t IER; | |
331 | + }; | |
332 | + union { | |
333 | + __I uint32_t IIR; | |
334 | + __O uint8_t FCR; | |
335 | + }; | |
336 | + __IO uint8_t LCR; | |
337 | + uint8_t RESERVED1[7]; | |
338 | + __I uint8_t LSR; | |
339 | + uint8_t RESERVED2[7]; | |
340 | + __IO uint8_t SCR; | |
341 | + uint8_t RESERVED3[3]; | |
342 | + __IO uint32_t ACR; | |
343 | + __IO uint8_t ICR; | |
344 | + uint8_t RESERVED4[3]; | |
345 | + __IO uint8_t FDR; | |
346 | + uint8_t RESERVED5[7]; | |
347 | + __IO uint8_t TER; | |
348 | + uint8_t RESERVED6[39]; | |
349 | + __I uint8_t FIFOLVL; | |
350 | +} LPC_UART_TypeDef; | |
351 | + | |
352 | +typedef struct | |
353 | +{ | |
354 | + union { | |
355 | + __I uint8_t RBR; | |
356 | + __O uint8_t THR; | |
357 | + __IO uint8_t DLL; | |
358 | + uint32_t RESERVED0; | |
359 | + }; | |
360 | + union { | |
361 | + __IO uint8_t DLM; | |
362 | + __IO uint32_t IER; | |
363 | + }; | |
364 | + union { | |
365 | + __I uint32_t IIR; | |
366 | + __O uint8_t FCR; | |
367 | + }; | |
368 | + __IO uint8_t LCR; | |
369 | + uint8_t RESERVED1[7]; | |
370 | + __I uint8_t LSR; | |
371 | + uint8_t RESERVED2[7]; | |
372 | + __IO uint8_t SCR; | |
373 | + uint8_t RESERVED3[3]; | |
374 | + __IO uint32_t ACR; | |
375 | + __IO uint8_t ICR; | |
376 | + uint8_t RESERVED4[3]; | |
377 | + __IO uint8_t FDR; | |
378 | + uint8_t RESERVED5[7]; | |
379 | + __IO uint8_t TER; | |
380 | + uint8_t RESERVED6[39]; | |
381 | + __I uint8_t FIFOLVL; | |
382 | +} LPC_UART0_TypeDef; | |
383 | + | |
384 | +typedef struct | |
385 | +{ | |
386 | + union { | |
387 | + __I uint8_t RBR; | |
388 | + __O uint8_t THR; | |
389 | + __IO uint8_t DLL; | |
390 | + uint32_t RESERVED0; | |
391 | + }; | |
392 | + union { | |
393 | + __IO uint8_t DLM; | |
394 | + __IO uint32_t IER; | |
395 | + }; | |
396 | + union { | |
397 | + __I uint32_t IIR; | |
398 | + __O uint8_t FCR; | |
399 | + }; | |
400 | + __IO uint8_t LCR; | |
401 | + uint8_t RESERVED1[3]; | |
402 | + __IO uint8_t MCR; | |
403 | + uint8_t RESERVED2[3]; | |
404 | + __I uint8_t LSR; | |
405 | + uint8_t RESERVED3[3]; | |
406 | + __I uint8_t MSR; | |
407 | + uint8_t RESERVED4[3]; | |
408 | + __IO uint8_t SCR; | |
409 | + uint8_t RESERVED5[3]; | |
410 | + __IO uint32_t ACR; | |
411 | + uint32_t RESERVED6; | |
412 | + __IO uint32_t FDR; | |
413 | + uint32_t RESERVED7; | |
414 | + __IO uint8_t TER; | |
415 | + uint8_t RESERVED8[27]; | |
416 | + __IO uint8_t RS485CTRL; | |
417 | + uint8_t RESERVED9[3]; | |
418 | + __IO uint8_t ADRMATCH; | |
419 | + uint8_t RESERVED10[3]; | |
420 | + __IO uint8_t RS485DLY; | |
421 | + uint8_t RESERVED11[3]; | |
422 | + __I uint8_t FIFOLVL; | |
423 | +} LPC_UART1_TypeDef; | |
424 | + | |
425 | +/*------------- Serial Peripheral Interface (SPI) ----------------------------*/ | |
426 | +typedef struct | |
427 | +{ | |
428 | + __IO uint32_t SPCR; | |
429 | + __I uint32_t SPSR; | |
430 | + __IO uint32_t SPDR; | |
431 | + __IO uint32_t SPCCR; | |
432 | + uint32_t RESERVED0[3]; | |
433 | + __IO uint32_t SPINT; | |
434 | +} LPC_SPI_TypeDef; | |
435 | + | |
436 | +/*------------- Synchronous Serial Communication (SSP) -----------------------*/ | |
437 | +typedef struct | |
438 | +{ | |
439 | + __IO uint32_t CR0; | |
440 | + __IO uint32_t CR1; | |
441 | + __IO uint32_t DR; | |
442 | + __I uint32_t SR; | |
443 | + __IO uint32_t CPSR; | |
444 | + __IO uint32_t IMSC; | |
445 | + __IO uint32_t RIS; | |
446 | + __IO uint32_t MIS; | |
447 | + __IO uint32_t ICR; | |
448 | + __IO uint32_t DMACR; | |
449 | +} LPC_SSP_TypeDef; | |
450 | + | |
451 | +/*------------- Inter-Integrated Circuit (I2C) -------------------------------*/ | |
452 | +typedef struct | |
453 | +{ | |
454 | + __IO uint32_t I2CONSET; | |
455 | + __I uint32_t I2STAT; | |
456 | + __IO uint32_t I2DAT; | |
457 | + __IO uint32_t I2ADR0; | |
458 | + __IO uint32_t I2SCLH; | |
459 | + __IO uint32_t I2SCLL; | |
460 | + __O uint32_t I2CONCLR; | |
461 | + __IO uint32_t MMCTRL; | |
462 | + __IO uint32_t I2ADR1; | |
463 | + __IO uint32_t I2ADR2; | |
464 | + __IO uint32_t I2ADR3; | |
465 | + __I uint32_t I2DATA_BUFFER; | |
466 | + __IO uint32_t I2MASK0; | |
467 | + __IO uint32_t I2MASK1; | |
468 | + __IO uint32_t I2MASK2; | |
469 | + __IO uint32_t I2MASK3; | |
470 | +} LPC_I2C_TypeDef; | |
471 | + | |
472 | +/*------------- Inter IC Sound (I2S) -----------------------------------------*/ | |
473 | +typedef struct | |
474 | +{ | |
475 | + __IO uint32_t I2SDAO; | |
476 | + __IO uint32_t I2SDAI; | |
477 | + __O uint32_t I2STXFIFO; | |
478 | + __I uint32_t I2SRXFIFO; | |
479 | + __I uint32_t I2SSTATE; | |
480 | + __IO uint32_t I2SDMA1; | |
481 | + __IO uint32_t I2SDMA2; | |
482 | + __IO uint32_t I2SIRQ; | |
483 | + __IO uint32_t I2STXRATE; | |
484 | + __IO uint32_t I2SRXRATE; | |
485 | + __IO uint32_t I2STXBITRATE; | |
486 | + __IO uint32_t I2SRXBITRATE; | |
487 | + __IO uint32_t I2STXMODE; | |
488 | + __IO uint32_t I2SRXMODE; | |
489 | +} LPC_I2S_TypeDef; | |
490 | + | |
491 | +/*------------- Repetitive Interrupt Timer (RIT) -----------------------------*/ | |
492 | +typedef struct | |
493 | +{ | |
494 | + __IO uint32_t RICOMPVAL; | |
495 | + __IO uint32_t RIMASK; | |
496 | + __IO uint8_t RICTRL; | |
497 | + uint8_t RESERVED0[3]; | |
498 | + __IO uint32_t RICOUNTER; | |
499 | +} LPC_RIT_TypeDef; | |
500 | + | |
501 | +/*------------- Real-Time Clock (RTC) ----------------------------------------*/ | |
502 | +typedef struct | |
503 | +{ | |
504 | + __IO uint8_t ILR; | |
505 | + uint8_t RESERVED0[7]; | |
506 | + __IO uint8_t CCR; | |
507 | + uint8_t RESERVED1[3]; | |
508 | + __IO uint8_t CIIR; | |
509 | + uint8_t RESERVED2[3]; | |
510 | + __IO uint8_t AMR; | |
511 | + uint8_t RESERVED3[3]; | |
512 | + __I uint32_t CTIME0; | |
513 | + __I uint32_t CTIME1; | |
514 | + __I uint32_t CTIME2; | |
515 | + __IO uint8_t SEC; | |
516 | + uint8_t RESERVED4[3]; | |
517 | + __IO uint8_t MIN; | |
518 | + uint8_t RESERVED5[3]; | |
519 | + __IO uint8_t HOUR; | |
520 | + uint8_t RESERVED6[3]; | |
521 | + __IO uint8_t DOM; | |
522 | + uint8_t RESERVED7[3]; | |
523 | + __IO uint8_t DOW; | |
524 | + uint8_t RESERVED8[3]; | |
525 | + __IO uint16_t DOY; | |
526 | + uint16_t RESERVED9; | |
527 | + __IO uint8_t MONTH; | |
528 | + uint8_t RESERVED10[3]; | |
529 | + __IO uint16_t YEAR; | |
530 | + uint16_t RESERVED11; | |
531 | + __IO uint32_t CALIBRATION; | |
532 | + __IO uint32_t GPREG0; | |
533 | + __IO uint32_t GPREG1; | |
534 | + __IO uint32_t GPREG2; | |
535 | + __IO uint32_t GPREG3; | |
536 | + __IO uint32_t GPREG4; | |
537 | + __IO uint8_t RTC_AUXEN; | |
538 | + uint8_t RESERVED12[3]; | |
539 | + __IO uint8_t RTC_AUX; | |
540 | + uint8_t RESERVED13[3]; | |
541 | + __IO uint8_t ALSEC; | |
542 | + uint8_t RESERVED14[3]; | |
543 | + __IO uint8_t ALMIN; | |
544 | + uint8_t RESERVED15[3]; | |
545 | + __IO uint8_t ALHOUR; | |
546 | + uint8_t RESERVED16[3]; | |
547 | + __IO uint8_t ALDOM; | |
548 | + uint8_t RESERVED17[3]; | |
549 | + __IO uint8_t ALDOW; | |
550 | + uint8_t RESERVED18[3]; | |
551 | + __IO uint16_t ALDOY; | |
552 | + uint16_t RESERVED19; | |
553 | + __IO uint8_t ALMON; | |
554 | + uint8_t RESERVED20[3]; | |
555 | + __IO uint16_t ALYEAR; | |
556 | + uint16_t RESERVED21; | |
557 | +} LPC_RTC_TypeDef; | |
558 | + | |
559 | +/*------------- Watchdog Timer (WDT) -----------------------------------------*/ | |
560 | +typedef struct | |
561 | +{ | |
562 | + __IO uint8_t WDMOD; | |
563 | + uint8_t RESERVED0[3]; | |
564 | + __IO uint32_t WDTC; | |
565 | + __O uint8_t WDFEED; | |
566 | + uint8_t RESERVED1[3]; | |
567 | + __I uint32_t WDTV; | |
568 | + __IO uint32_t WDCLKSEL; | |
569 | +} LPC_WDT_TypeDef; | |
570 | + | |
571 | +/*------------- Analog-to-Digital Converter (ADC) ----------------------------*/ | |
572 | +typedef struct | |
573 | +{ | |
574 | + __IO uint32_t ADCR; | |
575 | + __IO uint32_t ADGDR; | |
576 | + uint32_t RESERVED0; | |
577 | + __IO uint32_t ADINTEN; | |
578 | + __I uint32_t ADDR0; | |
579 | + __I uint32_t ADDR1; | |
580 | + __I uint32_t ADDR2; | |
581 | + __I uint32_t ADDR3; | |
582 | + __I uint32_t ADDR4; | |
583 | + __I uint32_t ADDR5; | |
584 | + __I uint32_t ADDR6; | |
585 | + __I uint32_t ADDR7; | |
586 | + __I uint32_t ADSTAT; | |
587 | + __IO uint32_t ADTRM; | |
588 | +} LPC_ADC_TypeDef; | |
589 | + | |
590 | +/*------------- Digital-to-Analog Converter (DAC) ----------------------------*/ | |
591 | +typedef struct | |
592 | +{ | |
593 | + __IO uint32_t DACR; | |
594 | + __IO uint32_t DACCTRL; | |
595 | + __IO uint16_t DACCNTVAL; | |
596 | +} LPC_DAC_TypeDef; | |
597 | + | |
598 | +/*------------- Motor Control Pulse-Width Modulation (MCPWM) -----------------*/ | |
599 | +typedef struct | |
600 | +{ | |
601 | + __I uint32_t MCCON; | |
602 | + __O uint32_t MCCON_SET; | |
603 | + __O uint32_t MCCON_CLR; | |
604 | + __I uint32_t MCCAPCON; | |
605 | + __O uint32_t MCCAPCON_SET; | |
606 | + __O uint32_t MCCAPCON_CLR; | |
607 | + __IO uint32_t MCTIM0; | |
608 | + __IO uint32_t MCTIM1; | |
609 | + __IO uint32_t MCTIM2; | |
610 | + __IO uint32_t MCPER0; | |
611 | + __IO uint32_t MCPER1; | |
612 | + __IO uint32_t MCPER2; | |
613 | + __IO uint32_t MCPW0; | |
614 | + __IO uint32_t MCPW1; | |
615 | + __IO uint32_t MCPW2; | |
616 | + __IO uint32_t MCDEADTIME; | |
617 | + __IO uint32_t MCCCP; | |
618 | + __IO uint32_t MCCR0; | |
619 | + __IO uint32_t MCCR1; | |
620 | + __IO uint32_t MCCR2; | |
621 | + __I uint32_t MCINTEN; | |
622 | + __O uint32_t MCINTEN_SET; | |
623 | + __O uint32_t MCINTEN_CLR; | |
624 | + __I uint32_t MCCNTCON; | |
625 | + __O uint32_t MCCNTCON_SET; | |
626 | + __O uint32_t MCCNTCON_CLR; | |
627 | + __I uint32_t MCINTFLAG; | |
628 | + __O uint32_t MCINTFLAG_SET; | |
629 | + __O uint32_t MCINTFLAG_CLR; | |
630 | + __O uint32_t MCCAP_CLR; | |
631 | +} LPC_MCPWM_TypeDef; | |
632 | + | |
633 | +/*------------- Quadrature Encoder Interface (QEI) ---------------------------*/ | |
634 | +typedef struct | |
635 | +{ | |
636 | + __O uint32_t QEICON; | |
637 | + __I uint32_t QEISTAT; | |
638 | + __IO uint32_t QEICONF; | |
639 | + __I uint32_t QEIPOS; | |
640 | + __IO uint32_t QEIMAXPOS; | |
641 | + __IO uint32_t CMPOS0; | |
642 | + __IO uint32_t CMPOS1; | |
643 | + __IO uint32_t CMPOS2; | |
644 | + __I uint32_t INXCNT; | |
645 | + __IO uint32_t INXCMP; | |
646 | + __IO uint32_t QEILOAD; | |
647 | + __I uint32_t QEITIME; | |
648 | + __I uint32_t QEIVEL; | |
649 | + __I uint32_t QEICAP; | |
650 | + __IO uint32_t VELCOMP; | |
651 | + __IO uint32_t FILTER; | |
652 | + uint32_t RESERVED0[998]; | |
653 | + __O uint32_t QEIIEC; | |
654 | + __O uint32_t QEIIES; | |
655 | + __I uint32_t QEIINTSTAT; | |
656 | + __I uint32_t QEIIE; | |
657 | + __O uint32_t QEICLR; | |
658 | + __O uint32_t QEISET; | |
659 | +} LPC_QEI_TypeDef; | |
660 | + | |
661 | +/*------------- Controller Area Network (CAN) --------------------------------*/ | |
662 | +typedef struct | |
663 | +{ | |
664 | + __IO uint32_t mask[512]; /* ID Masks */ | |
665 | +} LPC_CANAF_RAM_TypeDef; | |
666 | + | |
667 | +typedef struct /* Acceptance Filter Registers */ | |
668 | +{ | |
669 | + __IO uint32_t AFMR; | |
670 | + __IO uint32_t SFF_sa; | |
671 | + __IO uint32_t SFF_GRP_sa; | |
672 | + __IO uint32_t EFF_sa; | |
673 | + __IO uint32_t EFF_GRP_sa; | |
674 | + __IO uint32_t ENDofTable; | |
675 | + __I uint32_t LUTerrAd; | |
676 | + __I uint32_t LUTerr; | |
677 | + __IO uint32_t FCANIE; | |
678 | + __IO uint32_t FCANIC0; | |
679 | + __IO uint32_t FCANIC1; | |
680 | +} LPC_CANAF_TypeDef; | |
681 | + | |
682 | +typedef struct /* Central Registers */ | |
683 | +{ | |
684 | + __I uint32_t CANTxSR; | |
685 | + __I uint32_t CANRxSR; | |
686 | + __I uint32_t CANMSR; | |
687 | +} LPC_CANCR_TypeDef; | |
688 | + | |
689 | +typedef struct /* Controller Registers */ | |
690 | +{ | |
691 | + __IO uint32_t MOD; | |
692 | + __O uint32_t CMR; | |
693 | + __IO uint32_t GSR; | |
694 | + __I uint32_t ICR; | |
695 | + __IO uint32_t IER; | |
696 | + __IO uint32_t BTR; | |
697 | + __IO uint32_t EWL; | |
698 | + __I uint32_t SR; | |
699 | + __IO uint32_t RFS; | |
700 | + __IO uint32_t RID; | |
701 | + __IO uint32_t RDA; | |
702 | + __IO uint32_t RDB; | |
703 | + __IO uint32_t TFI1; | |
704 | + __IO uint32_t TID1; | |
705 | + __IO uint32_t TDA1; | |
706 | + __IO uint32_t TDB1; | |
707 | + __IO uint32_t TFI2; | |
708 | + __IO uint32_t TID2; | |
709 | + __IO uint32_t TDA2; | |
710 | + __IO uint32_t TDB2; | |
711 | + __IO uint32_t TFI3; | |
712 | + __IO uint32_t TID3; | |
713 | + __IO uint32_t TDA3; | |
714 | + __IO uint32_t TDB3; | |
715 | +} LPC_CAN_TypeDef; | |
716 | + | |
717 | +/*------------- General Purpose Direct Memory Access (GPDMA) -----------------*/ | |
718 | +typedef struct /* Common Registers */ | |
719 | +{ | |
720 | + __I uint32_t DMACIntStat; | |
721 | + __I uint32_t DMACIntTCStat; | |
722 | + __O uint32_t DMACIntTCClear; | |
723 | + __I uint32_t DMACIntErrStat; | |
724 | + __O uint32_t DMACIntErrClr; | |
725 | + __I uint32_t DMACRawIntTCStat; | |
726 | + __I uint32_t DMACRawIntErrStat; | |
727 | + __I uint32_t DMACEnbldChns; | |
728 | + __IO uint32_t DMACSoftBReq; | |
729 | + __IO uint32_t DMACSoftSReq; | |
730 | + __IO uint32_t DMACSoftLBReq; | |
731 | + __IO uint32_t DMACSoftLSReq; | |
732 | + __IO uint32_t DMACConfig; | |
733 | + __IO uint32_t DMACSync; | |
734 | +} LPC_GPDMA_TypeDef; | |
735 | + | |
736 | +typedef struct /* Channel Registers */ | |
737 | +{ | |
738 | + __IO uint32_t DMACCSrcAddr; | |
739 | + __IO uint32_t DMACCDestAddr; | |
740 | + __IO uint32_t DMACCLLI; | |
741 | + __IO uint32_t DMACCControl; | |
742 | + __IO uint32_t DMACCConfig; | |
743 | +} LPC_GPDMACH_TypeDef; | |
744 | + | |
745 | +/*------------- Universal Serial Bus (USB) -----------------------------------*/ | |
746 | +typedef struct | |
747 | +{ | |
748 | + __I uint32_t HcRevision; /* USB Host Registers */ | |
749 | + __IO uint32_t HcControl; | |
750 | + __IO uint32_t HcCommandStatus; | |
751 | + __IO uint32_t HcInterruptStatus; | |
752 | + __IO uint32_t HcInterruptEnable; | |
753 | + __IO uint32_t HcInterruptDisable; | |
754 | + __IO uint32_t HcHCCA; | |
755 | + __I uint32_t HcPeriodCurrentED; | |
756 | + __IO uint32_t HcControlHeadED; | |
757 | + __IO uint32_t HcControlCurrentED; | |
758 | + __IO uint32_t HcBulkHeadED; | |
759 | + __IO uint32_t HcBulkCurrentED; | |
760 | + __I uint32_t HcDoneHead; | |
761 | + __IO uint32_t HcFmInterval; | |
762 | + __I uint32_t HcFmRemaining; | |
763 | + __I uint32_t HcFmNumber; | |
764 | + __IO uint32_t HcPeriodicStart; | |
765 | + __IO uint32_t HcLSTreshold; | |
766 | + __IO uint32_t HcRhDescriptorA; | |
767 | + __IO uint32_t HcRhDescriptorB; | |
768 | + __IO uint32_t HcRhStatus; | |
769 | + __IO uint32_t HcRhPortStatus1; | |
770 | + __IO uint32_t HcRhPortStatus2; | |
771 | + uint32_t RESERVED0[40]; | |
772 | + __I uint32_t Module_ID; | |
773 | + | |
774 | + __I uint32_t OTGIntSt; /* USB On-The-Go Registers */ | |
775 | + __IO uint32_t OTGIntEn; | |
776 | + __O uint32_t OTGIntSet; | |
777 | + __O uint32_t OTGIntClr; | |
778 | + __IO uint32_t OTGStCtrl; | |
779 | + __IO uint32_t OTGTmr; | |
780 | + uint32_t RESERVED1[58]; | |
781 | + | |
782 | + __I uint32_t USBDevIntSt; /* USB Device Interrupt Registers */ | |
783 | + __IO uint32_t USBDevIntEn; | |
784 | + __O uint32_t USBDevIntClr; | |
785 | + __O uint32_t USBDevIntSet; | |
786 | + | |
787 | + __O uint32_t USBCmdCode; /* USB Device SIE Command Registers */ | |
788 | + __I uint32_t USBCmdData; | |
789 | + | |
790 | + __I uint32_t USBRxData; /* USB Device Transfer Registers */ | |
791 | + __O uint32_t USBTxData; | |
792 | + __I uint32_t USBRxPLen; | |
793 | + __O uint32_t USBTxPLen; | |
794 | + __IO uint32_t USBCtrl; | |
795 | + __O uint32_t USBDevIntPri; | |
796 | + | |
797 | + __I uint32_t USBEpIntSt; /* USB Device Endpoint Interrupt Regs */ | |
798 | + __IO uint32_t USBEpIntEn; | |
799 | + __O uint32_t USBEpIntClr; | |
800 | + __O uint32_t USBEpIntSet; | |
801 | + __O uint32_t USBEpIntPri; | |
802 | + | |
803 | + __IO uint32_t USBReEp; /* USB Device Endpoint Realization Reg*/ | |
804 | + __O uint32_t USBEpInd; | |
805 | + __IO uint32_t USBMaxPSize; | |
806 | + | |
807 | + __I uint32_t USBDMARSt; /* USB Device DMA Registers */ | |
808 | + __O uint32_t USBDMARClr; | |
809 | + __O uint32_t USBDMARSet; | |
810 | + uint32_t RESERVED2[9]; | |
811 | + __IO uint32_t USBUDCAH; | |
812 | + __I uint32_t USBEpDMASt; | |
813 | + __O uint32_t USBEpDMAEn; | |
814 | + __O uint32_t USBEpDMADis; | |
815 | + __I uint32_t USBDMAIntSt; | |
816 | + __IO uint32_t USBDMAIntEn; | |
817 | + uint32_t RESERVED3[2]; | |
818 | + __I uint32_t USBEoTIntSt; | |
819 | + __O uint32_t USBEoTIntClr; | |
820 | + __O uint32_t USBEoTIntSet; | |
821 | + __I uint32_t USBNDDRIntSt; | |
822 | + __O uint32_t USBNDDRIntClr; | |
823 | + __O uint32_t USBNDDRIntSet; | |
824 | + __I uint32_t USBSysErrIntSt; | |
825 | + __O uint32_t USBSysErrIntClr; | |
826 | + __O uint32_t USBSysErrIntSet; | |
827 | + uint32_t RESERVED4[15]; | |
828 | + | |
829 | + __I uint32_t I2C_RX; /* USB OTG I2C Registers */ | |
830 | + __O uint32_t I2C_WO; | |
831 | + __I uint32_t I2C_STS; | |
832 | + __IO uint32_t I2C_CTL; | |
833 | + __IO uint32_t I2C_CLKHI; | |
834 | + __O uint32_t I2C_CLKLO; | |
835 | + uint32_t RESERVED5[823]; | |
836 | + | |
837 | + union { | |
838 | + __IO uint32_t USBClkCtrl; /* USB Clock Control Registers */ | |
839 | + __IO uint32_t OTGClkCtrl; | |
840 | + }; | |
841 | + union { | |
842 | + __I uint32_t USBClkSt; | |
843 | + __I uint32_t OTGClkSt; | |
844 | + }; | |
845 | +} LPC_USB_TypeDef; | |
846 | + | |
847 | +/*------------- Ethernet Media Access Controller (EMAC) ----------------------*/ | |
848 | +typedef struct | |
849 | +{ | |
850 | + __IO uint32_t MAC1; /* MAC Registers */ | |
851 | + __IO uint32_t MAC2; | |
852 | + __IO uint32_t IPGT; | |
853 | + __IO uint32_t IPGR; | |
854 | + __IO uint32_t CLRT; | |
855 | + __IO uint32_t MAXF; | |
856 | + __IO uint32_t SUPP; | |
857 | + __IO uint32_t TEST; | |
858 | + __IO uint32_t MCFG; | |
859 | + __IO uint32_t MCMD; | |
860 | + __IO uint32_t MADR; | |
861 | + __O uint32_t MWTD; | |
862 | + __I uint32_t MRDD; | |
863 | + __I uint32_t MIND; | |
864 | + uint32_t RESERVED0[2]; | |
865 | + __IO uint32_t SA0; | |
866 | + __IO uint32_t SA1; | |
867 | + __IO uint32_t SA2; | |
868 | + uint32_t RESERVED1[45]; | |
869 | + __IO uint32_t Command; /* Control Registers */ | |
870 | + __I uint32_t Status; | |
871 | + __IO uint32_t RxDescriptor; | |
872 | + __IO uint32_t RxStatus; | |
873 | + __IO uint32_t RxDescriptorNumber; | |
874 | + __I uint32_t RxProduceIndex; | |
875 | + __IO uint32_t RxConsumeIndex; | |
876 | + __IO uint32_t TxDescriptor; | |
877 | + __IO uint32_t TxStatus; | |
878 | + __IO uint32_t TxDescriptorNumber; | |
879 | + __IO uint32_t TxProduceIndex; | |
880 | + __I uint32_t TxConsumeIndex; | |
881 | + uint32_t RESERVED2[10]; | |
882 | + __I uint32_t TSV0; | |
883 | + __I uint32_t TSV1; | |
884 | + __I uint32_t RSV; | |
885 | + uint32_t RESERVED3[3]; | |
886 | + __IO uint32_t FlowControlCounter; | |
887 | + __I uint32_t FlowControlStatus; | |
888 | + uint32_t RESERVED4[34]; | |
889 | + __IO uint32_t RxFilterCtrl; /* Rx Filter Registers */ | |
890 | + __IO uint32_t RxFilterWoLStatus; | |
891 | + __IO uint32_t RxFilterWoLClear; | |
892 | + uint32_t RESERVED5; | |
893 | + __IO uint32_t HashFilterL; | |
894 | + __IO uint32_t HashFilterH; | |
895 | + uint32_t RESERVED6[882]; | |
896 | + __I uint32_t IntStatus; /* Module Control Registers */ | |
897 | + __IO uint32_t IntEnable; | |
898 | + __O uint32_t IntClear; | |
899 | + __O uint32_t IntSet; | |
900 | + uint32_t RESERVED7; | |
901 | + __IO uint32_t PowerDown; | |
902 | + uint32_t RESERVED8; | |
903 | + __IO uint32_t Module_ID; | |
904 | +} LPC_EMAC_TypeDef; | |
905 | + | |
906 | +#if defined ( __CC_ARM ) | |
907 | +#pragma no_anon_unions | |
908 | +#endif | |
909 | + | |
910 | + | |
911 | +/******************************************************************************/ | |
912 | +/* Peripheral memory map */ | |
913 | +/******************************************************************************/ | |
914 | +/* Base addresses */ | |
915 | +#define LPC_FLASH_BASE (0x00000000UL) | |
916 | +#define LPC_RAM_BASE (0x10000000UL) | |
917 | +#ifdef __LPC17XX_REV00 | |
918 | +#define LPC_AHBRAM0_BASE (0x20000000UL) | |
919 | +#define LPC_AHBRAM1_BASE (0x20004000UL) | |
920 | +#else | |
921 | +#define LPC_AHBRAM0_BASE (0x2007C000UL) | |
922 | +#define LPC_AHBRAM1_BASE (0x20080000UL) | |
923 | +#endif | |
924 | +#define LPC_GPIO_BASE (0x2009C000UL) | |
925 | +#define LPC_APB0_BASE (0x40000000UL) | |
926 | +#define LPC_APB1_BASE (0x40080000UL) | |
927 | +#define LPC_AHB_BASE (0x50000000UL) | |
928 | +#define LPC_CM3_BASE (0xE0000000UL) | |
929 | + | |
930 | +/* APB0 peripherals */ | |
931 | +#define LPC_WDT_BASE (LPC_APB0_BASE + 0x00000) | |
932 | +#define LPC_TIM0_BASE (LPC_APB0_BASE + 0x04000) | |
933 | +#define LPC_TIM1_BASE (LPC_APB0_BASE + 0x08000) | |
934 | +#define LPC_UART0_BASE (LPC_APB0_BASE + 0x0C000) | |
935 | +#define LPC_UART1_BASE (LPC_APB0_BASE + 0x10000) | |
936 | +#define LPC_PWM1_BASE (LPC_APB0_BASE + 0x18000) | |
937 | +#define LPC_I2C0_BASE (LPC_APB0_BASE + 0x1C000) | |
938 | +#define LPC_SPI_BASE (LPC_APB0_BASE + 0x20000) | |
939 | +#define LPC_RTC_BASE (LPC_APB0_BASE + 0x24000) | |
940 | +#define LPC_GPIOINT_BASE (LPC_APB0_BASE + 0x28080) | |
941 | +#define LPC_PINCON_BASE (LPC_APB0_BASE + 0x2C000) | |
942 | +#define LPC_SSP1_BASE (LPC_APB0_BASE + 0x30000) | |
943 | +#define LPC_ADC_BASE (LPC_APB0_BASE + 0x34000) | |
944 | +#define LPC_CANAF_RAM_BASE (LPC_APB0_BASE + 0x38000) | |
945 | +#define LPC_CANAF_BASE (LPC_APB0_BASE + 0x3C000) | |
946 | +#define LPC_CANCR_BASE (LPC_APB0_BASE + 0x40000) | |
947 | +#define LPC_CAN1_BASE (LPC_APB0_BASE + 0x44000) | |
948 | +#define LPC_CAN2_BASE (LPC_APB0_BASE + 0x48000) | |
949 | +#define LPC_I2C1_BASE (LPC_APB0_BASE + 0x5C000) | |
950 | + | |
951 | +/* APB1 peripherals */ | |
952 | +#define LPC_SSP0_BASE (LPC_APB1_BASE + 0x08000) | |
953 | +#define LPC_DAC_BASE (LPC_APB1_BASE + 0x0C000) | |
954 | +#define LPC_TIM2_BASE (LPC_APB1_BASE + 0x10000) | |
955 | +#define LPC_TIM3_BASE (LPC_APB1_BASE + 0x14000) | |
956 | +#define LPC_UART2_BASE (LPC_APB1_BASE + 0x18000) | |
957 | +#define LPC_UART3_BASE (LPC_APB1_BASE + 0x1C000) | |
958 | +#define LPC_I2C2_BASE (LPC_APB1_BASE + 0x20000) | |
959 | +#define LPC_I2S_BASE (LPC_APB1_BASE + 0x28000) | |
960 | +#define LPC_RIT_BASE (LPC_APB1_BASE + 0x30000) | |
961 | +#define LPC_MCPWM_BASE (LPC_APB1_BASE + 0x38000) | |
962 | +#define LPC_QEI_BASE (LPC_APB1_BASE + 0x3C000) | |
963 | +#define LPC_SC_BASE (LPC_APB1_BASE + 0x7C000) | |
964 | + | |
965 | +/* AHB peripherals */ | |
966 | +#define LPC_EMAC_BASE (LPC_AHB_BASE + 0x00000) | |
967 | +#define LPC_GPDMA_BASE (LPC_AHB_BASE + 0x04000) | |
968 | +#define LPC_GPDMACH0_BASE (LPC_AHB_BASE + 0x04100) | |
969 | +#define LPC_GPDMACH1_BASE (LPC_AHB_BASE + 0x04120) | |
970 | +#define LPC_GPDMACH2_BASE (LPC_AHB_BASE + 0x04140) | |
971 | +#define LPC_GPDMACH3_BASE (LPC_AHB_BASE + 0x04160) | |
972 | +#define LPC_GPDMACH4_BASE (LPC_AHB_BASE + 0x04180) | |
973 | +#define LPC_GPDMACH5_BASE (LPC_AHB_BASE + 0x041A0) | |
974 | +#define LPC_GPDMACH6_BASE (LPC_AHB_BASE + 0x041C0) | |
975 | +#define LPC_GPDMACH7_BASE (LPC_AHB_BASE + 0x041E0) | |
976 | +#define LPC_USB_BASE (LPC_AHB_BASE + 0x0C000) | |
977 | + | |
978 | +/* GPIOs */ | |
979 | +#define LPC_GPIO0_BASE (LPC_GPIO_BASE + 0x00000) | |
980 | +#define LPC_GPIO1_BASE (LPC_GPIO_BASE + 0x00020) | |
981 | +#define LPC_GPIO2_BASE (LPC_GPIO_BASE + 0x00040) | |
982 | +#define LPC_GPIO3_BASE (LPC_GPIO_BASE + 0x00060) | |
983 | +#define LPC_GPIO4_BASE (LPC_GPIO_BASE + 0x00080) | |
984 | + | |
985 | + | |
986 | +/******************************************************************************/ | |
987 | +/* Peripheral declaration */ | |
988 | +/******************************************************************************/ | |
989 | +#define LPC_SC ((LPC_SC_TypeDef *) LPC_SC_BASE ) | |
990 | +#define LPC_GPIO0 ((LPC_GPIO_TypeDef *) LPC_GPIO0_BASE ) | |
991 | +#define LPC_GPIO1 ((LPC_GPIO_TypeDef *) LPC_GPIO1_BASE ) | |
992 | +#define LPC_GPIO2 ((LPC_GPIO_TypeDef *) LPC_GPIO2_BASE ) | |
993 | +#define LPC_GPIO3 ((LPC_GPIO_TypeDef *) LPC_GPIO3_BASE ) | |
994 | +#define LPC_GPIO4 ((LPC_GPIO_TypeDef *) LPC_GPIO4_BASE ) | |
995 | +#define LPC_WDT ((LPC_WDT_TypeDef *) LPC_WDT_BASE ) | |
996 | +#define LPC_TIM0 ((LPC_TIM_TypeDef *) LPC_TIM0_BASE ) | |
997 | +#define LPC_TIM1 ((LPC_TIM_TypeDef *) LPC_TIM1_BASE ) | |
998 | +#define LPC_TIM2 ((LPC_TIM_TypeDef *) LPC_TIM2_BASE ) | |
999 | +#define LPC_TIM3 ((LPC_TIM_TypeDef *) LPC_TIM3_BASE ) | |
1000 | +#define LPC_RIT ((LPC_RIT_TypeDef *) LPC_RIT_BASE ) | |
1001 | +#define LPC_UART0 ((LPC_UART_TypeDef *) LPC_UART0_BASE ) | |
1002 | +#define LPC_UART1 ((LPC_UART1_TypeDef *) LPC_UART1_BASE ) | |
1003 | +#define LPC_UART2 ((LPC_UART_TypeDef *) LPC_UART2_BASE ) | |
1004 | +#define LPC_UART3 ((LPC_UART_TypeDef *) LPC_UART3_BASE ) | |
1005 | +#define LPC_PWM1 ((LPC_PWM_TypeDef *) LPC_PWM1_BASE ) | |
1006 | +#define LPC_I2C0 ((LPC_I2C_TypeDef *) LPC_I2C0_BASE ) | |
1007 | +#define LPC_I2C1 ((LPC_I2C_TypeDef *) LPC_I2C1_BASE ) | |
1008 | +#define LPC_I2C2 ((LPC_I2C_TypeDef *) LPC_I2C2_BASE ) | |
1009 | +#define LPC_I2S ((LPC_I2S_TypeDef *) LPC_I2S_BASE ) | |
1010 | +#define LPC_SPI ((LPC_SPI_TypeDef *) LPC_SPI_BASE ) | |
1011 | +#define LPC_RTC ((LPC_RTC_TypeDef *) LPC_RTC_BASE ) | |
1012 | +#define LPC_GPIOINT ((LPC_GPIOINT_TypeDef *) LPC_GPIOINT_BASE ) | |
1013 | +#define LPC_PINCON ((LPC_PINCON_TypeDef *) LPC_PINCON_BASE ) | |
1014 | +#define LPC_SSP0 ((LPC_SSP_TypeDef *) LPC_SSP0_BASE ) | |
1015 | +#define LPC_SSP1 ((LPC_SSP_TypeDef *) LPC_SSP1_BASE ) | |
1016 | +#define LPC_ADC ((LPC_ADC_TypeDef *) LPC_ADC_BASE ) | |
1017 | +#define LPC_DAC ((LPC_DAC_TypeDef *) LPC_DAC_BASE ) | |
1018 | +#define LPC_CANAF_RAM ((LPC_CANAF_RAM_TypeDef *) LPC_CANAF_RAM_BASE) | |
1019 | +#define LPC_CANAF ((LPC_CANAF_TypeDef *) LPC_CANAF_BASE ) | |
1020 | +#define LPC_CANCR ((LPC_CANCR_TypeDef *) LPC_CANCR_BASE ) | |
1021 | +#define LPC_CAN1 ((LPC_CAN_TypeDef *) LPC_CAN1_BASE ) | |
1022 | +#define LPC_CAN2 ((LPC_CAN_TypeDef *) LPC_CAN2_BASE ) | |
1023 | +#define LPC_MCPWM ((LPC_MCPWM_TypeDef *) LPC_MCPWM_BASE ) | |
1024 | +#define LPC_QEI ((LPC_QEI_TypeDef *) LPC_QEI_BASE ) | |
1025 | +#define LPC_EMAC ((LPC_EMAC_TypeDef *) LPC_EMAC_BASE ) | |
1026 | +#define LPC_GPDMA ((LPC_GPDMA_TypeDef *) LPC_GPDMA_BASE ) | |
1027 | +#define DMAREQSEL (*(__IO uint32_t *) ( 0x4000C1C4)) | |
1028 | +#define LPC_GPDMACH0 ((LPC_GPDMACH_TypeDef *) LPC_GPDMACH0_BASE ) | |
1029 | +#define LPC_GPDMACH1 ((LPC_GPDMACH_TypeDef *) LPC_GPDMACH1_BASE ) | |
1030 | +#define LPC_GPDMACH2 ((LPC_GPDMACH_TypeDef *) LPC_GPDMACH2_BASE ) | |
1031 | +#define LPC_GPDMACH3 ((LPC_GPDMACH_TypeDef *) LPC_GPDMACH3_BASE ) | |
1032 | +#define LPC_GPDMACH4 ((LPC_GPDMACH_TypeDef *) LPC_GPDMACH4_BASE ) | |
1033 | +#define LPC_GPDMACH5 ((LPC_GPDMACH_TypeDef *) LPC_GPDMACH5_BASE ) | |
1034 | +#define LPC_GPDMACH6 ((LPC_GPDMACH_TypeDef *) LPC_GPDMACH6_BASE ) | |
1035 | +#define LPC_GPDMACH7 ((LPC_GPDMACH_TypeDef *) LPC_GPDMACH7_BASE ) | |
1036 | +#define LPC_USB ((LPC_USB_TypeDef *) LPC_USB_BASE ) | |
1037 | + | |
1038 | +#endif // __LPC17xx_H__ |
@@ -0,0 +1,1818 @@ | ||
1 | +/**************************************************************************//** | |
2 | + * @file core_cm3.h | |
3 | + * @brief CMSIS Cortex-M3 Core Peripheral Access Layer Header File | |
4 | + * @version V1.30 | |
5 | + * @date 30. October 2009 | |
6 | + * | |
7 | + * @note | |
8 | + * Copyright (C) 2009 ARM Limited. All rights reserved. | |
9 | + * | |
10 | + * @par | |
11 | + * ARM Limited (ARM) is supplying this software for use with Cortex-M | |
12 | + * processor based microcontrollers. This file can be freely distributed | |
13 | + * within development tools that are supporting such ARM based processors. | |
14 | + * | |
15 | + * @par | |
16 | + * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED | |
17 | + * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF | |
18 | + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. | |
19 | + * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR | |
20 | + * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. | |
21 | + * | |
22 | + ******************************************************************************/ | |
23 | + | |
24 | +#ifndef __CM3_CORE_H__ | |
25 | +#define __CM3_CORE_H__ | |
26 | + | |
27 | +/** @addtogroup CMSIS_CM3_core_LintCinfiguration CMSIS CM3 Core Lint Configuration | |
28 | + * | |
29 | + * List of Lint messages which will be suppressed and not shown: | |
30 | + * - Error 10: \n | |
31 | + * register uint32_t __regBasePri __asm("basepri"); \n | |
32 | + * Error 10: Expecting ';' | |
33 | + * . | |
34 | + * - Error 530: \n | |
35 | + * return(__regBasePri); \n | |
36 | + * Warning 530: Symbol '__regBasePri' (line 264) not initialized | |
37 | + * . | |
38 | + * - Error 550: \n | |
39 | + * __regBasePri = (basePri & 0x1ff); \n | |
40 | + * Warning 550: Symbol '__regBasePri' (line 271) not accessed | |
41 | + * . | |
42 | + * - Error 754: \n | |
43 | + * uint32_t RESERVED0[24]; \n | |
44 | + * Info 754: local structure member '<some, not used in the HAL>' (line 109, file ./cm3_core.h) not referenced | |
45 | + * . | |
46 | + * - Error 750: \n | |
47 | + * #define __CM3_CORE_H__ \n | |
48 | + * Info 750: local macro '__CM3_CORE_H__' (line 43, file./cm3_core.h) not referenced | |
49 | + * . | |
50 | + * - Error 528: \n | |
51 | + * static __INLINE void NVIC_DisableIRQ(uint32_t IRQn) \n | |
52 | + * Warning 528: Symbol 'NVIC_DisableIRQ(unsigned int)' (line 419, file ./cm3_core.h) not referenced | |
53 | + * . | |
54 | + * - Error 751: \n | |
55 | + * } InterruptType_Type; \n | |
56 | + * Info 751: local typedef 'InterruptType_Type' (line 170, file ./cm3_core.h) not referenced | |
57 | + * . | |
58 | + * Note: To re-enable a Message, insert a space before 'lint' * | |
59 | + * | |
60 | + */ | |
61 | + | |
62 | +/*lint -save */ | |
63 | +/*lint -e10 */ | |
64 | +/*lint -e530 */ | |
65 | +/*lint -e550 */ | |
66 | +/*lint -e754 */ | |
67 | +/*lint -e750 */ | |
68 | +/*lint -e528 */ | |
69 | +/*lint -e751 */ | |
70 | + | |
71 | + | |
72 | +/** @addtogroup CMSIS_CM3_core_definitions CM3 Core Definitions | |
73 | + This file defines all structures and symbols for CMSIS core: | |
74 | + - CMSIS version number | |
75 | + - Cortex-M core registers and bitfields | |
76 | + - Cortex-M core peripheral base address | |
77 | + @{ | |
78 | + */ | |
79 | + | |
80 | +#ifdef __cplusplus | |
81 | + extern "C" { | |
82 | +#endif | |
83 | + | |
84 | +#define __CM3_CMSIS_VERSION_MAIN (0x01) /*!< [31:16] CMSIS HAL main version */ | |
85 | +#define __CM3_CMSIS_VERSION_SUB (0x30) /*!< [15:0] CMSIS HAL sub version */ | |
86 | +#define __CM3_CMSIS_VERSION ((__CM3_CMSIS_VERSION_MAIN << 16) | __CM3_CMSIS_VERSION_SUB) /*!< CMSIS HAL version number */ | |
87 | + | |
88 | +#define __CORTEX_M (0x03) /*!< Cortex core */ | |
89 | + | |
90 | +#include <stdint.h> /* Include standard types */ | |
91 | + | |
92 | +#if defined (__ICCARM__) | |
93 | + #include <intrinsics.h> /* IAR Intrinsics */ | |
94 | +#endif | |
95 | + | |
96 | + | |
97 | +#ifndef __NVIC_PRIO_BITS | |
98 | + #define __NVIC_PRIO_BITS 4 /*!< standard definition for NVIC Priority Bits */ | |
99 | +#endif | |
100 | + | |
101 | + | |
102 | + | |
103 | + | |
104 | +/** | |
105 | + * IO definitions | |
106 | + * | |
107 | + * define access restrictions to peripheral registers | |
108 | + */ | |
109 | + | |
110 | +#ifdef __cplusplus | |
111 | + #define __I volatile /*!< defines 'read only' permissions */ | |
112 | +#else | |
113 | + #define __I volatile const /*!< defines 'read only' permissions */ | |
114 | +#endif | |
115 | +#define __O volatile /*!< defines 'write only' permissions */ | |
116 | +#define __IO volatile /*!< defines 'read / write' permissions */ | |
117 | + | |
118 | + | |
119 | + | |
120 | +/******************************************************************************* | |
121 | + * Register Abstraction | |
122 | + ******************************************************************************/ | |
123 | +/** @addtogroup CMSIS_CM3_core_register CMSIS CM3 Core Register | |
124 | + @{ | |
125 | +*/ | |
126 | + | |
127 | + | |
128 | +/** @addtogroup CMSIS_CM3_NVIC CMSIS CM3 NVIC | |
129 | + memory mapped structure for Nested Vectored Interrupt Controller (NVIC) | |
130 | + @{ | |
131 | + */ | |
132 | +typedef struct | |
133 | +{ | |
134 | + __IO uint32_t ISER[8]; /*!< Offset: 0x000 Interrupt Set Enable Register */ | |
135 | + uint32_t RESERVED0[24]; | |
136 | + __IO uint32_t ICER[8]; /*!< Offset: 0x080 Interrupt Clear Enable Register */ | |
137 | + uint32_t RSERVED1[24]; | |
138 | + __IO uint32_t ISPR[8]; /*!< Offset: 0x100 Interrupt Set Pending Register */ | |
139 | + uint32_t RESERVED2[24]; | |
140 | + __IO uint32_t ICPR[8]; /*!< Offset: 0x180 Interrupt Clear Pending Register */ | |
141 | + uint32_t RESERVED3[24]; | |
142 | + __IO uint32_t IABR[8]; /*!< Offset: 0x200 Interrupt Active bit Register */ | |
143 | + uint32_t RESERVED4[56]; | |
144 | + __IO uint8_t IP[240]; /*!< Offset: 0x300 Interrupt Priority Register (8Bit wide) */ | |
145 | + uint32_t RESERVED5[644]; | |
146 | + __O uint32_t STIR; /*!< Offset: 0xE00 Software Trigger Interrupt Register */ | |
147 | +} NVIC_Type; | |
148 | +/*@}*/ /* end of group CMSIS_CM3_NVIC */ | |
149 | + | |
150 | + | |
151 | +/** @addtogroup CMSIS_CM3_SCB CMSIS CM3 SCB | |
152 | + memory mapped structure for System Control Block (SCB) | |
153 | + @{ | |
154 | + */ | |
155 | +typedef struct | |
156 | +{ | |
157 | + __I uint32_t CPUID; /*!< Offset: 0x00 CPU ID Base Register */ | |
158 | + __IO uint32_t ICSR; /*!< Offset: 0x04 Interrupt Control State Register */ | |
159 | + __IO uint32_t VTOR; /*!< Offset: 0x08 Vector Table Offset Register */ | |
160 | + __IO uint32_t AIRCR; /*!< Offset: 0x0C Application Interrupt / Reset Control Register */ | |
161 | + __IO uint32_t SCR; /*!< Offset: 0x10 System Control Register */ | |
162 | + __IO uint32_t CCR; /*!< Offset: 0x14 Configuration Control Register */ | |
163 | + __IO uint8_t SHP[12]; /*!< Offset: 0x18 System Handlers Priority Registers (4-7, 8-11, 12-15) */ | |
164 | + __IO uint32_t SHCSR; /*!< Offset: 0x24 System Handler Control and State Register */ | |
165 | + __IO uint32_t CFSR; /*!< Offset: 0x28 Configurable Fault Status Register */ | |
166 | + __IO uint32_t HFSR; /*!< Offset: 0x2C Hard Fault Status Register */ | |
167 | + __IO uint32_t DFSR; /*!< Offset: 0x30 Debug Fault Status Register */ | |
168 | + __IO uint32_t MMFAR; /*!< Offset: 0x34 Mem Manage Address Register */ | |
169 | + __IO uint32_t BFAR; /*!< Offset: 0x38 Bus Fault Address Register */ | |
170 | + __IO uint32_t AFSR; /*!< Offset: 0x3C Auxiliary Fault Status Register */ | |
171 | + __I uint32_t PFR[2]; /*!< Offset: 0x40 Processor Feature Register */ | |
172 | + __I uint32_t DFR; /*!< Offset: 0x48 Debug Feature Register */ | |
173 | + __I uint32_t ADR; /*!< Offset: 0x4C Auxiliary Feature Register */ | |
174 | + __I uint32_t MMFR[4]; /*!< Offset: 0x50 Memory Model Feature Register */ | |
175 | + __I uint32_t ISAR[5]; /*!< Offset: 0x60 ISA Feature Register */ | |
176 | +} SCB_Type; | |
177 | + | |
178 | +/* SCB CPUID Register Definitions */ | |
179 | +#define SCB_CPUID_IMPLEMENTER_Pos 24 /*!< SCB CPUID: IMPLEMENTER Position */ | |
180 | +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFul << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ | |
181 | + | |
182 | +#define SCB_CPUID_VARIANT_Pos 20 /*!< SCB CPUID: VARIANT Position */ | |
183 | +#define SCB_CPUID_VARIANT_Msk (0xFul << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ | |
184 | + | |
185 | +#define SCB_CPUID_PARTNO_Pos 4 /*!< SCB CPUID: PARTNO Position */ | |
186 | +#define SCB_CPUID_PARTNO_Msk (0xFFFul << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ | |
187 | + | |
188 | +#define SCB_CPUID_REVISION_Pos 0 /*!< SCB CPUID: REVISION Position */ | |
189 | +#define SCB_CPUID_REVISION_Msk (0xFul << SCB_CPUID_REVISION_Pos) /*!< SCB CPUID: REVISION Mask */ | |
190 | + | |
191 | +/* SCB Interrupt Control State Register Definitions */ | |
192 | +#define SCB_ICSR_NMIPENDSET_Pos 31 /*!< SCB ICSR: NMIPENDSET Position */ | |
193 | +#define SCB_ICSR_NMIPENDSET_Msk (1ul << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ | |
194 | + | |
195 | +#define SCB_ICSR_PENDSVSET_Pos 28 /*!< SCB ICSR: PENDSVSET Position */ | |
196 | +#define SCB_ICSR_PENDSVSET_Msk (1ul << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ | |
197 | + | |
198 | +#define SCB_ICSR_PENDSVCLR_Pos 27 /*!< SCB ICSR: PENDSVCLR Position */ | |
199 | +#define SCB_ICSR_PENDSVCLR_Msk (1ul << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ | |
200 | + | |
201 | +#define SCB_ICSR_PENDSTSET_Pos 26 /*!< SCB ICSR: PENDSTSET Position */ | |
202 | +#define SCB_ICSR_PENDSTSET_Msk (1ul << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ | |
203 | + | |
204 | +#define SCB_ICSR_PENDSTCLR_Pos 25 /*!< SCB ICSR: PENDSTCLR Position */ | |
205 | +#define SCB_ICSR_PENDSTCLR_Msk (1ul << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ | |
206 | + | |
207 | +#define SCB_ICSR_ISRPREEMPT_Pos 23 /*!< SCB ICSR: ISRPREEMPT Position */ | |
208 | +#define SCB_ICSR_ISRPREEMPT_Msk (1ul << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ | |
209 | + | |
210 | +#define SCB_ICSR_ISRPENDING_Pos 22 /*!< SCB ICSR: ISRPENDING Position */ | |
211 | +#define SCB_ICSR_ISRPENDING_Msk (1ul << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ | |
212 | + | |
213 | +#define SCB_ICSR_VECTPENDING_Pos 12 /*!< SCB ICSR: VECTPENDING Position */ | |
214 | +#define SCB_ICSR_VECTPENDING_Msk (0x1FFul << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ | |
215 | + | |
216 | +#define SCB_ICSR_RETTOBASE_Pos 11 /*!< SCB ICSR: RETTOBASE Position */ | |
217 | +#define SCB_ICSR_RETTOBASE_Msk (1ul << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ | |
218 | + | |
219 | +#define SCB_ICSR_VECTACTIVE_Pos 0 /*!< SCB ICSR: VECTACTIVE Position */ | |
220 | +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFul << SCB_ICSR_VECTACTIVE_Pos) /*!< SCB ICSR: VECTACTIVE Mask */ | |
221 | + | |
222 | +/* SCB Interrupt Control State Register Definitions */ | |
223 | +#define SCB_VTOR_TBLBASE_Pos 29 /*!< SCB VTOR: TBLBASE Position */ | |
224 | +#define SCB_VTOR_TBLBASE_Msk (0x1FFul << SCB_VTOR_TBLBASE_Pos) /*!< SCB VTOR: TBLBASE Mask */ | |
225 | + | |
226 | +#define SCB_VTOR_TBLOFF_Pos 7 /*!< SCB VTOR: TBLOFF Position */ | |
227 | +#define SCB_VTOR_TBLOFF_Msk (0x3FFFFFul << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ | |
228 | + | |
229 | +/* SCB Application Interrupt and Reset Control Register Definitions */ | |
230 | +#define SCB_AIRCR_VECTKEY_Pos 16 /*!< SCB AIRCR: VECTKEY Position */ | |
231 | +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFul << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ | |
232 | + | |
233 | +#define SCB_AIRCR_VECTKEYSTAT_Pos 16 /*!< SCB AIRCR: VECTKEYSTAT Position */ | |
234 | +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFul << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ | |
235 | + | |
236 | +#define SCB_AIRCR_ENDIANESS_Pos 15 /*!< SCB AIRCR: ENDIANESS Position */ | |
237 | +#define SCB_AIRCR_ENDIANESS_Msk (1ul << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ | |
238 | + | |
239 | +#define SCB_AIRCR_PRIGROUP_Pos 8 /*!< SCB AIRCR: PRIGROUP Position */ | |
240 | +#define SCB_AIRCR_PRIGROUP_Msk (7ul << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ | |
241 | + | |
242 | +#define SCB_AIRCR_SYSRESETREQ_Pos 2 /*!< SCB AIRCR: SYSRESETREQ Position */ | |
243 | +#define SCB_AIRCR_SYSRESETREQ_Msk (1ul << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ | |
244 | + | |
245 | +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1 /*!< SCB AIRCR: VECTCLRACTIVE Position */ | |
246 | +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1ul << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ | |
247 | + | |
248 | +#define SCB_AIRCR_VECTRESET_Pos 0 /*!< SCB AIRCR: VECTRESET Position */ | |
249 | +#define SCB_AIRCR_VECTRESET_Msk (1ul << SCB_AIRCR_VECTRESET_Pos) /*!< SCB AIRCR: VECTRESET Mask */ | |
250 | + | |
251 | +/* SCB System Control Register Definitions */ | |
252 | +#define SCB_SCR_SEVONPEND_Pos 4 /*!< SCB SCR: SEVONPEND Position */ | |
253 | +#define SCB_SCR_SEVONPEND_Msk (1ul << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ | |
254 | + | |
255 | +#define SCB_SCR_SLEEPDEEP_Pos 2 /*!< SCB SCR: SLEEPDEEP Position */ | |
256 | +#define SCB_SCR_SLEEPDEEP_Msk (1ul << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ | |
257 | + | |
258 | +#define SCB_SCR_SLEEPONEXIT_Pos 1 /*!< SCB SCR: SLEEPONEXIT Position */ | |
259 | +#define SCB_SCR_SLEEPONEXIT_Msk (1ul << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ | |
260 | + | |
261 | +/* SCB Configuration Control Register Definitions */ | |
262 | +#define SCB_CCR_STKALIGN_Pos 9 /*!< SCB CCR: STKALIGN Position */ | |
263 | +#define SCB_CCR_STKALIGN_Msk (1ul << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ | |
264 | + | |
265 | +#define SCB_CCR_BFHFNMIGN_Pos 8 /*!< SCB CCR: BFHFNMIGN Position */ | |
266 | +#define SCB_CCR_BFHFNMIGN_Msk (1ul << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ | |
267 | + | |
268 | +#define SCB_CCR_DIV_0_TRP_Pos 4 /*!< SCB CCR: DIV_0_TRP Position */ | |
269 | +#define SCB_CCR_DIV_0_TRP_Msk (1ul << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ | |
270 | + | |
271 | +#define SCB_CCR_UNALIGN_TRP_Pos 3 /*!< SCB CCR: UNALIGN_TRP Position */ | |
272 | +#define SCB_CCR_UNALIGN_TRP_Msk (1ul << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ | |
273 | + | |
274 | +#define SCB_CCR_USERSETMPEND_Pos 1 /*!< SCB CCR: USERSETMPEND Position */ | |
275 | +#define SCB_CCR_USERSETMPEND_Msk (1ul << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ | |
276 | + | |
277 | +#define SCB_CCR_NONBASETHRDENA_Pos 0 /*!< SCB CCR: NONBASETHRDENA Position */ | |
278 | +#define SCB_CCR_NONBASETHRDENA_Msk (1ul << SCB_CCR_NONBASETHRDENA_Pos) /*!< SCB CCR: NONBASETHRDENA Mask */ | |
279 | + | |
280 | +/* SCB System Handler Control and State Register Definitions */ | |
281 | +#define SCB_SHCSR_USGFAULTENA_Pos 18 /*!< SCB SHCSR: USGFAULTENA Position */ | |
282 | +#define SCB_SHCSR_USGFAULTENA_Msk (1ul << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ | |
283 | + | |
284 | +#define SCB_SHCSR_BUSFAULTENA_Pos 17 /*!< SCB SHCSR: BUSFAULTENA Position */ | |
285 | +#define SCB_SHCSR_BUSFAULTENA_Msk (1ul << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ | |
286 | + | |
287 | +#define SCB_SHCSR_MEMFAULTENA_Pos 16 /*!< SCB SHCSR: MEMFAULTENA Position */ | |
288 | +#define SCB_SHCSR_MEMFAULTENA_Msk (1ul << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ | |
289 | + | |
290 | +#define SCB_SHCSR_SVCALLPENDED_Pos 15 /*!< SCB SHCSR: SVCALLPENDED Position */ | |
291 | +#define SCB_SHCSR_SVCALLPENDED_Msk (1ul << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ | |
292 | + | |
293 | +#define SCB_SHCSR_BUSFAULTPENDED_Pos 14 /*!< SCB SHCSR: BUSFAULTPENDED Position */ | |
294 | +#define SCB_SHCSR_BUSFAULTPENDED_Msk (1ul << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ | |
295 | + | |
296 | +#define SCB_SHCSR_MEMFAULTPENDED_Pos 13 /*!< SCB SHCSR: MEMFAULTPENDED Position */ | |
297 | +#define SCB_SHCSR_MEMFAULTPENDED_Msk (1ul << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ | |
298 | + | |
299 | +#define SCB_SHCSR_USGFAULTPENDED_Pos 12 /*!< SCB SHCSR: USGFAULTPENDED Position */ | |
300 | +#define SCB_SHCSR_USGFAULTPENDED_Msk (1ul << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ | |
301 | + | |
302 | +#define SCB_SHCSR_SYSTICKACT_Pos 11 /*!< SCB SHCSR: SYSTICKACT Position */ | |
303 | +#define SCB_SHCSR_SYSTICKACT_Msk (1ul << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ | |
304 | + | |
305 | +#define SCB_SHCSR_PENDSVACT_Pos 10 /*!< SCB SHCSR: PENDSVACT Position */ | |
306 | +#define SCB_SHCSR_PENDSVACT_Msk (1ul << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ | |
307 | + | |
308 | +#define SCB_SHCSR_MONITORACT_Pos 8 /*!< SCB SHCSR: MONITORACT Position */ | |
309 | +#define SCB_SHCSR_MONITORACT_Msk (1ul << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ | |
310 | + | |
311 | +#define SCB_SHCSR_SVCALLACT_Pos 7 /*!< SCB SHCSR: SVCALLACT Position */ | |
312 | +#define SCB_SHCSR_SVCALLACT_Msk (1ul << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ | |
313 | + | |
314 | +#define SCB_SHCSR_USGFAULTACT_Pos 3 /*!< SCB SHCSR: USGFAULTACT Position */ | |
315 | +#define SCB_SHCSR_USGFAULTACT_Msk (1ul << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ | |
316 | + | |
317 | +#define SCB_SHCSR_BUSFAULTACT_Pos 1 /*!< SCB SHCSR: BUSFAULTACT Position */ | |
318 | +#define SCB_SHCSR_BUSFAULTACT_Msk (1ul << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ | |
319 | + | |
320 | +#define SCB_SHCSR_MEMFAULTACT_Pos 0 /*!< SCB SHCSR: MEMFAULTACT Position */ | |
321 | +#define SCB_SHCSR_MEMFAULTACT_Msk (1ul << SCB_SHCSR_MEMFAULTACT_Pos) /*!< SCB SHCSR: MEMFAULTACT Mask */ | |
322 | + | |
323 | +/* SCB Configurable Fault Status Registers Definitions */ | |
324 | +#define SCB_CFSR_USGFAULTSR_Pos 16 /*!< SCB CFSR: Usage Fault Status Register Position */ | |
325 | +#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFul << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */ | |
326 | + | |
327 | +#define SCB_CFSR_BUSFAULTSR_Pos 8 /*!< SCB CFSR: Bus Fault Status Register Position */ | |
328 | +#define SCB_CFSR_BUSFAULTSR_Msk (0xFFul << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */ | |
329 | + | |
330 | +#define SCB_CFSR_MEMFAULTSR_Pos 0 /*!< SCB CFSR: Memory Manage Fault Status Register Position */ | |
331 | +#define SCB_CFSR_MEMFAULTSR_Msk (0xFFul << SCB_CFSR_MEMFAULTSR_Pos) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ | |
332 | + | |
333 | +/* SCB Hard Fault Status Registers Definitions */ | |
334 | +#define SCB_HFSR_DEBUGEVT_Pos 31 /*!< SCB HFSR: DEBUGEVT Position */ | |
335 | +#define SCB_HFSR_DEBUGEVT_Msk (1ul << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ | |
336 | + | |
337 | +#define SCB_HFSR_FORCED_Pos 30 /*!< SCB HFSR: FORCED Position */ | |
338 | +#define SCB_HFSR_FORCED_Msk (1ul << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ | |
339 | + | |
340 | +#define SCB_HFSR_VECTTBL_Pos 1 /*!< SCB HFSR: VECTTBL Position */ | |
341 | +#define SCB_HFSR_VECTTBL_Msk (1ul << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */ | |
342 | + | |
343 | +/* SCB Debug Fault Status Register Definitions */ | |
344 | +#define SCB_DFSR_EXTERNAL_Pos 4 /*!< SCB DFSR: EXTERNAL Position */ | |
345 | +#define SCB_DFSR_EXTERNAL_Msk (1ul << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ | |
346 | + | |
347 | +#define SCB_DFSR_VCATCH_Pos 3 /*!< SCB DFSR: VCATCH Position */ | |
348 | +#define SCB_DFSR_VCATCH_Msk (1ul << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ | |
349 | + | |
350 | +#define SCB_DFSR_DWTTRAP_Pos 2 /*!< SCB DFSR: DWTTRAP Position */ | |
351 | +#define SCB_DFSR_DWTTRAP_Msk (1ul << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ | |
352 | + | |
353 | +#define SCB_DFSR_BKPT_Pos 1 /*!< SCB DFSR: BKPT Position */ | |
354 | +#define SCB_DFSR_BKPT_Msk (1ul << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ | |
355 | + | |
356 | +#define SCB_DFSR_HALTED_Pos 0 /*!< SCB DFSR: HALTED Position */ | |
357 | +#define SCB_DFSR_HALTED_Msk (1ul << SCB_DFSR_HALTED_Pos) /*!< SCB DFSR: HALTED Mask */ | |
358 | +/*@}*/ /* end of group CMSIS_CM3_SCB */ | |
359 | + | |
360 | + | |
361 | +/** @addtogroup CMSIS_CM3_SysTick CMSIS CM3 SysTick | |
362 | + memory mapped structure for SysTick | |
363 | + @{ | |
364 | + */ | |
365 | +typedef struct | |
366 | +{ | |
367 | + __IO uint32_t CTRL; /*!< Offset: 0x00 SysTick Control and Status Register */ | |
368 | + __IO uint32_t LOAD; /*!< Offset: 0x04 SysTick Reload Value Register */ | |
369 | + __IO uint32_t VAL; /*!< Offset: 0x08 SysTick Current Value Register */ | |
370 | + __I uint32_t CALIB; /*!< Offset: 0x0C SysTick Calibration Register */ | |
371 | +} SysTick_Type; | |
372 | + | |
373 | +/* SysTick Control / Status Register Definitions */ | |
374 | +#define SysTick_CTRL_COUNTFLAG_Pos 16 /*!< SysTick CTRL: COUNTFLAG Position */ | |
375 | +#define SysTick_CTRL_COUNTFLAG_Msk (1ul << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ | |
376 | + | |
377 | +#define SysTick_CTRL_CLKSOURCE_Pos 2 /*!< SysTick CTRL: CLKSOURCE Position */ | |
378 | +#define SysTick_CTRL_CLKSOURCE_Msk (1ul << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ | |
379 | + | |
380 | +#define SysTick_CTRL_TICKINT_Pos 1 /*!< SysTick CTRL: TICKINT Position */ | |
381 | +#define SysTick_CTRL_TICKINT_Msk (1ul << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ | |
382 | + | |
383 | +#define SysTick_CTRL_ENABLE_Pos 0 /*!< SysTick CTRL: ENABLE Position */ | |
384 | +#define SysTick_CTRL_ENABLE_Msk (1ul << SysTick_CTRL_ENABLE_Pos) /*!< SysTick CTRL: ENABLE Mask */ | |
385 | + | |
386 | +/* SysTick Reload Register Definitions */ | |
387 | +#define SysTick_LOAD_RELOAD_Pos 0 /*!< SysTick LOAD: RELOAD Position */ | |
388 | +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFul << SysTick_LOAD_RELOAD_Pos) /*!< SysTick LOAD: RELOAD Mask */ | |
389 | + | |
390 | +/* SysTick Current Register Definitions */ | |
391 | +#define SysTick_VAL_CURRENT_Pos 0 /*!< SysTick VAL: CURRENT Position */ | |
392 | +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFul << SysTick_VAL_CURRENT_Pos) /*!< SysTick VAL: CURRENT Mask */ | |
393 | + | |
394 | +/* SysTick Calibration Register Definitions */ | |
395 | +#define SysTick_CALIB_NOREF_Pos 31 /*!< SysTick CALIB: NOREF Position */ | |
396 | +#define SysTick_CALIB_NOREF_Msk (1ul << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ | |
397 | + | |
398 | +#define SysTick_CALIB_SKEW_Pos 30 /*!< SysTick CALIB: SKEW Position */ | |
399 | +#define SysTick_CALIB_SKEW_Msk (1ul << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ | |
400 | + | |
401 | +#define SysTick_CALIB_TENMS_Pos 0 /*!< SysTick CALIB: TENMS Position */ | |
402 | +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFul << SysTick_VAL_CURRENT_Pos) /*!< SysTick CALIB: TENMS Mask */ | |
403 | +/*@}*/ /* end of group CMSIS_CM3_SysTick */ | |
404 | + | |
405 | + | |
406 | +/** @addtogroup CMSIS_CM3_ITM CMSIS CM3 ITM | |
407 | + memory mapped structure for Instrumentation Trace Macrocell (ITM) | |
408 | + @{ | |
409 | + */ | |
410 | +typedef struct | |
411 | +{ | |
412 | + __O union | |
413 | + { | |
414 | + __O uint8_t u8; /*!< Offset: ITM Stimulus Port 8-bit */ | |
415 | + __O uint16_t u16; /*!< Offset: ITM Stimulus Port 16-bit */ | |
416 | + __O uint32_t u32; /*!< Offset: ITM Stimulus Port 32-bit */ | |
417 | + } PORT [32]; /*!< Offset: 0x00 ITM Stimulus Port Registers */ | |
418 | + uint32_t RESERVED0[864]; | |
419 | + __IO uint32_t TER; /*!< Offset: ITM Trace Enable Register */ | |
420 | + uint32_t RESERVED1[15]; | |
421 | + __IO uint32_t TPR; /*!< Offset: ITM Trace Privilege Register */ | |
422 | + uint32_t RESERVED2[15]; | |
423 | + __IO uint32_t TCR; /*!< Offset: ITM Trace Control Register */ | |
424 | + uint32_t RESERVED3[29]; | |
425 | + __IO uint32_t IWR; /*!< Offset: ITM Integration Write Register */ | |
426 | + __IO uint32_t IRR; /*!< Offset: ITM Integration Read Register */ | |
427 | + __IO uint32_t IMCR; /*!< Offset: ITM Integration Mode Control Register */ | |
428 | + uint32_t RESERVED4[43]; | |
429 | + __IO uint32_t LAR; /*!< Offset: ITM Lock Access Register */ | |
430 | + __IO uint32_t LSR; /*!< Offset: ITM Lock Status Register */ | |
431 | + uint32_t RESERVED5[6]; | |
432 | + __I uint32_t PID4; /*!< Offset: ITM Peripheral Identification Register #4 */ | |
433 | + __I uint32_t PID5; /*!< Offset: ITM Peripheral Identification Register #5 */ | |
434 | + __I uint32_t PID6; /*!< Offset: ITM Peripheral Identification Register #6 */ | |
435 | + __I uint32_t PID7; /*!< Offset: ITM Peripheral Identification Register #7 */ | |
436 | + __I uint32_t PID0; /*!< Offset: ITM Peripheral Identification Register #0 */ | |
437 | + __I uint32_t PID1; /*!< Offset: ITM Peripheral Identification Register #1 */ | |
438 | + __I uint32_t PID2; /*!< Offset: ITM Peripheral Identification Register #2 */ | |
439 | + __I uint32_t PID3; /*!< Offset: ITM Peripheral Identification Register #3 */ | |
440 | + __I uint32_t CID0; /*!< Offset: ITM Component Identification Register #0 */ | |
441 | + __I uint32_t CID1; /*!< Offset: ITM Component Identification Register #1 */ | |
442 | + __I uint32_t CID2; /*!< Offset: ITM Component Identification Register #2 */ | |
443 | + __I uint32_t CID3; /*!< Offset: ITM Component Identification Register #3 */ | |
444 | +} ITM_Type; | |
445 | + | |
446 | +/* ITM Trace Privilege Register Definitions */ | |
447 | +#define ITM_TPR_PRIVMASK_Pos 0 /*!< ITM TPR: PRIVMASK Position */ | |
448 | +#define ITM_TPR_PRIVMASK_Msk (0xFul << ITM_TPR_PRIVMASK_Pos) /*!< ITM TPR: PRIVMASK Mask */ | |
449 | + | |
450 | +/* ITM Trace Control Register Definitions */ | |
451 | +#define ITM_TCR_BUSY_Pos 23 /*!< ITM TCR: BUSY Position */ | |
452 | +#define ITM_TCR_BUSY_Msk (1ul << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ | |
453 | + | |
454 | +#define ITM_TCR_ATBID_Pos 16 /*!< ITM TCR: ATBID Position */ | |
455 | +#define ITM_TCR_ATBID_Msk (0x7Ful << ITM_TCR_ATBID_Pos) /*!< ITM TCR: ATBID Mask */ | |
456 | + | |
457 | +#define ITM_TCR_TSPrescale_Pos 8 /*!< ITM TCR: TSPrescale Position */ | |
458 | +#define ITM_TCR_TSPrescale_Msk (3ul << ITM_TCR_TSPrescale_Pos) /*!< ITM TCR: TSPrescale Mask */ | |
459 | + | |
460 | +#define ITM_TCR_SWOENA_Pos 4 /*!< ITM TCR: SWOENA Position */ | |
461 | +#define ITM_TCR_SWOENA_Msk (1ul << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ | |
462 | + | |
463 | +#define ITM_TCR_DWTENA_Pos 3 /*!< ITM TCR: DWTENA Position */ | |
464 | +#define ITM_TCR_DWTENA_Msk (1ul << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ | |
465 | + | |
466 | +#define ITM_TCR_SYNCENA_Pos 2 /*!< ITM TCR: SYNCENA Position */ | |
467 | +#define ITM_TCR_SYNCENA_Msk (1ul << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ | |
468 | + | |
469 | +#define ITM_TCR_TSENA_Pos 1 /*!< ITM TCR: TSENA Position */ | |
470 | +#define ITM_TCR_TSENA_Msk (1ul << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ | |
471 | + | |
472 | +#define ITM_TCR_ITMENA_Pos 0 /*!< ITM TCR: ITM Enable bit Position */ | |
473 | +#define ITM_TCR_ITMENA_Msk (1ul << ITM_TCR_ITMENA_Pos) /*!< ITM TCR: ITM Enable bit Mask */ | |
474 | + | |
475 | +/* ITM Integration Write Register Definitions */ | |
476 | +#define ITM_IWR_ATVALIDM_Pos 0 /*!< ITM IWR: ATVALIDM Position */ | |
477 | +#define ITM_IWR_ATVALIDM_Msk (1ul << ITM_IWR_ATVALIDM_Pos) /*!< ITM IWR: ATVALIDM Mask */ | |
478 | + | |
479 | +/* ITM Integration Read Register Definitions */ | |
480 | +#define ITM_IRR_ATREADYM_Pos 0 /*!< ITM IRR: ATREADYM Position */ | |
481 | +#define ITM_IRR_ATREADYM_Msk (1ul << ITM_IRR_ATREADYM_Pos) /*!< ITM IRR: ATREADYM Mask */ | |
482 | + | |
483 | +/* ITM Integration Mode Control Register Definitions */ | |
484 | +#define ITM_IMCR_INTEGRATION_Pos 0 /*!< ITM IMCR: INTEGRATION Position */ | |
485 | +#define ITM_IMCR_INTEGRATION_Msk (1ul << ITM_IMCR_INTEGRATION_Pos) /*!< ITM IMCR: INTEGRATION Mask */ | |
486 | + | |
487 | +/* ITM Lock Status Register Definitions */ | |
488 | +#define ITM_LSR_ByteAcc_Pos 2 /*!< ITM LSR: ByteAcc Position */ | |
489 | +#define ITM_LSR_ByteAcc_Msk (1ul << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */ | |
490 | + | |
491 | +#define ITM_LSR_Access_Pos 1 /*!< ITM LSR: Access Position */ | |
492 | +#define ITM_LSR_Access_Msk (1ul << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */ | |
493 | + | |
494 | +#define ITM_LSR_Present_Pos 0 /*!< ITM LSR: Present Position */ | |
495 | +#define ITM_LSR_Present_Msk (1ul << ITM_LSR_Present_Pos) /*!< ITM LSR: Present Mask */ | |
496 | +/*@}*/ /* end of group CMSIS_CM3_ITM */ | |
497 | + | |
498 | + | |
499 | +/** @addtogroup CMSIS_CM3_InterruptType CMSIS CM3 Interrupt Type | |
500 | + memory mapped structure for Interrupt Type | |
501 | + @{ | |
502 | + */ | |
503 | +typedef struct | |
504 | +{ | |
505 | + uint32_t RESERVED0; | |
506 | + __I uint32_t ICTR; /*!< Offset: 0x04 Interrupt Control Type Register */ | |
507 | +#if ((defined __CM3_REV) && (__CM3_REV >= 0x200)) | |
508 | + __IO uint32_t ACTLR; /*!< Offset: 0x08 Auxiliary Control Register */ | |
509 | +#else | |
510 | + uint32_t RESERVED1; | |
511 | +#endif | |
512 | +} InterruptType_Type; | |
513 | + | |
514 | +/* Interrupt Controller Type Register Definitions */ | |
515 | +#define InterruptType_ICTR_INTLINESNUM_Pos 0 /*!< InterruptType ICTR: INTLINESNUM Position */ | |
516 | +#define InterruptType_ICTR_INTLINESNUM_Msk (0x1Ful << InterruptType_ICTR_INTLINESNUM_Pos) /*!< InterruptType ICTR: INTLINESNUM Mask */ | |
517 | + | |
518 | +/* Auxiliary Control Register Definitions */ | |
519 | +#define InterruptType_ACTLR_DISFOLD_Pos 2 /*!< InterruptType ACTLR: DISFOLD Position */ | |
520 | +#define InterruptType_ACTLR_DISFOLD_Msk (1ul << InterruptType_ACTLR_DISFOLD_Pos) /*!< InterruptType ACTLR: DISFOLD Mask */ | |
521 | + | |
522 | +#define InterruptType_ACTLR_DISDEFWBUF_Pos 1 /*!< InterruptType ACTLR: DISDEFWBUF Position */ | |
523 | +#define InterruptType_ACTLR_DISDEFWBUF_Msk (1ul << InterruptType_ACTLR_DISDEFWBUF_Pos) /*!< InterruptType ACTLR: DISDEFWBUF Mask */ | |
524 | + | |
525 | +#define InterruptType_ACTLR_DISMCYCINT_Pos 0 /*!< InterruptType ACTLR: DISMCYCINT Position */ | |
526 | +#define InterruptType_ACTLR_DISMCYCINT_Msk (1ul << InterruptType_ACTLR_DISMCYCINT_Pos) /*!< InterruptType ACTLR: DISMCYCINT Mask */ | |
527 | +/*@}*/ /* end of group CMSIS_CM3_InterruptType */ | |
528 | + | |
529 | + | |
530 | +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1) | |
531 | +/** @addtogroup CMSIS_CM3_MPU CMSIS CM3 MPU | |
532 | + memory mapped structure for Memory Protection Unit (MPU) | |
533 | + @{ | |
534 | + */ | |
535 | +typedef struct | |
536 | +{ | |
537 | + __I uint32_t TYPE; /*!< Offset: 0x00 MPU Type Register */ | |
538 | + __IO uint32_t CTRL; /*!< Offset: 0x04 MPU Control Register */ | |
539 | + __IO uint32_t RNR; /*!< Offset: 0x08 MPU Region RNRber Register */ | |
540 | + __IO uint32_t RBAR; /*!< Offset: 0x0C MPU Region Base Address Register */ | |
541 | + __IO uint32_t RASR; /*!< Offset: 0x10 MPU Region Attribute and Size Register */ | |
542 | + __IO uint32_t RBAR_A1; /*!< Offset: 0x14 MPU Alias 1 Region Base Address Register */ | |
543 | + __IO uint32_t RASR_A1; /*!< Offset: 0x18 MPU Alias 1 Region Attribute and Size Register */ | |
544 | + __IO uint32_t RBAR_A2; /*!< Offset: 0x1C MPU Alias 2 Region Base Address Register */ | |
545 | + __IO uint32_t RASR_A2; /*!< Offset: 0x20 MPU Alias 2 Region Attribute and Size Register */ | |
546 | + __IO uint32_t RBAR_A3; /*!< Offset: 0x24 MPU Alias 3 Region Base Address Register */ | |
547 | + __IO uint32_t RASR_A3; /*!< Offset: 0x28 MPU Alias 3 Region Attribute and Size Register */ | |
548 | +} MPU_Type; | |
549 | + | |
550 | +/* MPU Type Register */ | |
551 | +#define MPU_TYPE_IREGION_Pos 16 /*!< MPU TYPE: IREGION Position */ | |
552 | +#define MPU_TYPE_IREGION_Msk (0xFFul << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ | |
553 | + | |
554 | +#define MPU_TYPE_DREGION_Pos 8 /*!< MPU TYPE: DREGION Position */ | |
555 | +#define MPU_TYPE_DREGION_Msk (0xFFul << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ | |
556 | + | |
557 | +#define MPU_TYPE_SEPARATE_Pos 0 /*!< MPU TYPE: SEPARATE Position */ | |
558 | +#define MPU_TYPE_SEPARATE_Msk (1ul << MPU_TYPE_SEPARATE_Pos) /*!< MPU TYPE: SEPARATE Mask */ | |
559 | + | |
560 | +/* MPU Control Register */ | |
561 | +#define MPU_CTRL_PRIVDEFENA_Pos 2 /*!< MPU CTRL: PRIVDEFENA Position */ | |
562 | +#define MPU_CTRL_PRIVDEFENA_Msk (1ul << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ | |
563 | + | |
564 | +#define MPU_CTRL_HFNMIENA_Pos 1 /*!< MPU CTRL: HFNMIENA Position */ | |
565 | +#define MPU_CTRL_HFNMIENA_Msk (1ul << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ | |
566 | + | |
567 | +#define MPU_CTRL_ENABLE_Pos 0 /*!< MPU CTRL: ENABLE Position */ | |
568 | +#define MPU_CTRL_ENABLE_Msk (1ul << MPU_CTRL_ENABLE_Pos) /*!< MPU CTRL: ENABLE Mask */ | |
569 | + | |
570 | +/* MPU Region Number Register */ | |
571 | +#define MPU_RNR_REGION_Pos 0 /*!< MPU RNR: REGION Position */ | |
572 | +#define MPU_RNR_REGION_Msk (0xFFul << MPU_RNR_REGION_Pos) /*!< MPU RNR: REGION Mask */ | |
573 | + | |
574 | +/* MPU Region Base Address Register */ | |
575 | +#define MPU_RBAR_ADDR_Pos 5 /*!< MPU RBAR: ADDR Position */ | |
576 | +#define MPU_RBAR_ADDR_Msk (0x7FFFFFFul << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ | |
577 | + | |
578 | +#define MPU_RBAR_VALID_Pos 4 /*!< MPU RBAR: VALID Position */ | |
579 | +#define MPU_RBAR_VALID_Msk (1ul << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ | |
580 | + | |
581 | +#define MPU_RBAR_REGION_Pos 0 /*!< MPU RBAR: REGION Position */ | |
582 | +#define MPU_RBAR_REGION_Msk (0xFul << MPU_RBAR_REGION_Pos) /*!< MPU RBAR: REGION Mask */ | |
583 | + | |
584 | +/* MPU Region Attribute and Size Register */ | |
585 | +#define MPU_RASR_XN_Pos 28 /*!< MPU RASR: XN Position */ | |
586 | +#define MPU_RASR_XN_Msk (1ul << MPU_RASR_XN_Pos) /*!< MPU RASR: XN Mask */ | |
587 | + | |
588 | +#define MPU_RASR_AP_Pos 24 /*!< MPU RASR: AP Position */ | |
589 | +#define MPU_RASR_AP_Msk (7ul << MPU_RASR_AP_Pos) /*!< MPU RASR: AP Mask */ | |
590 | + | |
591 | +#define MPU_RASR_TEX_Pos 19 /*!< MPU RASR: TEX Position */ | |
592 | +#define MPU_RASR_TEX_Msk (7ul << MPU_RASR_TEX_Pos) /*!< MPU RASR: TEX Mask */ | |
593 | + | |
594 | +#define MPU_RASR_S_Pos 18 /*!< MPU RASR: Shareable bit Position */ | |
595 | +#define MPU_RASR_S_Msk (1ul << MPU_RASR_S_Pos) /*!< MPU RASR: Shareable bit Mask */ | |
596 | + | |
597 | +#define MPU_RASR_C_Pos 17 /*!< MPU RASR: Cacheable bit Position */ | |
598 | +#define MPU_RASR_C_Msk (1ul << MPU_RASR_C_Pos) /*!< MPU RASR: Cacheable bit Mask */ | |
599 | + | |
600 | +#define MPU_RASR_B_Pos 16 /*!< MPU RASR: Bufferable bit Position */ | |
601 | +#define MPU_RASR_B_Msk (1ul << MPU_RASR_B_Pos) /*!< MPU RASR: Bufferable bit Mask */ | |
602 | + | |
603 | +#define MPU_RASR_SRD_Pos 8 /*!< MPU RASR: Sub-Region Disable Position */ | |
604 | +#define MPU_RASR_SRD_Msk (0xFFul << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */ | |
605 | + | |
606 | +#define MPU_RASR_SIZE_Pos 1 /*!< MPU RASR: Region Size Field Position */ | |
607 | +#define MPU_RASR_SIZE_Msk (0x1Ful << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */ | |
608 | + | |
609 | +#define MPU_RASR_ENA_Pos 0 /*!< MPU RASR: Region enable bit Position */ | |
610 | +#define MPU_RASR_ENA_Msk (0x1Ful << MPU_RASR_ENA_Pos) /*!< MPU RASR: Region enable bit Disable Mask */ | |
611 | + | |
612 | +/*@}*/ /* end of group CMSIS_CM3_MPU */ | |
613 | +#endif | |
614 | + | |
615 | + | |
616 | +/** @addtogroup CMSIS_CM3_CoreDebug CMSIS CM3 Core Debug | |
617 | + memory mapped structure for Core Debug Register | |
618 | + @{ | |
619 | + */ | |
620 | +typedef struct | |
621 | +{ | |
622 | + __IO uint32_t DHCSR; /*!< Offset: 0x00 Debug Halting Control and Status Register */ | |
623 | + __O uint32_t DCRSR; /*!< Offset: 0x04 Debug Core Register Selector Register */ | |
624 | + __IO uint32_t DCRDR; /*!< Offset: 0x08 Debug Core Register Data Register */ | |
625 | + __IO uint32_t DEMCR; /*!< Offset: 0x0C Debug Exception and Monitor Control Register */ | |
626 | +} CoreDebug_Type; | |
627 | + | |
628 | +/* Debug Halting Control and Status Register */ | |
629 | +#define CoreDebug_DHCSR_DBGKEY_Pos 16 /*!< CoreDebug DHCSR: DBGKEY Position */ | |
630 | +#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFul << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */ | |
631 | + | |
632 | +#define CoreDebug_DHCSR_S_RESET_ST_Pos 25 /*!< CoreDebug DHCSR: S_RESET_ST Position */ | |
633 | +#define CoreDebug_DHCSR_S_RESET_ST_Msk (1ul << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< CoreDebug DHCSR: S_RESET_ST Mask */ | |
634 | + | |
635 | +#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24 /*!< CoreDebug DHCSR: S_RETIRE_ST Position */ | |
636 | +#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1ul << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */ | |
637 | + | |
638 | +#define CoreDebug_DHCSR_S_LOCKUP_Pos 19 /*!< CoreDebug DHCSR: S_LOCKUP Position */ | |
639 | +#define CoreDebug_DHCSR_S_LOCKUP_Msk (1ul << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< CoreDebug DHCSR: S_LOCKUP Mask */ | |
640 | + | |
641 | +#define CoreDebug_DHCSR_S_SLEEP_Pos 18 /*!< CoreDebug DHCSR: S_SLEEP Position */ | |
642 | +#define CoreDebug_DHCSR_S_SLEEP_Msk (1ul << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< CoreDebug DHCSR: S_SLEEP Mask */ | |
643 | + | |
644 | +#define CoreDebug_DHCSR_S_HALT_Pos 17 /*!< CoreDebug DHCSR: S_HALT Position */ | |
645 | +#define CoreDebug_DHCSR_S_HALT_Msk (1ul << CoreDebug_DHCSR_S_HALT_Pos) /*!< CoreDebug DHCSR: S_HALT Mask */ | |
646 | + | |
647 | +#define CoreDebug_DHCSR_S_REGRDY_Pos 16 /*!< CoreDebug DHCSR: S_REGRDY Position */ | |
648 | +#define CoreDebug_DHCSR_S_REGRDY_Msk (1ul << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< CoreDebug DHCSR: S_REGRDY Mask */ | |
649 | + | |
650 | +#define CoreDebug_DHCSR_C_SNAPSTALL_Pos 5 /*!< CoreDebug DHCSR: C_SNAPSTALL Position */ | |
651 | +#define CoreDebug_DHCSR_C_SNAPSTALL_Msk (1ul << CoreDebug_DHCSR_C_SNAPSTALL_Pos) /*!< CoreDebug DHCSR: C_SNAPSTALL Mask */ | |
652 | + | |
653 | +#define CoreDebug_DHCSR_C_MASKINTS_Pos 3 /*!< CoreDebug DHCSR: C_MASKINTS Position */ | |
654 | +#define CoreDebug_DHCSR_C_MASKINTS_Msk (1ul << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< CoreDebug DHCSR: C_MASKINTS Mask */ | |
655 | + | |
656 | +#define CoreDebug_DHCSR_C_STEP_Pos 2 /*!< CoreDebug DHCSR: C_STEP Position */ | |
657 | +#define CoreDebug_DHCSR_C_STEP_Msk (1ul << CoreDebug_DHCSR_C_STEP_Pos) /*!< CoreDebug DHCSR: C_STEP Mask */ | |
658 | + | |
659 | +#define CoreDebug_DHCSR_C_HALT_Pos 1 /*!< CoreDebug DHCSR: C_HALT Position */ | |
660 | +#define CoreDebug_DHCSR_C_HALT_Msk (1ul << CoreDebug_DHCSR_C_HALT_Pos) /*!< CoreDebug DHCSR: C_HALT Mask */ | |
661 | + | |
662 | +#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0 /*!< CoreDebug DHCSR: C_DEBUGEN Position */ | |
663 | +#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1ul << CoreDebug_DHCSR_C_DEBUGEN_Pos) /*!< CoreDebug DHCSR: C_DEBUGEN Mask */ | |
664 | + | |
665 | +/* Debug Core Register Selector Register */ | |
666 | +#define CoreDebug_DCRSR_REGWnR_Pos 16 /*!< CoreDebug DCRSR: REGWnR Position */ | |
667 | +#define CoreDebug_DCRSR_REGWnR_Msk (1ul << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */ | |
668 | + | |
669 | +#define CoreDebug_DCRSR_REGSEL_Pos 0 /*!< CoreDebug DCRSR: REGSEL Position */ | |
670 | +#define CoreDebug_DCRSR_REGSEL_Msk (0x1Ful << CoreDebug_DCRSR_REGSEL_Pos) /*!< CoreDebug DCRSR: REGSEL Mask */ | |
671 | + | |
672 | +/* Debug Exception and Monitor Control Register */ | |
673 | +#define CoreDebug_DEMCR_TRCENA_Pos 24 /*!< CoreDebug DEMCR: TRCENA Position */ | |
674 | +#define CoreDebug_DEMCR_TRCENA_Msk (1ul << CoreDebug_DEMCR_TRCENA_Pos) /*!< CoreDebug DEMCR: TRCENA Mask */ | |
675 | + | |
676 | +#define CoreDebug_DEMCR_MON_REQ_Pos 19 /*!< CoreDebug DEMCR: MON_REQ Position */ | |
677 | +#define CoreDebug_DEMCR_MON_REQ_Msk (1ul << CoreDebug_DEMCR_MON_REQ_Pos) /*!< CoreDebug DEMCR: MON_REQ Mask */ | |
678 | + | |
679 | +#define CoreDebug_DEMCR_MON_STEP_Pos 18 /*!< CoreDebug DEMCR: MON_STEP Position */ | |
680 | +#define CoreDebug_DEMCR_MON_STEP_Msk (1ul << CoreDebug_DEMCR_MON_STEP_Pos) /*!< CoreDebug DEMCR: MON_STEP Mask */ | |
681 | + | |
682 | +#define CoreDebug_DEMCR_MON_PEND_Pos 17 /*!< CoreDebug DEMCR: MON_PEND Position */ | |
683 | +#define CoreDebug_DEMCR_MON_PEND_Msk (1ul << CoreDebug_DEMCR_MON_PEND_Pos) /*!< CoreDebug DEMCR: MON_PEND Mask */ | |
684 | + | |
685 | +#define CoreDebug_DEMCR_MON_EN_Pos 16 /*!< CoreDebug DEMCR: MON_EN Position */ | |
686 | +#define CoreDebug_DEMCR_MON_EN_Msk (1ul << CoreDebug_DEMCR_MON_EN_Pos) /*!< CoreDebug DEMCR: MON_EN Mask */ | |
687 | + | |
688 | +#define CoreDebug_DEMCR_VC_HARDERR_Pos 10 /*!< CoreDebug DEMCR: VC_HARDERR Position */ | |
689 | +#define CoreDebug_DEMCR_VC_HARDERR_Msk (1ul << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< CoreDebug DEMCR: VC_HARDERR Mask */ | |
690 | + | |
691 | +#define CoreDebug_DEMCR_VC_INTERR_Pos 9 /*!< CoreDebug DEMCR: VC_INTERR Position */ | |
692 | +#define CoreDebug_DEMCR_VC_INTERR_Msk (1ul << CoreDebug_DEMCR_VC_INTERR_Pos) /*!< CoreDebug DEMCR: VC_INTERR Mask */ | |
693 | + | |
694 | +#define CoreDebug_DEMCR_VC_BUSERR_Pos 8 /*!< CoreDebug DEMCR: VC_BUSERR Position */ | |
695 | +#define CoreDebug_DEMCR_VC_BUSERR_Msk (1ul << CoreDebug_DEMCR_VC_BUSERR_Pos) /*!< CoreDebug DEMCR: VC_BUSERR Mask */ | |
696 | + | |
697 | +#define CoreDebug_DEMCR_VC_STATERR_Pos 7 /*!< CoreDebug DEMCR: VC_STATERR Position */ | |
698 | +#define CoreDebug_DEMCR_VC_STATERR_Msk (1ul << CoreDebug_DEMCR_VC_STATERR_Pos) /*!< CoreDebug DEMCR: VC_STATERR Mask */ | |
699 | + | |
700 | +#define CoreDebug_DEMCR_VC_CHKERR_Pos 6 /*!< CoreDebug DEMCR: VC_CHKERR Position */ | |
701 | +#define CoreDebug_DEMCR_VC_CHKERR_Msk (1ul << CoreDebug_DEMCR_VC_CHKERR_Pos) /*!< CoreDebug DEMCR: VC_CHKERR Mask */ | |
702 | + | |
703 | +#define CoreDebug_DEMCR_VC_NOCPERR_Pos 5 /*!< CoreDebug DEMCR: VC_NOCPERR Position */ | |
704 | +#define CoreDebug_DEMCR_VC_NOCPERR_Msk (1ul << CoreDebug_DEMCR_VC_NOCPERR_Pos) /*!< CoreDebug DEMCR: VC_NOCPERR Mask */ | |
705 | + | |
706 | +#define CoreDebug_DEMCR_VC_MMERR_Pos 4 /*!< CoreDebug DEMCR: VC_MMERR Position */ | |
707 | +#define CoreDebug_DEMCR_VC_MMERR_Msk (1ul << CoreDebug_DEMCR_VC_MMERR_Pos) /*!< CoreDebug DEMCR: VC_MMERR Mask */ | |
708 | + | |
709 | +#define CoreDebug_DEMCR_VC_CORERESET_Pos 0 /*!< CoreDebug DEMCR: VC_CORERESET Position */ | |
710 | +#define CoreDebug_DEMCR_VC_CORERESET_Msk (1ul << CoreDebug_DEMCR_VC_CORERESET_Pos) /*!< CoreDebug DEMCR: VC_CORERESET Mask */ | |
711 | +/*@}*/ /* end of group CMSIS_CM3_CoreDebug */ | |
712 | + | |
713 | + | |
714 | +/* Memory mapping of Cortex-M3 Hardware */ | |
715 | +#define SCS_BASE (0xE000E000) /*!< System Control Space Base Address */ | |
716 | +#define ITM_BASE (0xE0000000) /*!< ITM Base Address */ | |
717 | +#define CoreDebug_BASE (0xE000EDF0) /*!< Core Debug Base Address */ | |
718 | +#define SysTick_BASE (SCS_BASE + 0x0010) /*!< SysTick Base Address */ | |
719 | +#define NVIC_BASE (SCS_BASE + 0x0100) /*!< NVIC Base Address */ | |
720 | +#define SCB_BASE (SCS_BASE + 0x0D00) /*!< System Control Block Base Address */ | |
721 | + | |
722 | +#define InterruptType ((InterruptType_Type *) SCS_BASE) /*!< Interrupt Type Register */ | |
723 | +#define SCB ((SCB_Type *) SCB_BASE) /*!< SCB configuration struct */ | |
724 | +#define SysTick ((SysTick_Type *) SysTick_BASE) /*!< SysTick configuration struct */ | |
725 | +#define NVIC ((NVIC_Type *) NVIC_BASE) /*!< NVIC configuration struct */ | |
726 | +#define ITM ((ITM_Type *) ITM_BASE) /*!< ITM configuration struct */ | |
727 | +#define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE) /*!< Core Debug configuration struct */ | |
728 | + | |
729 | +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1) | |
730 | + #define MPU_BASE (SCS_BASE + 0x0D90) /*!< Memory Protection Unit */ | |
731 | + #define MPU ((MPU_Type*) MPU_BASE) /*!< Memory Protection Unit */ | |
732 | +#endif | |
733 | + | |
734 | +/*@}*/ /* end of group CMSIS_CM3_core_register */ | |
735 | + | |
736 | + | |
737 | +/******************************************************************************* | |
738 | + * Hardware Abstraction Layer | |
739 | + ******************************************************************************/ | |
740 | + | |
741 | +#if defined ( __CC_ARM ) | |
742 | + #define __ASM __asm /*!< asm keyword for ARM Compiler */ | |
743 | + #define __INLINE __inline /*!< inline keyword for ARM Compiler */ | |
744 | + | |
745 | +#elif defined ( __ICCARM__ ) | |
746 | + #define __ASM __asm /*!< asm keyword for IAR Compiler */ | |
747 | + #define __INLINE inline /*!< inline keyword for IAR Compiler. Only avaiable in High optimization mode! */ | |
748 | + | |
749 | +#elif defined ( __GNUC__ ) | |
750 | + #define __ASM __asm /*!< asm keyword for GNU Compiler */ | |
751 | + #define __INLINE inline /*!< inline keyword for GNU Compiler */ | |
752 | + | |
753 | +#elif defined ( __TASKING__ ) | |
754 | + #define __ASM __asm /*!< asm keyword for TASKING Compiler */ | |
755 | + #define __INLINE inline /*!< inline keyword for TASKING Compiler */ | |
756 | + | |
757 | +#endif | |
758 | + | |
759 | + | |
760 | +/* ################### Compiler specific Intrinsics ########################### */ | |
761 | + | |
762 | +#if defined ( __CC_ARM ) /*------------------RealView Compiler -----------------*/ | |
763 | +/* ARM armcc specific functions */ | |
764 | + | |
765 | +#define __enable_fault_irq __enable_fiq | |
766 | +#define __disable_fault_irq __disable_fiq | |
767 | + | |
768 | +#define __NOP __nop | |
769 | +#define __WFI __wfi | |
770 | +#define __WFE __wfe | |
771 | +#define __SEV __sev | |
772 | +#define __ISB() __isb(0) | |
773 | +#define __DSB() __dsb(0) | |
774 | +#define __DMB() __dmb(0) | |
775 | +#define __REV __rev | |
776 | +#define __RBIT __rbit | |
777 | +#define __LDREXB(ptr) ((unsigned char ) __ldrex(ptr)) | |
778 | +#define __LDREXH(ptr) ((unsigned short) __ldrex(ptr)) | |
779 | +#define __LDREXW(ptr) ((unsigned int ) __ldrex(ptr)) | |
780 | +#define __STREXB(value, ptr) __strex(value, ptr) | |
781 | +#define __STREXH(value, ptr) __strex(value, ptr) | |
782 | +#define __STREXW(value, ptr) __strex(value, ptr) | |
783 | + | |
784 | + | |
785 | +/* intrinsic unsigned long long __ldrexd(volatile void *ptr) */ | |
786 | +/* intrinsic int __strexd(unsigned long long val, volatile void *ptr) */ | |
787 | +/* intrinsic void __enable_irq(); */ | |
788 | +/* intrinsic void __disable_irq(); */ | |
789 | + | |
790 | + | |
791 | +/** | |
792 | + * @brief Return the Process Stack Pointer | |
793 | + * | |
794 | + * @return ProcessStackPointer | |
795 | + * | |
796 | + * Return the actual process stack pointer | |
797 | + */ | |
798 | +extern uint32_t __get_PSP(void); | |
799 | + | |
800 | +/** | |
801 | + * @brief Set the Process Stack Pointer | |
802 | + * | |
803 | + * @param topOfProcStack Process Stack Pointer | |
804 | + * | |
805 | + * Assign the value ProcessStackPointer to the MSP | |
806 | + * (process stack pointer) Cortex processor register | |
807 | + */ | |
808 | +extern void __set_PSP(uint32_t topOfProcStack); | |
809 | + | |
810 | +/** | |
811 | + * @brief Return the Main Stack Pointer | |
812 | + * | |
813 | + * @return Main Stack Pointer | |
814 | + * | |
815 | + * Return the current value of the MSP (main stack pointer) | |
816 | + * Cortex processor register | |
817 | + */ | |
818 | +extern uint32_t __get_MSP(void); | |
819 | + | |
820 | +/** | |
821 | + * @brief Set the Main Stack Pointer | |
822 | + * | |
823 | + * @param topOfMainStack Main Stack Pointer | |
824 | + * | |
825 | + * Assign the value mainStackPointer to the MSP | |
826 | + * (main stack pointer) Cortex processor register | |
827 | + */ | |
828 | +extern void __set_MSP(uint32_t topOfMainStack); | |
829 | + | |
830 | +/** | |
831 | + * @brief Reverse byte order in unsigned short value | |
832 | + * | |
833 | + * @param value value to reverse | |
834 | + * @return reversed value | |
835 | + * | |
836 | + * Reverse byte order in unsigned short value | |
837 | + */ | |
838 | +extern uint32_t __REV16(uint16_t value); | |
839 | + | |
840 | +/** | |
841 | + * @brief Reverse byte order in signed short value with sign extension to integer | |
842 | + * | |
843 | + * @param value value to reverse | |
844 | + * @return reversed value | |
845 | + * | |
846 | + * Reverse byte order in signed short value with sign extension to integer | |
847 | + */ | |
848 | +extern int32_t __REVSH(int16_t value); | |
849 | + | |
850 | + | |
851 | +#if (__ARMCC_VERSION < 400000) | |
852 | + | |
853 | +/** | |
854 | + * @brief Remove the exclusive lock created by ldrex | |
855 | + * | |
856 | + * Removes the exclusive lock which is created by ldrex. | |
857 | + */ | |
858 | +extern void __CLREX(void); | |
859 | + | |
860 | +/** | |
861 | + * @brief Return the Base Priority value | |
862 | + * | |
863 | + * @return BasePriority | |
864 | + * | |
865 | + * Return the content of the base priority register | |
866 | + */ | |
867 | +extern uint32_t __get_BASEPRI(void); | |
868 | + | |
869 | +/** | |
870 | + * @brief Set the Base Priority value | |
871 | + * | |
872 | + * @param basePri BasePriority | |
873 | + * | |
874 | + * Set the base priority register | |
875 | + */ | |
876 | +extern void __set_BASEPRI(uint32_t basePri); | |
877 | + | |
878 | +/** | |
879 | + * @brief Return the Priority Mask value | |
880 | + * | |
881 | + * @return PriMask | |
882 | + * | |
883 | + * Return state of the priority mask bit from the priority mask register | |
884 | + */ | |
885 | +extern uint32_t __get_PRIMASK(void); | |
886 | + | |
887 | +/** | |
888 | + * @brief Set the Priority Mask value | |
889 | + * | |
890 | + * @param priMask PriMask | |
891 | + * | |
892 | + * Set the priority mask bit in the priority mask register | |
893 | + */ | |
894 | +extern void __set_PRIMASK(uint32_t priMask); | |
895 | + | |
896 | +/** | |
897 | + * @brief Return the Fault Mask value | |
898 | + * | |
899 | + * @return FaultMask | |
900 | + * | |
901 | + * Return the content of the fault mask register | |
902 | + */ | |
903 | +extern uint32_t __get_FAULTMASK(void); | |
904 | + | |
905 | +/** | |
906 | + * @brief Set the Fault Mask value | |
907 | + * | |
908 | + * @param faultMask faultMask value | |
909 | + * | |
910 | + * Set the fault mask register | |
911 | + */ | |
912 | +extern void __set_FAULTMASK(uint32_t faultMask); | |
913 | + | |
914 | +/** | |
915 | + * @brief Return the Control Register value | |
916 | + * | |
917 | + * @return Control value | |
918 | + * | |
919 | + * Return the content of the control register | |
920 | + */ | |
921 | +extern uint32_t __get_CONTROL(void); | |
922 | + | |
923 | +/** | |
924 | + * @brief Set the Control Register value | |
925 | + * | |
926 | + * @param control Control value | |
927 | + * | |
928 | + * Set the control register | |
929 | + */ | |
930 | +extern void __set_CONTROL(uint32_t control); | |
931 | + | |
932 | +#else /* (__ARMCC_VERSION >= 400000) */ | |
933 | + | |
934 | +/** | |
935 | + * @brief Remove the exclusive lock created by ldrex | |
936 | + * | |
937 | + * Removes the exclusive lock which is created by ldrex. | |
938 | + */ | |
939 | +#define __CLREX __clrex | |
940 | + | |
941 | +/** | |
942 | + * @brief Return the Base Priority value | |
943 | + * | |
944 | + * @return BasePriority | |
945 | + * | |
946 | + * Return the content of the base priority register | |
947 | + */ | |
948 | +static __INLINE uint32_t __get_BASEPRI(void) | |
949 | +{ | |
950 | + register uint32_t __regBasePri __ASM("basepri"); | |
951 | + return(__regBasePri); | |
952 | +} | |
953 | + | |
954 | +/** | |
955 | + * @brief Set the Base Priority value | |
956 | + * | |
957 | + * @param basePri BasePriority | |
958 | + * | |
959 | + * Set the base priority register | |
960 | + */ | |
961 | +static __INLINE void __set_BASEPRI(uint32_t basePri) | |
962 | +{ | |
963 | + register uint32_t __regBasePri __ASM("basepri"); | |
964 | + __regBasePri = (basePri & 0xff); | |
965 | +} | |
966 | + | |
967 | +/** | |
968 | + * @brief Return the Priority Mask value | |
969 | + * | |
970 | + * @return PriMask | |
971 | + * | |
972 | + * Return state of the priority mask bit from the priority mask register | |
973 | + */ | |
974 | +static __INLINE uint32_t __get_PRIMASK(void) | |
975 | +{ | |
976 | + register uint32_t __regPriMask __ASM("primask"); | |
977 | + return(__regPriMask); | |
978 | +} | |
979 | + | |
980 | +/** | |
981 | + * @brief Set the Priority Mask value | |
982 | + * | |
983 | + * @param priMask PriMask | |
984 | + * | |
985 | + * Set the priority mask bit in the priority mask register | |
986 | + */ | |
987 | +static __INLINE void __set_PRIMASK(uint32_t priMask) | |
988 | +{ | |
989 | + register uint32_t __regPriMask __ASM("primask"); | |
990 | + __regPriMask = (priMask); | |
991 | +} | |
992 | + | |
993 | +/** | |
994 | + * @brief Return the Fault Mask value | |
995 | + * | |
996 | + * @return FaultMask | |
997 | + * | |
998 | + * Return the content of the fault mask register | |
999 | + */ | |
1000 | +static __INLINE uint32_t __get_FAULTMASK(void) | |
1001 | +{ | |
1002 | + register uint32_t __regFaultMask __ASM("faultmask"); | |
1003 | + return(__regFaultMask); | |
1004 | +} | |
1005 | + | |
1006 | +/** | |
1007 | + * @brief Set the Fault Mask value | |
1008 | + * | |
1009 | + * @param faultMask faultMask value | |
1010 | + * | |
1011 | + * Set the fault mask register | |
1012 | + */ | |
1013 | +static __INLINE void __set_FAULTMASK(uint32_t faultMask) | |
1014 | +{ | |
1015 | + register uint32_t __regFaultMask __ASM("faultmask"); | |
1016 | + __regFaultMask = (faultMask & 1); | |
1017 | +} | |
1018 | + | |
1019 | +/** | |
1020 | + * @brief Return the Control Register value | |
1021 | + * | |
1022 | + * @return Control value | |
1023 | + * | |
1024 | + * Return the content of the control register | |
1025 | + */ | |
1026 | +static __INLINE uint32_t __get_CONTROL(void) | |
1027 | +{ | |
1028 | + register uint32_t __regControl __ASM("control"); | |
1029 | + return(__regControl); | |
1030 | +} | |
1031 | + | |
1032 | +/** | |
1033 | + * @brief Set the Control Register value | |
1034 | + * | |
1035 | + * @param control Control value | |
1036 | + * | |
1037 | + * Set the control register | |
1038 | + */ | |
1039 | +static __INLINE void __set_CONTROL(uint32_t control) | |
1040 | +{ | |
1041 | + register uint32_t __regControl __ASM("control"); | |
1042 | + __regControl = control; | |
1043 | +} | |
1044 | + | |
1045 | +#endif /* __ARMCC_VERSION */ | |
1046 | + | |
1047 | + | |
1048 | + | |
1049 | +#elif (defined (__ICCARM__)) /*------------------ ICC Compiler -------------------*/ | |
1050 | +/* IAR iccarm specific functions */ | |
1051 | + | |
1052 | +#define __enable_irq __enable_interrupt /*!< global Interrupt enable */ | |
1053 | +#define __disable_irq __disable_interrupt /*!< global Interrupt disable */ | |
1054 | + | |
1055 | +static __INLINE void __enable_fault_irq() { __ASM ("cpsie f"); } | |
1056 | +static __INLINE void __disable_fault_irq() { __ASM ("cpsid f"); } | |
1057 | + | |
1058 | +#define __NOP __no_operation /*!< no operation intrinsic in IAR Compiler */ | |
1059 | +static __INLINE void __WFI() { __ASM ("wfi"); } | |
1060 | +static __INLINE void __WFE() { __ASM ("wfe"); } | |
1061 | +static __INLINE void __SEV() { __ASM ("sev"); } | |
1062 | +static __INLINE void __CLREX() { __ASM ("clrex"); } | |
1063 | + | |
1064 | +/* intrinsic void __ISB(void) */ | |
1065 | +/* intrinsic void __DSB(void) */ | |
1066 | +/* intrinsic void __DMB(void) */ | |
1067 | +/* intrinsic void __set_PRIMASK(); */ | |
1068 | +/* intrinsic void __get_PRIMASK(); */ | |
1069 | +/* intrinsic void __set_FAULTMASK(); */ | |
1070 | +/* intrinsic void __get_FAULTMASK(); */ | |
1071 | +/* intrinsic uint32_t __REV(uint32_t value); */ | |
1072 | +/* intrinsic uint32_t __REVSH(uint32_t value); */ | |
1073 | +/* intrinsic unsigned long __STREX(unsigned long, unsigned long); */ | |
1074 | +/* intrinsic unsigned long __LDREX(unsigned long *); */ | |
1075 | + | |
1076 | + | |
1077 | +/** | |
1078 | + * @brief Return the Process Stack Pointer | |
1079 | + * | |
1080 | + * @return ProcessStackPointer | |
1081 | + * | |
1082 | + * Return the actual process stack pointer | |
1083 | + */ | |
1084 | +extern uint32_t __get_PSP(void); | |
1085 | + | |
1086 | +/** | |
1087 | + * @brief Set the Process Stack Pointer | |
1088 | + * | |
1089 | + * @param topOfProcStack Process Stack Pointer | |
1090 | + * | |
1091 | + * Assign the value ProcessStackPointer to the MSP | |
1092 | + * (process stack pointer) Cortex processor register | |
1093 | + */ | |
1094 | +extern void __set_PSP(uint32_t topOfProcStack); | |
1095 | + | |
1096 | +/** | |
1097 | + * @brief Return the Main Stack Pointer | |
1098 | + * | |
1099 | + * @return Main Stack Pointer | |
1100 | + * | |
1101 | + * Return the current value of the MSP (main stack pointer) | |
1102 | + * Cortex processor register | |
1103 | + */ | |
1104 | +extern uint32_t __get_MSP(void); | |
1105 | + | |
1106 | +/** | |
1107 | + * @brief Set the Main Stack Pointer | |
1108 | + * | |
1109 | + * @param topOfMainStack Main Stack Pointer | |
1110 | + * | |
1111 | + * Assign the value mainStackPointer to the MSP | |
1112 | + * (main stack pointer) Cortex processor register | |
1113 | + */ | |
1114 | +extern void __set_MSP(uint32_t topOfMainStack); | |
1115 | + | |
1116 | +/** | |
1117 | + * @brief Reverse byte order in unsigned short value | |
1118 | + * | |
1119 | + * @param value value to reverse | |
1120 | + * @return reversed value | |
1121 | + * | |
1122 | + * Reverse byte order in unsigned short value | |
1123 | + */ | |
1124 | +extern uint32_t __REV16(uint16_t value); | |
1125 | + | |
1126 | +/** | |
1127 | + * @brief Reverse bit order of value | |
1128 | + * | |
1129 | + * @param value value to reverse | |
1130 | + * @return reversed value | |
1131 | + * | |
1132 | + * Reverse bit order of value | |
1133 | + */ | |
1134 | +extern uint32_t __RBIT(uint32_t value); | |
1135 | + | |
1136 | +/** | |
1137 | + * @brief LDR Exclusive (8 bit) | |
1138 | + * | |
1139 | + * @param *addr address pointer | |
1140 | + * @return value of (*address) | |
1141 | + * | |
1142 | + * Exclusive LDR command for 8 bit values) | |
1143 | + */ | |
1144 | +extern uint8_t __LDREXB(uint8_t *addr); | |
1145 | + | |
1146 | +/** | |
1147 | + * @brief LDR Exclusive (16 bit) | |
1148 | + * | |
1149 | + * @param *addr address pointer | |
1150 | + * @return value of (*address) | |
1151 | + * | |
1152 | + * Exclusive LDR command for 16 bit values | |
1153 | + */ | |
1154 | +extern uint16_t __LDREXH(uint16_t *addr); | |
1155 | + | |
1156 | +/** | |
1157 | + * @brief LDR Exclusive (32 bit) | |
1158 | + * | |
1159 | + * @param *addr address pointer | |
1160 | + * @return value of (*address) | |
1161 | + * | |
1162 | + * Exclusive LDR command for 32 bit values | |
1163 | + */ | |
1164 | +extern uint32_t __LDREXW(uint32_t *addr); | |
1165 | + | |
1166 | +/** | |
1167 | + * @brief STR Exclusive (8 bit) | |
1168 | + * | |
1169 | + * @param value value to store | |
1170 | + * @param *addr address pointer | |
1171 | + * @return successful / failed | |
1172 | + * | |
1173 | + * Exclusive STR command for 8 bit values | |
1174 | + */ | |
1175 | +extern uint32_t __STREXB(uint8_t value, uint8_t *addr); | |
1176 | + | |
1177 | +/** | |
1178 | + * @brief STR Exclusive (16 bit) | |
1179 | + * | |
1180 | + * @param value value to store | |
1181 | + * @param *addr address pointer | |
1182 | + * @return successful / failed | |
1183 | + * | |
1184 | + * Exclusive STR command for 16 bit values | |
1185 | + */ | |
1186 | +extern uint32_t __STREXH(uint16_t value, uint16_t *addr); | |
1187 | + | |
1188 | +/** | |
1189 | + * @brief STR Exclusive (32 bit) | |
1190 | + * | |
1191 | + * @param value value to store | |
1192 | + * @param *addr address pointer | |
1193 | + * @return successful / failed | |
1194 | + * | |
1195 | + * Exclusive STR command for 32 bit values | |
1196 | + */ | |
1197 | +extern uint32_t __STREXW(uint32_t value, uint32_t *addr); | |
1198 | + | |
1199 | + | |
1200 | + | |
1201 | +#elif (defined (__GNUC__)) /*------------------ GNU Compiler ---------------------*/ | |
1202 | +/* GNU gcc specific functions */ | |
1203 | + | |
1204 | +static __INLINE void __enable_irq() { __ASM volatile ("cpsie i"); } | |
1205 | +static __INLINE void __disable_irq() { __ASM volatile ("cpsid i"); } | |
1206 | + | |
1207 | +static __INLINE void __enable_fault_irq() { __ASM volatile ("cpsie f"); } | |
1208 | +static __INLINE void __disable_fault_irq() { __ASM volatile ("cpsid f"); } | |
1209 | + | |
1210 | +static __INLINE void __NOP() { __ASM volatile ("nop"); } | |
1211 | +static __INLINE void __WFI() { __ASM volatile ("wfi"); } | |
1212 | +static __INLINE void __WFE() { __ASM volatile ("wfe"); } | |
1213 | +static __INLINE void __SEV() { __ASM volatile ("sev"); } | |
1214 | +static __INLINE void __ISB() { __ASM volatile ("isb"); } | |
1215 | +static __INLINE void __DSB() { __ASM volatile ("dsb"); } | |
1216 | +static __INLINE void __DMB() { __ASM volatile ("dmb"); } | |
1217 | +static __INLINE void __CLREX() { __ASM volatile ("clrex"); } | |
1218 | + | |
1219 | + | |
1220 | +/** | |
1221 | + * @brief Return the Process Stack Pointer | |
1222 | + * | |
1223 | + * @return ProcessStackPointer | |
1224 | + * | |
1225 | + * Return the actual process stack pointer | |
1226 | + */ | |
1227 | +extern uint32_t __get_PSP(void); | |
1228 | + | |
1229 | +/** | |
1230 | + * @brief Set the Process Stack Pointer | |
1231 | + * | |
1232 | + * @param topOfProcStack Process Stack Pointer | |
1233 | + * | |
1234 | + * Assign the value ProcessStackPointer to the MSP | |
1235 | + * (process stack pointer) Cortex processor register | |
1236 | + */ | |
1237 | +extern void __set_PSP(uint32_t topOfProcStack); | |
1238 | + | |
1239 | +/** | |
1240 | + * @brief Return the Main Stack Pointer | |
1241 | + * | |
1242 | + * @return Main Stack Pointer | |
1243 | + * | |
1244 | + * Return the current value of the MSP (main stack pointer) | |
1245 | + * Cortex processor register | |
1246 | + */ | |
1247 | +extern uint32_t __get_MSP(void); | |
1248 | + | |
1249 | +/** | |
1250 | + * @brief Set the Main Stack Pointer | |
1251 | + * | |
1252 | + * @param topOfMainStack Main Stack Pointer | |
1253 | + * | |
1254 | + * Assign the value mainStackPointer to the MSP | |
1255 | + * (main stack pointer) Cortex processor register | |
1256 | + */ | |
1257 | +extern void __set_MSP(uint32_t topOfMainStack); | |
1258 | + | |
1259 | +/** | |
1260 | + * @brief Return the Base Priority value | |
1261 | + * | |
1262 | + * @return BasePriority | |
1263 | + * | |
1264 | + * Return the content of the base priority register | |
1265 | + */ | |
1266 | +extern uint32_t __get_BASEPRI(void); | |
1267 | + | |
1268 | +/** | |
1269 | + * @brief Set the Base Priority value | |
1270 | + * | |
1271 | + * @param basePri BasePriority | |
1272 | + * | |
1273 | + * Set the base priority register | |
1274 | + */ | |
1275 | +extern void __set_BASEPRI(uint32_t basePri); | |
1276 | + | |
1277 | +/** | |
1278 | + * @brief Return the Priority Mask value | |
1279 | + * | |
1280 | + * @return PriMask | |
1281 | + * | |
1282 | + * Return state of the priority mask bit from the priority mask register | |
1283 | + */ | |
1284 | +extern uint32_t __get_PRIMASK(void); | |
1285 | + | |
1286 | +/** | |
1287 | + * @brief Set the Priority Mask value | |
1288 | + * | |
1289 | + * @param priMask PriMask | |
1290 | + * | |
1291 | + * Set the priority mask bit in the priority mask register | |
1292 | + */ | |
1293 | +extern void __set_PRIMASK(uint32_t priMask); | |
1294 | + | |
1295 | +/** | |
1296 | + * @brief Return the Fault Mask value | |
1297 | + * | |
1298 | + * @return FaultMask | |
1299 | + * | |
1300 | + * Return the content of the fault mask register | |
1301 | + */ | |
1302 | +extern uint32_t __get_FAULTMASK(void); | |
1303 | + | |
1304 | +/** | |
1305 | + * @brief Set the Fault Mask value | |
1306 | + * | |
1307 | + * @param faultMask faultMask value | |
1308 | + * | |
1309 | + * Set the fault mask register | |
1310 | + */ | |
1311 | +extern void __set_FAULTMASK(uint32_t faultMask); | |
1312 | + | |
1313 | +/** | |
1314 | + * @brief Return the Control Register value | |
1315 | +* | |
1316 | +* @return Control value | |
1317 | + * | |
1318 | + * Return the content of the control register | |
1319 | + */ | |
1320 | +extern uint32_t __get_CONTROL(void); | |
1321 | + | |
1322 | +/** | |
1323 | + * @brief Set the Control Register value | |
1324 | + * | |
1325 | + * @param control Control value | |
1326 | + * | |
1327 | + * Set the control register | |
1328 | + */ | |
1329 | +extern void __set_CONTROL(uint32_t control); | |
1330 | + | |
1331 | +/** | |
1332 | + * @brief Reverse byte order in integer value | |
1333 | + * | |
1334 | + * @param value value to reverse | |
1335 | + * @return reversed value | |
1336 | + * | |
1337 | + * Reverse byte order in integer value | |
1338 | + */ | |
1339 | +extern uint32_t __REV(uint32_t value); | |
1340 | + | |
1341 | +/** | |
1342 | + * @brief Reverse byte order in unsigned short value | |
1343 | + * | |
1344 | + * @param value value to reverse | |
1345 | + * @return reversed value | |
1346 | + * | |
1347 | + * Reverse byte order in unsigned short value | |
1348 | + */ | |
1349 | +extern uint32_t __REV16(uint16_t value); | |
1350 | + | |
1351 | +/** | |
1352 | + * @brief Reverse byte order in signed short value with sign extension to integer | |
1353 | + * | |
1354 | + * @param value value to reverse | |
1355 | + * @return reversed value | |
1356 | + * | |
1357 | + * Reverse byte order in signed short value with sign extension to integer | |
1358 | + */ | |
1359 | +extern int32_t __REVSH(int16_t value); | |
1360 | + | |
1361 | +/** | |
1362 | + * @brief Reverse bit order of value | |
1363 | + * | |
1364 | + * @param value value to reverse | |
1365 | + * @return reversed value | |
1366 | + * | |
1367 | + * Reverse bit order of value | |
1368 | + */ | |
1369 | +extern uint32_t __RBIT(uint32_t value); | |
1370 | + | |
1371 | +/** | |
1372 | + * @brief LDR Exclusive (8 bit) | |
1373 | + * | |
1374 | + * @param *addr address pointer | |
1375 | + * @return value of (*address) | |
1376 | + * | |
1377 | + * Exclusive LDR command for 8 bit value | |
1378 | + */ | |
1379 | +extern uint8_t __LDREXB(uint8_t *addr); | |
1380 | + | |
1381 | +/** | |
1382 | + * @brief LDR Exclusive (16 bit) | |
1383 | + * | |
1384 | + * @param *addr address pointer | |
1385 | + * @return value of (*address) | |
1386 | + * | |
1387 | + * Exclusive LDR command for 16 bit values | |
1388 | + */ | |
1389 | +extern uint16_t __LDREXH(uint16_t *addr); | |
1390 | + | |
1391 | +/** | |
1392 | + * @brief LDR Exclusive (32 bit) | |
1393 | + * | |
1394 | + * @param *addr address pointer | |
1395 | + * @return value of (*address) | |
1396 | + * | |
1397 | + * Exclusive LDR command for 32 bit values | |
1398 | + */ | |
1399 | +extern uint32_t __LDREXW(uint32_t *addr); | |
1400 | + | |
1401 | +/** | |
1402 | + * @brief STR Exclusive (8 bit) | |
1403 | + * | |
1404 | + * @param value value to store | |
1405 | + * @param *addr address pointer | |
1406 | + * @return successful / failed | |
1407 | + * | |
1408 | + * Exclusive STR command for 8 bit values | |
1409 | + */ | |
1410 | +extern uint32_t __STREXB(uint8_t value, uint8_t *addr); | |
1411 | + | |
1412 | +/** | |
1413 | + * @brief STR Exclusive (16 bit) | |
1414 | + * | |
1415 | + * @param value value to store | |
1416 | + * @param *addr address pointer | |
1417 | + * @return successful / failed | |
1418 | + * | |
1419 | + * Exclusive STR command for 16 bit values | |
1420 | + */ | |
1421 | +extern uint32_t __STREXH(uint16_t value, uint16_t *addr); | |
1422 | + | |
1423 | +/** | |
1424 | + * @brief STR Exclusive (32 bit) | |
1425 | + * | |
1426 | + * @param value value to store | |
1427 | + * @param *addr address pointer | |
1428 | + * @return successful / failed | |
1429 | + * | |
1430 | + * Exclusive STR command for 32 bit values | |
1431 | + */ | |
1432 | +extern uint32_t __STREXW(uint32_t value, uint32_t *addr); | |
1433 | + | |
1434 | + | |
1435 | +#elif (defined (__TASKING__)) /*------------------ TASKING Compiler ---------------------*/ | |
1436 | +/* TASKING carm specific functions */ | |
1437 | + | |
1438 | +/* | |
1439 | + * The CMSIS functions have been implemented as intrinsics in the compiler. | |
1440 | + * Please use "carm -?i" to get an up to date list of all instrinsics, | |
1441 | + * Including the CMSIS ones. | |
1442 | + */ | |
1443 | + | |
1444 | +#endif | |
1445 | + | |
1446 | + | |
1447 | +/** @addtogroup CMSIS_CM3_Core_FunctionInterface CMSIS CM3 Core Function Interface | |
1448 | + Core Function Interface containing: | |
1449 | + - Core NVIC Functions | |
1450 | + - Core SysTick Functions | |
1451 | + - Core Reset Functions | |
1452 | +*/ | |
1453 | +/*@{*/ | |
1454 | + | |
1455 | +/* ########################## NVIC functions #################################### */ | |
1456 | + | |
1457 | +/** | |
1458 | + * @brief Set the Priority Grouping in NVIC Interrupt Controller | |
1459 | + * | |
1460 | + * @param PriorityGroup is priority grouping field | |
1461 | + * | |
1462 | + * Set the priority grouping field using the required unlock sequence. | |
1463 | + * The parameter priority_grouping is assigned to the field | |
1464 | + * SCB->AIRCR [10:8] PRIGROUP field. Only values from 0..7 are used. | |
1465 | + * In case of a conflict between priority grouping and available | |
1466 | + * priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. | |
1467 | + */ | |
1468 | +static __INLINE void NVIC_SetPriorityGrouping(uint32_t PriorityGroup) | |
1469 | +{ | |
1470 | + uint32_t reg_value; | |
1471 | + uint32_t PriorityGroupTmp = (PriorityGroup & 0x07); /* only values 0..7 are used */ | |
1472 | + | |
1473 | + reg_value = SCB->AIRCR; /* read old register configuration */ | |
1474 | + reg_value &= ~(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk); /* clear bits to change */ | |
1475 | + reg_value = (reg_value | | |
1476 | + (0x5FA << SCB_AIRCR_VECTKEY_Pos) | | |
1477 | + (PriorityGroupTmp << 8)); /* Insert write key and priorty group */ | |
1478 | + SCB->AIRCR = reg_value; | |
1479 | +} | |
1480 | + | |
1481 | +/** | |
1482 | + * @brief Get the Priority Grouping from NVIC Interrupt Controller | |
1483 | + * | |
1484 | + * @return priority grouping field | |
1485 | + * | |
1486 | + * Get the priority grouping from NVIC Interrupt Controller. | |
1487 | + * priority grouping is SCB->AIRCR [10:8] PRIGROUP field. | |
1488 | + */ | |
1489 | +static __INLINE uint32_t NVIC_GetPriorityGrouping(void) | |
1490 | +{ | |
1491 | + return ((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos); /* read priority grouping field */ | |
1492 | +} | |
1493 | + | |
1494 | +/** | |
1495 | + * @brief Enable Interrupt in NVIC Interrupt Controller | |
1496 | + * | |
1497 | + * @param IRQn The positive number of the external interrupt to enable | |
1498 | + * | |
1499 | + * Enable a device specific interupt in the NVIC interrupt controller. | |
1500 | + * The interrupt number cannot be a negative value. | |
1501 | + */ | |
1502 | +static __INLINE void NVIC_EnableIRQ(IRQn_Type IRQn) | |
1503 | +{ | |
1504 | + NVIC->ISER[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* enable interrupt */ | |
1505 | +} | |
1506 | + | |
1507 | +/** | |
1508 | + * @brief Disable the interrupt line for external interrupt specified | |
1509 | + * | |
1510 | + * @param IRQn The positive number of the external interrupt to disable | |
1511 | + * | |
1512 | + * Disable a device specific interupt in the NVIC interrupt controller. | |
1513 | + * The interrupt number cannot be a negative value. | |
1514 | + */ | |
1515 | +static __INLINE void NVIC_DisableIRQ(IRQn_Type IRQn) | |
1516 | +{ | |
1517 | + NVIC->ICER[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* disable interrupt */ | |
1518 | +} | |
1519 | + | |
1520 | +/** | |
1521 | + * @brief Read the interrupt pending bit for a device specific interrupt source | |
1522 | + * | |
1523 | + * @param IRQn The number of the device specifc interrupt | |
1524 | + * @return 1 = interrupt pending, 0 = interrupt not pending | |
1525 | + * | |
1526 | + * Read the pending register in NVIC and return 1 if its status is pending, | |
1527 | + * otherwise it returns 0 | |
1528 | + */ | |
1529 | +static __INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn) | |
1530 | +{ | |
1531 | + return((uint32_t) ((NVIC->ISPR[(uint32_t)(IRQn) >> 5] & (1 << ((uint32_t)(IRQn) & 0x1F)))?1:0)); /* Return 1 if pending else 0 */ | |
1532 | +} | |
1533 | + | |
1534 | +/** | |
1535 | + * @brief Set the pending bit for an external interrupt | |
1536 | + * | |
1537 | + * @param IRQn The number of the interrupt for set pending | |
1538 | + * | |
1539 | + * Set the pending bit for the specified interrupt. | |
1540 | + * The interrupt number cannot be a negative value. | |
1541 | + */ | |
1542 | +static __INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn) | |
1543 | +{ | |
1544 | + NVIC->ISPR[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* set interrupt pending */ | |
1545 | +} | |
1546 | + | |
1547 | +/** | |
1548 | + * @brief Clear the pending bit for an external interrupt | |
1549 | + * | |
1550 | + * @param IRQn The number of the interrupt for clear pending | |
1551 | + * | |
1552 | + * Clear the pending bit for the specified interrupt. | |
1553 | + * The interrupt number cannot be a negative value. | |
1554 | + */ | |
1555 | +static __INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn) | |
1556 | +{ | |
1557 | + NVIC->ICPR[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* Clear pending interrupt */ | |
1558 | +} | |
1559 | + | |
1560 | +/** | |
1561 | + * @brief Read the active bit for an external interrupt | |
1562 | + * | |
1563 | + * @param IRQn The number of the interrupt for read active bit | |
1564 | + * @return 1 = interrupt active, 0 = interrupt not active | |
1565 | + * | |
1566 | + * Read the active register in NVIC and returns 1 if its status is active, | |
1567 | + * otherwise it returns 0. | |
1568 | + */ | |
1569 | +static __INLINE uint32_t NVIC_GetActive(IRQn_Type IRQn) | |
1570 | +{ | |
1571 | + return((uint32_t)((NVIC->IABR[(uint32_t)(IRQn) >> 5] & (1 << ((uint32_t)(IRQn) & 0x1F)))?1:0)); /* Return 1 if active else 0 */ | |
1572 | +} | |
1573 | + | |
1574 | +/** | |
1575 | + * @brief Set the priority for an interrupt | |
1576 | + * | |
1577 | + * @param IRQn The number of the interrupt for set priority | |
1578 | + * @param priority The priority to set | |
1579 | + * | |
1580 | + * Set the priority for the specified interrupt. The interrupt | |
1581 | + * number can be positive to specify an external (device specific) | |
1582 | + * interrupt, or negative to specify an internal (core) interrupt. | |
1583 | + * | |
1584 | + * Note: The priority cannot be set for every core interrupt. | |
1585 | + */ | |
1586 | +static __INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) | |
1587 | +{ | |
1588 | + if(IRQn < 0) { | |
1589 | + SCB->SHP[((uint32_t)(IRQn) & 0xF)-4] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for Cortex-M3 System Interrupts */ | |
1590 | + else { | |
1591 | + NVIC->IP[(uint32_t)(IRQn)] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for device specific Interrupts */ | |
1592 | +} | |
1593 | + | |
1594 | +/** | |
1595 | + * @brief Read the priority for an interrupt | |
1596 | + * | |
1597 | + * @param IRQn The number of the interrupt for get priority | |
1598 | + * @return The priority for the interrupt | |
1599 | + * | |
1600 | + * Read the priority for the specified interrupt. The interrupt | |
1601 | + * number can be positive to specify an external (device specific) | |
1602 | + * interrupt, or negative to specify an internal (core) interrupt. | |
1603 | + * | |
1604 | + * The returned priority value is automatically aligned to the implemented | |
1605 | + * priority bits of the microcontroller. | |
1606 | + * | |
1607 | + * Note: The priority cannot be set for every core interrupt. | |
1608 | + */ | |
1609 | +static __INLINE uint32_t NVIC_GetPriority(IRQn_Type IRQn) | |
1610 | +{ | |
1611 | + | |
1612 | + if(IRQn < 0) { | |
1613 | + return((uint32_t)(SCB->SHP[((uint32_t)(IRQn) & 0xF)-4] >> (8 - __NVIC_PRIO_BITS))); } /* get priority for Cortex-M3 system interrupts */ | |
1614 | + else { | |
1615 | + return((uint32_t)(NVIC->IP[(uint32_t)(IRQn)] >> (8 - __NVIC_PRIO_BITS))); } /* get priority for device specific interrupts */ | |
1616 | +} | |
1617 | + | |
1618 | + | |
1619 | +/** | |
1620 | + * @brief Encode the priority for an interrupt | |
1621 | + * | |
1622 | + * @param PriorityGroup The used priority group | |
1623 | + * @param PreemptPriority The preemptive priority value (starting from 0) | |
1624 | + * @param SubPriority The sub priority value (starting from 0) | |
1625 | + * @return The encoded priority for the interrupt | |
1626 | + * | |
1627 | + * Encode the priority for an interrupt with the given priority group, | |
1628 | + * preemptive priority value and sub priority value. | |
1629 | + * In case of a conflict between priority grouping and available | |
1630 | + * priority bits (__NVIC_PRIO_BITS) the samllest possible priority group is set. | |
1631 | + * | |
1632 | + * The returned priority value can be used for NVIC_SetPriority(...) function | |
1633 | + */ | |
1634 | +static __INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) | |
1635 | +{ | |
1636 | + uint32_t PriorityGroupTmp = (PriorityGroup & 0x07); /* only values 0..7 are used */ | |
1637 | + uint32_t PreemptPriorityBits; | |
1638 | + uint32_t SubPriorityBits; | |
1639 | + | |
1640 | + PreemptPriorityBits = ((7 - PriorityGroupTmp) > __NVIC_PRIO_BITS) ? __NVIC_PRIO_BITS : 7 - PriorityGroupTmp; | |
1641 | + SubPriorityBits = ((PriorityGroupTmp + __NVIC_PRIO_BITS) < 7) ? 0 : PriorityGroupTmp - 7 + __NVIC_PRIO_BITS; | |
1642 | + | |
1643 | + return ( | |
1644 | + ((PreemptPriority & ((1 << (PreemptPriorityBits)) - 1)) << SubPriorityBits) | | |
1645 | + ((SubPriority & ((1 << (SubPriorityBits )) - 1))) | |
1646 | + ); | |
1647 | +} | |
1648 | + | |
1649 | + | |
1650 | +/** | |
1651 | + * @brief Decode the priority of an interrupt | |
1652 | + * | |
1653 | + * @param Priority The priority for the interrupt | |
1654 | + * @param PriorityGroup The used priority group | |
1655 | + * @param pPreemptPriority The preemptive priority value (starting from 0) | |
1656 | + * @param pSubPriority The sub priority value (starting from 0) | |
1657 | + * | |
1658 | + * Decode an interrupt priority value with the given priority group to | |
1659 | + * preemptive priority value and sub priority value. | |
1660 | + * In case of a conflict between priority grouping and available | |
1661 | + * priority bits (__NVIC_PRIO_BITS) the samllest possible priority group is set. | |
1662 | + * | |
1663 | + * The priority value can be retrieved with NVIC_GetPriority(...) function | |
1664 | + */ | |
1665 | +static __INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* pPreemptPriority, uint32_t* pSubPriority) | |
1666 | +{ | |
1667 | + uint32_t PriorityGroupTmp = (PriorityGroup & 0x07); /* only values 0..7 are used */ | |
1668 | + uint32_t PreemptPriorityBits; | |
1669 | + uint32_t SubPriorityBits; | |
1670 | + | |
1671 | + PreemptPriorityBits = ((7 - PriorityGroupTmp) > __NVIC_PRIO_BITS) ? __NVIC_PRIO_BITS : 7 - PriorityGroupTmp; | |
1672 | + SubPriorityBits = ((PriorityGroupTmp + __NVIC_PRIO_BITS) < 7) ? 0 : PriorityGroupTmp - 7 + __NVIC_PRIO_BITS; | |
1673 | + | |
1674 | + *pPreemptPriority = (Priority >> SubPriorityBits) & ((1 << (PreemptPriorityBits)) - 1); | |
1675 | + *pSubPriority = (Priority ) & ((1 << (SubPriorityBits )) - 1); | |
1676 | +} | |
1677 | + | |
1678 | + | |
1679 | + | |
1680 | +/* ################################## SysTick function ############################################ */ | |
1681 | + | |
1682 | +#if (!defined (__Vendor_SysTickConfig)) || (__Vendor_SysTickConfig == 0) | |
1683 | + | |
1684 | +/** | |
1685 | + * @brief Initialize and start the SysTick counter and its interrupt. | |
1686 | + * | |
1687 | + * @param ticks number of ticks between two interrupts | |
1688 | + * @return 1 = failed, 0 = successful | |
1689 | + * | |
1690 | + * Initialise the system tick timer and its interrupt and start the | |
1691 | + * system tick timer / counter in free running mode to generate | |
1692 | + * periodical interrupts. | |
1693 | + */ | |
1694 | +static __INLINE uint32_t SysTick_Config(uint32_t ticks) | |
1695 | +{ | |
1696 | + if (ticks > SysTick_LOAD_RELOAD_Msk) return (1); /* Reload value impossible */ | |
1697 | + | |
1698 | + SysTick->LOAD = (ticks & SysTick_LOAD_RELOAD_Msk) - 1; /* set reload register */ | |
1699 | + NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); /* set Priority for Cortex-M0 System Interrupts */ | |
1700 | + SysTick->VAL = 0; /* Load the SysTick Counter Value */ | |
1701 | + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | | |
1702 | + SysTick_CTRL_TICKINT_Msk | | |
1703 | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ | |
1704 | + return (0); /* Function successful */ | |
1705 | +} | |
1706 | + | |
1707 | +#endif | |
1708 | + | |
1709 | + | |
1710 | + | |
1711 | + | |
1712 | +/* ################################## Reset function ############################################ */ | |
1713 | + | |
1714 | +/** | |
1715 | + * @brief Initiate a system reset request. | |
1716 | + * | |
1717 | + * Initiate a system reset request to reset the MCU | |
1718 | + */ | |
1719 | +static __INLINE void NVIC_SystemReset(void) | |
1720 | +{ | |
1721 | + SCB->AIRCR = ((0x5FA << SCB_AIRCR_VECTKEY_Pos) | | |
1722 | + (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | | |
1723 | + SCB_AIRCR_SYSRESETREQ_Msk); /* Keep priority group unchanged */ | |
1724 | + __DSB(); /* Ensure completion of memory access */ | |
1725 | + while(1); /* wait until reset */ | |
1726 | +} | |
1727 | + | |
1728 | +/*@}*/ /* end of group CMSIS_CM3_Core_FunctionInterface */ | |
1729 | + | |
1730 | + | |
1731 | + | |
1732 | +/* ##################################### Debug In/Output function ########################################### */ | |
1733 | + | |
1734 | +/** @addtogroup CMSIS_CM3_CoreDebugInterface CMSIS CM3 Core Debug Interface | |
1735 | + Core Debug Interface containing: | |
1736 | + - Core Debug Receive / Transmit Functions | |
1737 | + - Core Debug Defines | |
1738 | + - Core Debug Variables | |
1739 | +*/ | |
1740 | +/*@{*/ | |
1741 | + | |
1742 | +extern volatile int ITM_RxBuffer; /*!< variable to receive characters */ | |
1743 | +#define ITM_RXBUFFER_EMPTY 0x5AA55AA5 /*!< value identifying ITM_RxBuffer is ready for next character */ | |
1744 | + | |
1745 | + | |
1746 | +/** | |
1747 | + * @brief Outputs a character via the ITM channel 0 | |
1748 | + * | |
1749 | + * @param ch character to output | |
1750 | + * @return character to output | |
1751 | + * | |
1752 | + * The function outputs a character via the ITM channel 0. | |
1753 | + * The function returns when no debugger is connected that has booked the output. | |
1754 | + * It is blocking when a debugger is connected, but the previous character send is not transmitted. | |
1755 | + */ | |
1756 | +static __INLINE uint32_t ITM_SendChar (uint32_t ch) | |
1757 | +{ | |
1758 | + if ((CoreDebug->DEMCR & CoreDebug_DEMCR_TRCENA_Msk) && /* Trace enabled */ | |
1759 | + (ITM->TCR & ITM_TCR_ITMENA_Msk) && /* ITM enabled */ | |
1760 | + (ITM->TER & (1ul << 0) ) ) /* ITM Port #0 enabled */ | |
1761 | + { | |
1762 | + while (ITM->PORT[0].u32 == 0); | |
1763 | + ITM->PORT[0].u8 = (uint8_t) ch; | |
1764 | + } | |
1765 | + return (ch); | |
1766 | +} | |
1767 | + | |
1768 | + | |
1769 | +/** | |
1770 | + * @brief Inputs a character via variable ITM_RxBuffer | |
1771 | + * | |
1772 | + * @return received character, -1 = no character received | |
1773 | + * | |
1774 | + * The function inputs a character via variable ITM_RxBuffer. | |
1775 | + * The function returns when no debugger is connected that has booked the output. | |
1776 | + * It is blocking when a debugger is connected, but the previous character send is not transmitted. | |
1777 | + */ | |
1778 | +static __INLINE int ITM_ReceiveChar (void) { | |
1779 | + int ch = -1; /* no character available */ | |
1780 | + | |
1781 | + if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) { | |
1782 | + ch = ITM_RxBuffer; | |
1783 | + ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ | |
1784 | + } | |
1785 | + | |
1786 | + return (ch); | |
1787 | +} | |
1788 | + | |
1789 | + | |
1790 | +/** | |
1791 | + * @brief Check if a character via variable ITM_RxBuffer is available | |
1792 | + * | |
1793 | + * @return 1 = character available, 0 = no character available | |
1794 | + * | |
1795 | + * The function checks variable ITM_RxBuffer whether a character is available or not. | |
1796 | + * The function returns '1' if a character is available and '0' if no character is available. | |
1797 | + */ | |
1798 | +static __INLINE int ITM_CheckChar (void) { | |
1799 | + | |
1800 | + if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) { | |
1801 | + return (0); /* no character available */ | |
1802 | + } else { | |
1803 | + return (1); /* character available */ | |
1804 | + } | |
1805 | +} | |
1806 | + | |
1807 | +/*@}*/ /* end of group CMSIS_CM3_core_DebugInterface */ | |
1808 | + | |
1809 | + | |
1810 | +#ifdef __cplusplus | |
1811 | +} | |
1812 | +#endif | |
1813 | + | |
1814 | +/*@}*/ /* end of group CMSIS_CM3_core_definitions */ | |
1815 | + | |
1816 | +#endif /* __CM3_CORE_H__ */ | |
1817 | + | |
1818 | +/*lint -restore */ |
@@ -0,0 +1,63 @@ | ||
1 | +/**************************************************************************//** | |
2 | + * @file system_LPC17xx.h | |
3 | + * @brief CMSIS Cortex-M3 Device Peripheral Access Layer Header File | |
4 | + * for the NXP LPC17xx Device Series | |
5 | + * @version V1.02 | |
6 | + * @date 08. September 2009 | |
7 | + * | |
8 | + * @note | |
9 | + * Copyright (C) 2009 ARM Limited. All rights reserved. | |
10 | + * | |
11 | + * @par | |
12 | + * ARM Limited (ARM) is supplying this software for use with Cortex-M | |
13 | + * processor based microcontrollers. This file can be freely distributed | |
14 | + * within development tools that are supporting such ARM based processors. | |
15 | + * | |
16 | + * @par | |
17 | + * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED | |
18 | + * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF | |
19 | + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. | |
20 | + * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR | |
21 | + * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. | |
22 | + * | |
23 | + ******************************************************************************/ | |
24 | + | |
25 | + | |
26 | +#ifndef __SYSTEM_LPC17xx_H | |
27 | +#define __SYSTEM_LPC17xx_H | |
28 | + | |
29 | +#ifdef __cplusplus | |
30 | +extern "C" { | |
31 | +#endif | |
32 | + | |
33 | +#include <stdint.h> | |
34 | + | |
35 | +extern uint32_t SystemCoreClock; /*!< System Clock Frequency (Core Clock) */ | |
36 | + | |
37 | + | |
38 | +/** | |
39 | + * Initialize the system | |
40 | + * | |
41 | + * @param none | |
42 | + * @return none | |
43 | + * | |
44 | + * @brief Setup the microcontroller system. | |
45 | + * Initialize the System and update the SystemCoreClock variable. | |
46 | + */ | |
47 | +extern void SystemInit (void); | |
48 | + | |
49 | +/** | |
50 | + * Update SystemCoreClock variable | |
51 | + * | |
52 | + * @param none | |
53 | + * @return none | |
54 | + * | |
55 | + * @brief Updates the SystemCoreClock with current core Clock | |
56 | + * retrieved from cpu registers. | |
57 | + */ | |
58 | +extern void SystemCoreClockUpdate (void); | |
59 | +#ifdef __cplusplus | |
60 | +} | |
61 | +#endif | |
62 | + | |
63 | +#endif /* __SYSTEM_LPC17xx_H */ |
@@ -0,0 +1,236 @@ | ||
1 | +/* | |
2 | + * TOPPERS/JSP Kernel | |
3 | + * Toyohashi Open Platform for Embedded Real-Time Systems/ | |
4 | + * Just Standard Profile Kernel | |
5 | + * | |
6 | + * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory | |
7 | + * Toyohashi Univ. of Technology, JAPAN | |
8 | + * Copyright (C) 2005-2007 by Embedded and Real-Time Systems Laboratory | |
9 | + * Graduate School of Information Science, Nagoya Univ., JAPAN | |
10 | + * Copyright (C) 2010 by TOPPERS/ASP for LPC project | |
11 | + * http://sourceforge.jp/projects/toppersasp4lpc/ | |
12 | + * | |
13 | + * 上記著作権者は,Free Software Foundation によって公表されている | |
14 | + * GNU General Public License の Version 2 に記述されている条件か,以 | |
15 | + * 下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェア(本ソフトウェ | |
16 | + * アを改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下, | |
17 | + * 利用と呼ぶ)することを無償で許諾する. | |
18 | + * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 | |
19 | + * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー | |
20 | + * スコード中に含まれていること. | |
21 | + * (2) 本ソフトウェアを再利用可能なバイナリコード(リロケータブルオブ | |
22 | + * ジェクトファイルやライブラリなど)の形で利用する場合には,利用 | |
23 | + * に伴うドキュメント(利用者マニュアルなど)に,上記の著作権表示, | |
24 | + * この利用条件および下記の無保証規定を掲載すること. | |
25 | + * (3) 本ソフトウェアを再利用不可能なバイナリコードの形または機器に組 | |
26 | + * み込んだ形で利用する場合には,次のいずれかの条件を満たすこと. | |
27 | + * (a) 利用に伴うドキュメント(利用者マニュアルなど)に,上記の著作 | |
28 | + * 権表示,この利用条件および下記の無保証規定を掲載すること. | |
29 | + * (b) 利用の形態を,別に定める方法によって,上記著作権者に報告する | |
30 | + * こと. | |
31 | + * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 | |
32 | + * 害からも,上記著作権者を免責すること. | |
33 | + * | |
34 | + * 本ソフトウェアは,無保証で提供されているものである.上記著作権者は, | |
35 | + * 本ソフトウェアに関して,その適用可能性も含めて,いかなる保証も行わ | |
36 | + * ない.また,本ソフトウェアの利用により直接的または間接的に生じたい | |
37 | + * かなる損害に関しても,その責任を負わない. | |
38 | + * | |
39 | + */ | |
40 | + | |
41 | +/** | |
42 | + * \ingroup TOPPERS_ASP | |
43 | + * \defgroup TOPPERS_CHIP LPC17XX チップ依存部 | |
44 | + * \{ | |
45 | + */ | |
46 | +/** | |
47 | + * \file lpc1700.h | |
48 | + * \details NXP LPC1700シリーズのハードウェア宣言 | |
49 | + */ | |
50 | +#ifndef TOPPERS_CHIP_LPC1700_H | |
51 | +#define TOPPERS_CHIP_LPC1700_H | |
52 | + | |
53 | +#include <sil.h> | |
54 | + | |
55 | +/* | |
56 | + * CORTEX-M3 CPUの依存部のインクルード | |
57 | + */ | |
58 | +#include "arm_m_gcc/common/arm_m.h" | |
59 | +#ifndef TOPPERS_MACRO_ONLY | |
60 | +#include "LPC17xx.h" | |
61 | +#endif | |
62 | + | |
63 | +/** | |
64 | + * \brief 割込み番号の最大値 | |
65 | + * \details | |
66 | + * CORTEX-M3のNVIC割り込みコントローラは任意個の割り込み源を持つ。このマクロは、 | |
67 | + * 最大の割り込み番号の値を表す。 | |
68 | + */ | |
69 | +#define TMAX_INTNO (16 + 34) // LPC1768の最大割り込み番号は16+32 | |
70 | + | |
71 | +/** | |
72 | + * \brief 割込み優先度のビット幅 | |
73 | + * \details | |
74 | + * CORTEX-M3のNVIC割り込みコントローラはSoC実装者の判断で最大8bitの割り込み優先値を | |
75 | + * 持つことができる。TBITW_IPRIは、その優先値を表すフィールドの幅を示す。フィールド幅は | |
76 | + * SoC設計者が決める。通常はユーザーズマニュアルなどに書いてある。 | |
77 | + * | |
78 | + * LPC17xxでは5bitである。 | |
79 | + */ | |
80 | +#define TBITW_IPRI 5 // LPC1768 の優先度は32順位5bit | |
81 | + | |
82 | +/** | |
83 | + * \brief 割込み優先度ビット幅中のサブ優先度のビット幅 | |
84 | + * \details | |
85 | + * サブ優先度はAIRCRレジスタで指定できる。無指定の場合、0ビットが使われる。 | |
86 | + */ | |
87 | +#define TBITW_SUBIPRI 0 | |
88 | + | |
89 | +/** | |
90 | + * \brief 割込みベクタ番号定義 | |
91 | + * \details | |
92 | + * NXP提供のCMSIS LPC17xx.hで宣言されているXXXX_IRQnに以下のスクリプトを適応して生成した。irqsは、宣言を格納したファイル名である。 | |
93 | + * \code | |
94 | + * sed -e "s/ //" < irqs | sed -e "s/_.*$//" | awk '{print("#define IRQ_VECTOR_"$1"\t\t(16+"$1"_IRQn)")}' - | |
95 | + * \endcode | |
96 | + * XXX_IRQnはCMSISの定義により、NVICの割り込み番号である。これはCORTEX-M3の例外番号から16を引いたものである。TOPPERS/ASPのCORTEX-M3実装では | |
97 | + * IRQ_VECTOR_XXXXを例外番号として宣言している。つまりXXX_IRQnに16を足す。 | |
98 | + */ | |
99 | +#define IRQ_VECTOR_WDT (16+WDT_IRQn) | |
100 | +#define IRQ_VECTOR_TIMER0 (16+TIMER0_IRQn) | |
101 | +#define IRQ_VECTOR_TIMER1 (16+TIMER1_IRQn) | |
102 | +#define IRQ_VECTOR_TIMER2 (16+TIMER2_IRQn) | |
103 | +#define IRQ_VECTOR_TIMER3 (16+TIMER3_IRQn) | |
104 | +#define IRQ_VECTOR_UART0 (16+UART0_IRQn) | |
105 | +#define IRQ_VECTOR_UART1 (16+UART1_IRQn) | |
106 | +#define IRQ_VECTOR_UART2 (16+UART2_IRQn) | |
107 | +#define IRQ_VECTOR_UART3 (16+UART3_IRQn) | |
108 | +#define IRQ_VECTOR_PWM1 (16+PWM1_IRQn) | |
109 | +#define IRQ_VECTOR_I2C0 (16+I2C0_IRQn) | |
110 | +#define IRQ_VECTOR_I2C1 (16+I2C1_IRQn) | |
111 | +#define IRQ_VECTOR_I2C2 (16+I2C2_IRQn) | |
112 | +#define IRQ_VECTOR_SPI (16+SPI_IRQn) | |
113 | +#define IRQ_VECTOR_SSP0 (16+SSP0_IRQn) | |
114 | +#define IRQ_VECTOR_SSP1 (16+SSP1_IRQn) | |
115 | +#define IRQ_VECTOR_PLL0 (16+PLL0_IRQn) | |
116 | +#define IRQ_VECTOR_RTC (16+RTC_IRQn) | |
117 | +#define IRQ_VECTOR_EINT0 (16+EINT0_IRQn) | |
118 | +#define IRQ_VECTOR_EINT1 (16+EINT1_IRQn) | |
119 | +#define IRQ_VECTOR_EINT2 (16+EINT2_IRQn) | |
120 | +#define IRQ_VECTOR_EINT3 (16+EINT3_IRQn) | |
121 | +#define IRQ_VECTOR_ADC (16+ADC_IRQn) | |
122 | +#define IRQ_VECTOR_BOD (16+BOD_IRQn) | |
123 | +#define IRQ_VECTOR_USB (16+USB_IRQn) | |
124 | +#define IRQ_VECTOR_CAN (16+CAN_IRQn) | |
125 | +#define IRQ_VECTOR_DMA (16+DMA_IRQn) | |
126 | +#define IRQ_VECTOR_I2S (16+I2S_IRQn) | |
127 | +#define IRQ_VECTOR_ENET (16+ENET_IRQn) | |
128 | +#define IRQ_VECTOR_RIT (16+RIT_IRQn) | |
129 | +#define IRQ_VECTOR_MCPWM (16+MCPWM_IRQn) | |
130 | +#define IRQ_VECTOR_QEI (16+QEI_IRQn) | |
131 | +#define IRQ_VECTOR_PLL1 (16+PLL1_IRQn) | |
132 | +#define IRQ_VECTOR_USBActivity (16+USBActivity_IRQn) | |
133 | +#define IRQ_VECTOR_CANActivity (16+CANActivity_IRQn) | |
134 | + | |
135 | + | |
136 | +/** | |
137 | + * \brief 割込みハンドラ番号定義 | |
138 | + * \details | |
139 | + * NXP提供のCMSIS LPC17xx.hで宣言されているXXXX_IRQnに以下のスクリプトを適応して生成した。irqsは、宣言を格納したファイル名である。 | |
140 | + * \code | |
141 | + * sed -e "s/ //" < irqs | sed -e "s/_.*$//" | awk '{print("#define INHNO_"$1"\t\tIRQ_VECTOR_"$1)}' - | |
142 | + * \endcode | |
143 | + * XXX_IRQnはCMSISの定義により、NVICの割り込み番号である。これはCORTEX-M3の例外番号から16を引いたものである。TOPPERS/ASPのCORTEX-M3実装では | |
144 | + * INHNO_XXXXを例外番号として宣言している。つまりIRQ_VECTOR_XXXと同じ値である | |
145 | + */ | |
146 | + | |
147 | +#define INHNO_WDT IRQ_VECTOR_WDT | |
148 | +#define INHNO_TIMER0 IRQ_VECTOR_TIMER0 | |
149 | +#define INHNO_TIMER1 IRQ_VECTOR_TIMER1 | |
150 | +#define INHNO_TIMER2 IRQ_VECTOR_TIMER2 | |
151 | +#define INHNO_TIMER3 IRQ_VECTOR_TIMER3 | |
152 | +#define INHNO_UART0 IRQ_VECTOR_UART0 | |
153 | +#define INHNO_UART1 IRQ_VECTOR_UART1 | |
154 | +#define INHNO_UART2 IRQ_VECTOR_UART2 | |
155 | +#define INHNO_UART3 IRQ_VECTOR_UART3 | |
156 | +#define INHNO_PWM1 IRQ_VECTOR_PWM1 | |
157 | +#define INHNO_I2C0 IRQ_VECTOR_I2C0 | |
158 | +#define INHNO_I2C1 IRQ_VECTOR_I2C1 | |
159 | +#define INHNO_I2C2 IRQ_VECTOR_I2C2 | |
160 | +#define INHNO_SPI IRQ_VECTOR_SPI | |
161 | +#define INHNO_SSP0 IRQ_VECTOR_SSP0 | |
162 | +#define INHNO_SSP1 IRQ_VECTOR_SSP1 | |
163 | +#define INHNO_PLL0 IRQ_VECTOR_PLL0 | |
164 | +#define INHNO_RTC IRQ_VECTOR_RTC | |
165 | +#define INHNO_EINT0 IRQ_VECTOR_EINT0 | |
166 | +#define INHNO_EINT1 IRQ_VECTOR_EINT1 | |
167 | +#define INHNO_EINT2 IRQ_VECTOR_EINT2 | |
168 | +#define INHNO_EINT3 IRQ_VECTOR_EINT3 | |
169 | +#define INHNO_ADC IRQ_VECTOR_ADC | |
170 | +#define INHNO_BOD IRQ_VECTOR_BOD | |
171 | +#define INHNO_USB IRQ_VECTOR_USB | |
172 | +#define INHNO_CAN IRQ_VECTOR_CAN | |
173 | +#define INHNO_DMA IRQ_VECTOR_DMA | |
174 | +#define INHNO_I2S IRQ_VECTOR_I2S | |
175 | +#define INHNO_ENET IRQ_VECTOR_ENET | |
176 | +#define INHNO_RIT IRQ_VECTOR_RIT | |
177 | +#define INHNO_MCPWM IRQ_VECTOR_MCPWM | |
178 | +#define INHNO_QEI IRQ_VECTOR_QEI | |
179 | +#define INHNO_PLL1 IRQ_VECTOR_PLL1 | |
180 | +#define INHNO_USBActivity IRQ_VECTOR_USBActivity | |
181 | +#define INHNO_CANActivity IRQ_VECTOR_CANActivity | |
182 | + | |
183 | +/** | |
184 | + * \brief TOPPERS/ASP割込み番号定義 | |
185 | + * \details | |
186 | + * NXP提供のCMSIS LPC17xx.hで宣言されているXXXX_IRQnに以下のスクリプトを適応して生成した。irqsは、宣言を格納したファイル名である。 | |
187 | + * \code | |
188 | + * sed -e "s/ //" < irqs | sed -e "s/_.*$//" | awk '{print("#define INTNO_"$1"\t\tIRQ_VECTOR_"$1)}' - | |
189 | + * \endcode | |
190 | + * XXX_IRQnはCMSISの定義により、NVICの割り込み番号である。これはCORTEX-M3の例外番号から16を引いたものである。TOPPERS/ASPのCORTEX-M3実装では | |
191 | + * INTNO_XXXXを例外番号として宣言している。つまりIRQ_VECTOR_XXXと同じ値である | |
192 | + */ | |
193 | +#define INTNO_WDT IRQ_VECTOR_WDT | |
194 | +#define INTNO_TIMER0 IRQ_VECTOR_TIMER0 | |
195 | +#define INTNO_TIMER1 IRQ_VECTOR_TIMER1 | |
196 | +#define INTNO_TIMER2 IRQ_VECTOR_TIMER2 | |
197 | +#define INTNO_TIMER3 IRQ_VECTOR_TIMER3 | |
198 | +#define INTNO_UART0 IRQ_VECTOR_UART0 | |
199 | +#define INTNO_UART1 IRQ_VECTOR_UART1 | |
200 | +#define INTNO_UART2 IRQ_VECTOR_UART2 | |
201 | +#define INTNO_UART3 IRQ_VECTOR_UART3 | |
202 | +#define INTNO_PWM1 IRQ_VECTOR_PWM1 | |
203 | +#define INTNO_I2C0 IRQ_VECTOR_I2C0 | |
204 | +#define INTNO_I2C1 IRQ_VECTOR_I2C1 | |
205 | +#define INTNO_I2C2 IRQ_VECTOR_I2C2 | |
206 | +#define INTNO_SPI IRQ_VECTOR_SPI | |
207 | +#define INTNO_SSP0 IRQ_VECTOR_SSP0 | |
208 | +#define INTNO_SSP1 IRQ_VECTOR_SSP1 | |
209 | +#define INTNO_PLL0 IRQ_VECTOR_PLL0 | |
210 | +#define INTNO_RTC IRQ_VECTOR_RTC | |
211 | +#define INTNO_EINT0 IRQ_VECTOR_EINT0 | |
212 | +#define INTNO_EINT1 IRQ_VECTOR_EINT1 | |
213 | +#define INTNO_EINT2 IRQ_VECTOR_EINT2 | |
214 | +#define INTNO_EINT3 IRQ_VECTOR_EINT3 | |
215 | +#define INTNO_ADC IRQ_VECTOR_ADC | |
216 | +#define INTNO_BOD IRQ_VECTOR_BOD | |
217 | +#define INTNO_USB IRQ_VECTOR_USB | |
218 | +#define INTNO_CAN IRQ_VECTOR_CAN | |
219 | +#define INTNO_DMA IRQ_VECTOR_DMA | |
220 | +#define INTNO_I2S IRQ_VECTOR_I2S | |
221 | +#define INTNO_ENET IRQ_VECTOR_ENET | |
222 | +#define INTNO_RIT IRQ_VECTOR_RIT | |
223 | +#define INTNO_MCPWM IRQ_VECTOR_MCPWM | |
224 | +#define INTNO_QEI IRQ_VECTOR_QEI | |
225 | +#define INTNO_PLL1 IRQ_VECTOR_PLL1 | |
226 | +#define INTNO_USBActivity IRQ_VECTOR_USBActivity | |
227 | +#define INTNO_CANActivity IRQ_VECTOR_CANActivity | |
228 | + | |
229 | +#ifndef TOPPERS_MACRO_ONLY | |
230 | + | |
231 | +#endif /* TOPPERS_MACRO_ONLY */ | |
232 | +#endif /* TOPPERS_CHIP_LPC17XX_H */ | |
233 | + | |
234 | +/** | |
235 | + * \} | |
236 | + */ |
@@ -71,4 +71,4 @@ OFFSET_TF := $(TARGETDIR)/target_offset.tf | ||
71 | 71 | # |
72 | 72 | # プロセッサ依存部のインクルード |
73 | 73 | # |
74 | -include $(SRCDIR)/chip/$(CHIP)_$(TOOL)/Makefile.chip | |
74 | +include $(SRCDIR)/arch/$(PRC)_$(TOOL)/$(CHIP)_$(TOOL)/Makefile.chip |
@@ -67,4 +67,5 @@ OFFSET_TF := $(TARGETDIR)/target_offset.tf | ||
67 | 67 | # |
68 | 68 | # プロセッサ依存部のインクルード |
69 | 69 | # |
70 | -include $(SRCDIR)/chip/$(CHIP)_$(TOOL)/Makefile.chip | |
70 | +include $(SRCDIR)/arch/$(PRC)_$(TOOL)/$(CHIP)_$(TOOL)/Makefile.chip | |
71 | + |