2016年08月31日

Sitaraプロセッサ(9): Thumb命令を使う

昨日、ようやくSitera AM3359のCortex-A8にプログラムをダウンロードして動作させることが出来ました。
 昨日までの話はこちら → Siteraプロセッサ(8): ベクタアドレスの変更

しばらくは、内蔵メモリだけを使うのでコードサイズは極力小さくしたいと思いますが、どうしたらよいでしょう?

答え:  THUMB命令を使うです!

しかし、Cortex-A8はリセット時はARM命令でプログラムする必要があります。そのため、mainから呼び出す関数をThumb命令でコンパイルしてやろうと思います。


そのためEWARMのプロジェクトでまずグループを作ります。
SitaraA0022.png

今回はTHUMBというグループを作りました。
SitaraA0023.png

そのTHUMBのグループにf.cを追加します。
SitaraA0024.png

ファイルmain.cとf.cを以下のように変更/作成します。
SitaraA0025.png

そして、プロジェクトのオプションとグループThumbのオプションをそれぞれ変更します。
SitaraA0026.png


これでメイクして、エラーが無ければOKです。
SitaraA0028.png



posted by EWARMJP at 12:00| Comment(0) | TrackBack(0) | TI(Texas Instruments) | このブログの読者になる | 更新情報をチェックする

2016年08月30日

Sitaraプロセッサ(8): ベクタアドレスの変更

Beaglebone Black上でprintfプログラムが動かない件ですが、原因が割込みベクタ周りにあると予想しています。
    昨日の話はこちら → Siteraプロセッサ(7): マップファイルを見てみる

Cortex-A8のベクターアドレスはコプロセッサ15に含まれています。
SitaraA0020.png

実際にアクセスるには、アセンブラ命令のMRC/MCRを使って以下のように記述する必要があります。
MRC p15, 0, <Rd>, c12, c0, 0 ; Read Secure or Nonsecure Vector Base
                         ; Address Register
MCR p15, 0, <Rd>, c12, c0, 0 ; Write Secure or Nonsecure Vector Base
                         ; Address Register
しかし、アセンブラで記述するのは面倒なので嫌です。

EWARMでは組込み関数が用意されており、このMCR/MRC命令を関数で記述することが出来ます。
短いのでプログラム全体でご紹介します。
まず#include <intrinsics.h>ですが、組込み関数を使う時に呼び出す必要があるヘッダにjなります。
そして、ベクタのアドレスを、0x402f0400に変更したいので、__MCR関数を記述しています。引数の順はMCR命令と同じです。

#include <stdio.h>
#include <intrinsics.h>

const unsigned int v_adr = 0x402f0400;
int main()
{
  __MCR(15,0,v_adr,12,0,0);//MCR p15, 0, <Rd>, c12, c0, 0 ;
  printf("hello EWARM-Sitera world\n");
  return 0;
}



これで、メイクしてダウンロードすると、以下のようになりました。
SitaraA0021.png

これで、まずはCortex-A8を使って遊ぶ環境が出来ました。。



posted by EWARMJP at 12:00| Comment(0) | TrackBack(0) | TI(Texas Instruments) | このブログの読者になる | 更新情報をチェックする

2016年08月29日

Sitaraプロセッサ(7): マップファイルを見てみる

昨日Beaglebone Blackにプログラムをダウンロードしましたが、printfが何も出てきませんでした。。

こうした時にはprintfの仕組みを考えてみます。
通常のprintfでは、UARTやCANを使って情報を出力するのですが、今回はEWARMのデバッガが持っているセミホスティングの機能を使います。

詳しくはARMのページに説明があります。
一部抜粋するとこんな絵があります。

SitaraA0017.png

SVCコールしています。 これは、割込み(例外)を発生させています。
しかし、今回のプログラムでは割込みベクターはどうなっているのか?すこし考えてみましょう。
SitaraA0018.png


Cortex-Aでは割込みベクタは任意のアドレスに配置が出来るのですが、プログラムで変更してあげないといけないことになります。
そのためにマップファイルを確認してベクタがどこにあるか調べます。ここでは0x402f0400にあることが解りました。
SitaraA0019.png

さて、明日はプログラムを変更してみます。
posted by EWARMJP at 12:00| Comment(0) | TrackBack(0) | TI(Texas Instruments) | このブログの読者になる | 更新情報をチェックする

2016年08月28日

Sitaraプロセッサ(6): プログラムをダウンロードして実行

デバッグ設定も終わったので作ったプログラムを動かして見ましょう。
   昨日のページはこちら → Siteraプロセッサ(5): デバッグ設定


EWARMの右上のダウンロードしてデバッグボタンをクリックします。
SitaraA0014.png

すると、デバッグモードになります。ターミナルI/O画面を評価させます。
SitaraA0015.png


で、実行しましたが・・・・ターミナルI/Oに何も表示されません。
それどころか・・・
SitaraA0016.png

何が起こったかを考える必要があります。



posted by EWARMJP at 12:00| Comment(0) | TrackBack(0) | TI(Texas Instruments) | このブログの読者になる | 更新情報をチェックする

2016年08月27日

Sitaraプロセッサ(5): デバッグ設定

昨日作ったプログラムをダウンロードしてみます。


多少オプションを変更した方が良いと思いますので、プロジェクトオプションを一通り見直します。
まず、ドライバをI-jetにします。
SitaraA0011.png

ダウンロードの設定を以下のようにします。まず基本ベリファイは常に実行でも良いと思います。また、今回はRAMに書き込むのでフラッシュローダを使用しません。
SitaraA0012.png

さらにI-jetの設定になりますが、リセットを”ソフトウェア”にします。
SitaraA0013.png

まずはここまで設定しましょう。



タグ:Sitara AM3359
posted by EWARMJP at 12:00| Comment(0) | TrackBack(0) | TI(Texas Instruments) | このブログの読者になる | 更新情報をチェックする

2016年08月26日

Sitaraプロセッサ(4): EWARMでプログラムを作ってみる1

それでは、簡単なプログラムを作ってBeaglebone Blackで動かして見たいと思います。
そのためには、ボードの他にICEとICEコネクタが必要です。
  ここも参考にしてください。 


まずはEWARMを起動し、プロジェクトを作りましょう。
BeagleA020.png
BeagleA021.png
SitaraA0005.png
ここで、いったんワークスペースを保存しておきましょう。
SitaraA0006.png


ここでオプション設定でマイコンをAM3359に設定しましょう。
BeagleA023.png
それで、ICEをI-jetにしておきます。
BeagleA024.png

そして、リンカ設定を開き、リンカ設定ファイルでデフォルトのオーバーライドを実行します。
SitaraA0007.png

そのうえで編集をクリックしてみます。
SitaraA0008.png

これを昨日調べたメモリマップを比べると・・・
SitaraA0004.png

ROMという部分は、SRAM internal, RAMはL3OCMC0に割り当てられています。
ということで、「そのまま動くじゃん。」と理解しました。

せっかくなのでprintf("hello EWARM-Sitera world\n"); を動かして見ようと思います。
UARTとかの設定が面倒なので、デバッガインタフェース(セミホスティング)でEWARM上に結果を表示させます。
SitaraA0009.png

で、結局コードはこんな形になります。
#include <stdio.h>

int main()
{
  printf("hello EWARM-Sitera world\n");
  return 0;
}


メイクを実行して、以下のようにエラーが無ければOKです。
SitaraA0010.png






posted by EWARMJP at 12:00| Comment(0) | TrackBack(0) | TI(Texas Instruments) | このブログの読者になる | 更新情報をチェックする