[.Net Micro Framework PortingKit-03]デバッグ初歩:LEDランプ点灯
24466 ワード
前回の記事「STM 3210 Eプラットフォーム構築」では、STM 3210の基本プラットフォームを構築し、コンパイル済みなので、次はMDKによるダウンロードデバッグを検討します.
私たちはシート外SRAMを使ったので、MDKスクリプトを書いて、3つの機能を実現しなければなりません.1つはSRAMの初期化、2つはミラーファイルのダウンロード、3つはPCポインタの設定です.
EM-TM 3210 Eランダムディスクにはいくつかの開発ボードのテストエンジニアリングがあるので、マニュアルを見る必要はありません.まず、コードの中で収穫があるかどうかを見てみましょう.テストエンジニアリングの起動コードstm 32 f 10 x_vector.sでは、シート外SRAM初期化コードを見つけることができます.具体的な内容は以下の通りです.
では、これをサンプルとして、スクリプトファイルConfigを作成します.ini、最終的な内容は以下の通りです.
ダウンロードに追わないで、LEDランプが点滅するコードを作成します.
私たちはいます.\Solutions\STM3210E\NativeSample\NativeSample.cppファイルには、次のコードが追加されます.
では、MDKにCortex-M 3ベースのプロジェクトを新規作成し、iniファイルを作成してからデバッグを開始します(MDKの詳細なデバッグ方法は、関連ドキュメントを参照してください.MDKのローカライズが優れているので、簡単にできます).デバッグ中のMDKインタフェースを次に示します.
そしてEM-STM 3210 E開発ボードを見て、ハッ!D 1とD 2のLEDが点滅していることがわかります.
しかし、あまり早く喜ばないでください.私たちが今完成した仕事は、万里の長征の第一歩で、もっと煩わしい複雑な仕事が後ろにあります.Cortex-M 3アーキテクチャのチップを選んだので、現在.Net Micro Frameworkではサポートされていません.重要な問題はCortex-M 3の割り込みアーキテクチャがARM 7とARM 9と大きく異なり、割り込みベクトルテーブルの位置も必ずしも0アドレスの先頭に置くとは限らず、NVICによって構成され、この開発ボードのメモリが小さいため、関連コードはNor Flashに置いて起動することである.Net Micro Frameworkの慣習は異なるので、私たちは自分で多くのコードを再構築し、修正して、私たちの開発ボードを正常に動作させる必要があります(ただし、Net Micro Frameworkの初心者もあまり心配しないでください.ARM 7またはARM 9アーキテクチャに基づくチップを選択すれば、あなたの仕事は簡単になります).
次に、割り込みベクトルテーブルの作成、起動コードの修正、元の割り込みに関するコードの調整、クロック初期化、NVIC初期化、FMSC初期化、SRAM初期化、シリアル初期化、IO駆動開発、Nand Flash駆動開発、I 2 C駆動開発、SPI駆動開発、LED駆動開発、LCD駆動開発の順に行います.
道は長くて、私は上下して求めます--実は埋め込み式の開発は挑戦と楽しみに満ちていることです!
本文は“葉帆工房”のブログから出て、転載して作者と連絡してください!
私たちはシート外SRAMを使ったので、MDKスクリプトを書いて、3つの機能を実現しなければなりません.1つはSRAMの初期化、2つはミラーファイルのダウンロード、3つはPCポインタの設定です.
EM-TM 3210 Eランダムディスクにはいくつかの開発ボードのテストエンジニアリングがあるので、マニュアルを見る必要はありません.まず、コードの中で収穫があるかどうかを見てみましょう.テストエンジニアリングの起動コードstm 32 f 10 x_vector.sでは、シート外SRAM初期化コードを見つけることができます.具体的な内容は以下の通りです.
- ; FSMC Bank1 NOR/SRAM3 is used for the STM3210E-EVAL, if another Bank is
-
- ; required, then adjust the Register Addresses
-
-
-
- ; Enable FSMC clock
-
- LDR R0,= 0x00000114
-
- LDR R1,= 0x40021014
-
- STR R0,[R1]
-
-
-
- ; Enable GPIOD, GPIOE, GPIOF and GPIOG clocks
-
- LDR R0,= 0x000001E0
-
- LDR R1,= 0x40021018
-
- STR R0,[R1]
-
-
-
- ; SRAM Data lines, NOE and NWE configuration
-
- ; SRAM Address lines configuration
-
- ; NOE and NWE configuration
-
- ; NE3 configuration
-
- ; NBL0, NBL1 configuration
-
-
-
- LDR R0,= 0x44BB44BB
-
- LDR R1,= 0x40011400
-
- STR R0,[R1]
-
-
-
- LDR R0,= 0xBBBBBBBB
-
- LDR R1,= 0x40011404
-
- STR R0,[R1]
-
-
-
- LDR R0,= 0xB44444BB
-
- LDR R1,= 0x40011800
-
- STR R0,[R1]
-
-
-
- LDR R0,= 0xBBBBBBBB
-
- LDR R1,= 0x40011804
-
- STR R0,[R1]
-
-
-
- LDR R0,= 0x44BBBBBB
-
- LDR R1,= 0x40011C00
-
- STR R0,[R1]
-
-
-
- LDR R0,= 0xBBBB4444
-
- LDR R1,= 0x40011C04
-
- STR R0,[R1]
-
-
-
- LDR R0,= 0x44BBBBBB
-
- LDR R1,= 0x40012000
-
- STR R0,[R1]
-
-
-
- LDR R0,= 0x44444B44
-
- LDR R1,= 0x40012004
-
- STR R0,[R1]
-
-
-
- ; FSMC Configuration
-
- ; Enable FSMC Bank1_SRAM Bank
-
-
-
- ;LDR R0,= 0x00001011
-
- ;LDR R1,= 0xA0000010
-
- ;STR R0,[R1]
-
-
-
- ;LDR R0,= 0x00000200
-
- ;LDR R1,= 0xA0000014
-
- ;STR R0,[R1]
-
-
-
- LDR R0,= 0x00001000
-
- LDR R1,= 0xA0000010
-
- STR R0,[R1]
-
-
-
- LDR R0,= 0x00000200
-
- LDR R1,= 0xA0000014
-
- STR R0,[R1]
-
-
-
- LDR R0,= 0x0FFFFFFF
-
- LDR R1,= 0xA0000114
-
- STR R0,[R1]
-
-
-
- LDR R0,= 0x00001001
-
- LDR R1,= 0xA0000010
-
- STR R0,[R1]
-
-
-
では、これをサンプルとして、スクリプトファイルConfigを作成します.ini、最終的な内容は以下の通りです.
- // SRAM3 0x68000000 - 0x68020000
-
- FUNC void InitSRAM3(void)
-
- {
-
- // FSMC
-
- _WDWORD(0x40021014,0x00000114);
-
- // FSMC GPIO
-
- _WDWORD(0x40021018,0x000001E0);
-
-
-
- // SRAM ,NOE NWE
-
- //SRAM
-
- //NOE NWE
-
- //NE3
-
- //NBL0,NBL1
-
- _WDWORD(0x40011400,0x44BB44BB);
-
- _WDWORD(0x40011404,0xBBBBBBBB);
-
- _WDWORD(0x40011800,0xB44444BB);
-
- _WDWORD(0x40011804,0xBBBBBBBB);
-
- _WDWORD(0x40011C00,0x44BBBBBB);
-
- _WDWORD(0x40011C04,0xBBBB4444);
-
- _WDWORD(0x40012000,0x44BBBBBB);
-
- _WDWORD(0x40012004,0x44444B44);
-
-
-
- //FSMC
-
- // FSMC Bank1_SRAM Bank
-
- _WDWORD(0xA0000010,0x00001000);
-
- _WDWORD(0xA0000014,0x00000200);
-
- _WDWORD(0xA0000114,0x0FFFFFFF);
-
- _WDWORD(0xA0000010,0x00001001);
-
- }
-
-
-
- InitSRAM3();
-
- exec("LOAD C:\\MicroFramework_CortexM3\\BuildOutput\\THUMB2\\MDK3.1\\le\\RAM\\debug\\STM3210E\\bin\\NativeSample.axf INCREMENTAL");
-
- PC = 0x20001000;
-
ダウンロードに追わないで、LEDランプが点滅するコードを作成します.
私たちはいます.\Solutions\STM3210E\NativeSample\NativeSample.cppファイルには、次のコードが追加されます.
- typedef volatile unsigned long vu32;
-
- typedef unsigned long u32;
-
- typedef unsigned short u16;
-
- typedef struct
-
- {
-
- vu32 CRL;
-
- vu32 CRH;
-
- vu32 IDR;
-
- vu32 ODR;
-
- vu32 BSRR;
-
- vu32 BRR;
-
- vu32 LCKR;
-
- } GPIO_TypeDef;
-
-
-
- #define PERIPH_BASE ((u32)0x40000000)
-
- #define APB2PERIPH_BASE (PERIPH_BASE + 0x10000)
-
- #define GPIOF_BASE (APB2PERIPH_BASE + 0x1C00)
-
- #define GPIOF ((GPIO_TypeDef *) GPIOF_BASE)
-
- #define GPIO_Pin_6 ((u16)0x0040)
-
- #define GPIO_Pin_7 ((u16)0x0080)
-
-
-
- void ApplicationEntryPoint()
-
- {
-
- //..................
-
-
-
- //
-
- u32 GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;
-
- u32 pinpos = 0x00,pos = 0x00,pinmask = 0x00;
-
- u32 tmpreg = GPIOF->CRL;
-
- for (int pinpos = 0x00; pinpos < 0x08; pinpos++)
-
- {
-
- pos = ((u32)0x01) << pinpos;
-
- if ((GPIO_Pin & pos) == pos)
-
- {
-
- pos = pinpos << 2;
-
- //Clear the corresponding low control register bits
-
- pinmask = ((u32)0x0F) << pos;
-
- tmpreg &= ~pinmask;
-
- //Write the mode configuration in the corresponding bits
-
- tmpreg |= ((u32)0x3) << pos;
-
- }
-
- }
-
- GPIOF->CRL = tmpreg;
-
-
-
- //
-
- while(TRUE)
-
- {
-
- GPIOF->BSRR = GPIO_Pin_6;
-
- GPIOF->BSRR = GPIO_Pin_7;
-
- for(long i=0;i<1000000;i++);
-
- GPIOF->BRR = GPIO_Pin_6;
-
- GPIOF->BRR = GPIO_Pin_7;
-
- for(long i=0;i<1000000;i++);
-
- }
-
- }
-
では、MDKにCortex-M 3ベースのプロジェクトを新規作成し、iniファイルを作成してからデバッグを開始します(MDKの詳細なデバッグ方法は、関連ドキュメントを参照してください.MDKのローカライズが優れているので、簡単にできます).デバッグ中のMDKインタフェースを次に示します.
そしてEM-STM 3210 E開発ボードを見て、ハッ!D 1とD 2のLEDが点滅していることがわかります.
しかし、あまり早く喜ばないでください.私たちが今完成した仕事は、万里の長征の第一歩で、もっと煩わしい複雑な仕事が後ろにあります.Cortex-M 3アーキテクチャのチップを選んだので、現在.Net Micro Frameworkではサポートされていません.重要な問題はCortex-M 3の割り込みアーキテクチャがARM 7とARM 9と大きく異なり、割り込みベクトルテーブルの位置も必ずしも0アドレスの先頭に置くとは限らず、NVICによって構成され、この開発ボードのメモリが小さいため、関連コードはNor Flashに置いて起動することである.Net Micro Frameworkの慣習は異なるので、私たちは自分で多くのコードを再構築し、修正して、私たちの開発ボードを正常に動作させる必要があります(ただし、Net Micro Frameworkの初心者もあまり心配しないでください.ARM 7またはARM 9アーキテクチャに基づくチップを選択すれば、あなたの仕事は簡単になります).
次に、割り込みベクトルテーブルの作成、起動コードの修正、元の割り込みに関するコードの調整、クロック初期化、NVIC初期化、FMSC初期化、SRAM初期化、シリアル初期化、IO駆動開発、Nand Flash駆動開発、I 2 C駆動開発、SPI駆動開発、LED駆動開発、LCD駆動開発の順に行います.
道は長くて、私は上下して求めます--実は埋め込み式の開発は挑戦と楽しみに満ちていることです!
本文は“葉帆工房”のブログから出て、転載して作者と連絡してください!