SSブログ
ColdFire V2 ブログトップ
- | 次の20件

メモリ・ダンプ・プログラム [ColdFire V2]このエントリーを含むはてなブックマーク#

1990557

マイコンのプログラムを作成するんだったら、このツールははずせないでしょう。 メモリ・ダンプを作成するプログラムをSilentCで書きました。

いきなり、プログラム

まずは、プログラムの公開。

d(char *addr){
 int i,j;
 addr&=0xFFFFFFF0;
 for(i=0;i<16;i++){
  PrHex(addr);PrStr("  ");
  for(j=0;j<16;j++){PrHexByte(addr[j]);PrChar(' ');}
  PrChar(' ');
  for(j=0;j<16;j++){
  PrChar(((addr[j]<32)||(addr[j]>=127))?'.':addr[j]);
  }
  PrStr("\r\n");SystemSleep();
  addr+=16;
 }
}

インタプリタで操作することを考えて、引数ひとつだけの関数としました。 引数で指定されたアドレスから256バイトの領域を表示します。 また、最初のアドレスは、16バイト境界から始まるようにしてあります。

使い方

この関数をmというファイルに保存して、使用します。

OK
m::d(0x00014100)
00014100  0d 0a 3c 42 4f 44 59 3e 0d 0a 3c 43 45 4e 54 45  ..<BODY>..<CENTE
00014110  52 3e 0d 0a 3c 48 31 3e 3c 46 4f 4e 54 20 73 69  R>..<H1><FONT si
00014120  7a 65 3d 22 36 22 20 66 61 63 65 3d 22 41 72 69  ze="6" face="Ari
00014130  61 6c 20 42 6c 61 63 6b 22 3e 45 2d 6d 61 69 6c  al Black">E-mail
00014140  20 73 65 6e 64 20 74 65 73 74 3c 2f 46 4f 4e 54   send test</FONT
00014150  3e 3c 2f 48 31 3e 0d 0a 3c 46 4f 52 4d 20 61 63  ></H1>..<FORM ac
00014160  74 69 6f 6e 3d 22 4d 61 69 6c 45 6e 64 2e 68 74  tion="MailEnd.ht
00014170  6d 22 3e 0d 0a 3c 49 4e 50 55 54 20 74 79 70 65  m">..<INPUT type
00014180  3d 22 74 65 78 74 22 20 73 69 7a 65 3d 22 33 30  ="text" size="30
00014190  22 20 6e 61 6d 65 3d 22 45 58 45 43 27 4d 61 69  " name="EXEC'Mai
000141a0  6e 3a 3a 6d 61 69 6e 27 22 20 76 61 6c 3d 22 22  n::main'" val=""
000141b0  3e 0d 0a 3c 49 4e 50 55 54 20 74 79 70 65 3d 22  >..<INPUT type="
000141c0  73 75 62 6d 69 74 22 20 76 61 6c 75 65 3d 22 67  submit" value="g
000141d0  6f 22 3e 0d 0a 3c 2f 46 4f 52 4d 3e 0d 0a 3c 2f  o">..</FORM>..</
000141e0  43 45 4e 54 45 52 3e 0d 0a 3c 2f 42 4f 44 59 3e  CENTER>..</BODY>
000141f0  0d 0a fc 00 01 29 53 65 74 45 6e 64 2e 68 74 6d  .....)SetEnd.htm

ファイル領域と呼ばれている箇所のダンプです。

プログラムの問題点

これで、どこでもダンプできると思っていたのですが、無理なところもあるみたいです。

OK
m::d(0)
00000000  addr not found in m

ポインタ変数に"0"を代入すると、うまく動いてくれません。 何か、特別な意味を持ってしまうようです。

OK
m::d(0x40000000)
40000000  40 00 00 01 00 00 00 00 20 00 02 00 00 00 24 00  @....... .....$.
40000010  80 01 00 00 00 00 00 00 00 40 00 0c 30 e1 00 00  .........@..0...
40000020  03 00 00 08 00 00 00 00 00 00 00 00 00 00 00 00  ................
40000030  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
40000040  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
40000050  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
40000060  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
40000070  00 00 00 00

I/Oレジスタ領域の先頭をダンプさせたら、途中で止まってしまいました。 0x40000070(IPSBAR+0x00_0070)のあたりは、Reservedとされている領域なので、未公開の何か危険なものが潜んでいたのだろうと想像します。 私の基板にはリセットスイッチを付けていないので、こうなるとパワー・オン・リセットで復帰させるしかありません。 ダンプの長さも指定できるようにした方がよかったかな。

参考文献

まだ、在庫あります。

Interface (インターフェース) 2008年 09月号 [雑誌]

Interface (インターフェース) 2008年 09月号 [雑誌]

  • 作者:
  • 出版社/メーカー: CQ出版
  • 発売日: 2008/07/25
  • メディア: 雑誌

3軸加速度データ送信プログラム [ColdFire V2]このエントリーを含むはてなブックマーク#

1990557

あいかわらず、加速度センサのデータをUDPで送り出すプログラムを改善しておりました。 オリジナルのファイル"ad"を変更して、3軸加速度データを送信するようにしてみました。

文字列バッファと送信バッファを準備した

3軸の加速度データを送信するために、各加速度データを数値文字列に変換し、セミコロンでつないで一行のデータとしてみました。 変換後の数値文字列をnbufポインタの指示するバッファに入れて、 bufポインタの指示するバッファに順に送信データを作っていきます。

adinit(void){InitAd(0x70);}disp(char ch){PrNum(GetAd(ch));}
udpsend(char *str){
  char *soc,*nbuf,*buf;long ip;
  ip=GetIP(str);if(ip==0)return;
  soc=CreateSocket(0);
  buf=MemoryAlloc(30);
  nbuf=MemoryAlloc(10);
  InitAd(0x70);
  #stop 0
  for(;;){
    GetDigit(GetAd(4),nbuf);StrCpy(buf,nbuf);StrCat(buf,";");
    GetDigit(GetAd(5),nbuf);StrCat(buf,nbuf);StrCat(buf,";");
    GetDigit(GetAd(6),nbuf);StrCat(buf,nbuf);StrCat(buf,";");
    SendTo(soc,ip,30049,buf,StrLen(buf));
    if(Getc(0)=='q')break;
  }
  MemoryFree(nbuf);
  MemoryFree(buf);
  CloseSocket(soc);
}

まあ、動きはしますが、ワークエリアを複数取る上にプログラムが長ったらしくなるので、美しくありません。

送信バッファだけを使う方式

上の例は、BASIC的な発想に基づいています。 二つ目は、Cらしく、ポインタを駆使して、送信バッファだけを使います。

adinit(void){InitAd(0x70);}disp(char ch){PrNum(GetAd(ch));}
udpsend(char *str){
  char *soc,*buf;long ip;
  ip=GetIP(str);if(ip==0)return;
  soc=CreateSocket(0);
  buf=MemoryAlloc(30);
  InitAd(0x70);
  #stop 0
  for(;;){
    GetDigit(GetAd(4),buf);StrCat(buf,";");
    GetDigit(GetAd(5),buf+StrLen(buf));StrCat(buf,";");
    GetDigit(GetAd(6),buf+StrLen(buf));StrCat(buf,";");
    SendTo(soc,ip,30049,buf,StrLen(buf));
    if(Getc(0)=='q')break;
  }
  MemoryFree(buf);
  CloseSocket(soc);
}

StrLen()関数が重そうなのですが、多少はマシでしょう。

LPFを実装してみた

ローパスフィルタを入れてみました。 PC側でフィルタ処理をすると送信データ長が長くなってしまい、処理速度が低下すると思ったので、ColdFireで複数測定値の和を求めるように変更しました。

adinit(void){InitAd(0x70);}disp(char ch){PrNum(GetAd(ch));}
udpsend(char *str){
  char *soc,*buf;long ip;
  int i;
  long x,y,z;
  ip=GetIP(str);if(ip==0)return;
  soc=CreateSocket(0);
  buf=MemoryAlloc(30);
  InitAd(0x70);
  #stop 0
  for(;;){
    x=y=z=0;
    for(i=0;i<4;i++){x+=GetAd(4);y+=GetAd(5);z+=GetAd(6);}
    GetDigit(x,buf);StrCat(buf,";");
    GetDigit(y,buf+StrLen(buf));StrCat(buf,";");
    GetDigit(z,buf+StrLen(buf));StrCat(buf,";");
    SendTo(soc,ip,30049,buf,StrLen(buf));
    if(Getc(0)=='q')break;
  }
  MemoryFree(buf);
  CloseSocket(soc);
}

たった、4測定分の加速度データの和を求めているだけなのに、処理速度が落ちてしまいました。 これは、インタプリタという仕組みの限界なのでしょうか。

文字列変換は重そうなので、直接バイナリデータとして送信したほうが良さそうだな。

参考文献

まだ、在庫があるらしいぞ。

Interface (インターフェース) 2008年 09月号 [雑誌]

Interface (インターフェース) 2008年 09月号 [雑誌]

  • 作者:
  • 出版社/メーカー: CQ出版
  • 発売日: 2008/07/25
  • メディア: 雑誌

やっぱり最初はLEDピカピカ [ColdFire V2]このエントリーを含むはてなブックマーク#

1990557

SilentC で、アプリケーションを作りました。 やっぱり、最初は LED ピカピカでしょう。

ちょっと、お借りします

付録基板には、 LED が二個実装されていますが、どちらも ETHER ポートの状態を示すために使用されています。 今回のプログラムでは、これら二つの LED をお借りして LED ピカピカを実現します。

回路図を見ると、二つの LED は、 ACTLEDLNKLED の二つの端子に接続されています。 これらの端子は、それぞれ、 PLD[0]PLD[1] という別名を持っていて、汎用入出力ポートとして使用することが出来ます。 汎用出力として使用する場合には、 PLDPAR[x] ビットをクリアし、 DDRLD[x] ビットをセットします。 LED の点灯状態を制御するには、 PORTLD[x] ビットを使用します。 このビットをクリアすると点灯、セットすると消灯します。

なお、これらの端子は LED 出力として使用することを前提として作られているはずなのですが、 LED を駆動するために定電流制御を行うわけでもなく、大電流に対応したドライバがつながっているわけでもなく、他の汎用出力と同じ仕様になっているようです。

さあ、方針が決まったところでプログラミングの開始です。

PEEK は、どこ? POKE は、どこ?

マイコンのペリフェラルにつながっているレジスタをアクセスするためには、 メモリ空間の特定のアドレスへのアクセスをする手法が必要です。

そこで、「PEEK 関数と POKE 関数」を探したのですが、見当たりません。 よくよく考えたら、 C では、こういった関数を使わなくてもメモリへのアクセスは自由に出来るのでした。 インタプリタと言っても、 BASIC じゃなかったのね。

10 main(){
20   char *portld = 0x40100015; // PORTLD
30   char *ddrld  = 0x4010002D; // DDRLD
40   char *pldpar = 0x40100075; // PLDPAR
50   *portld &= 0xFC; // PORTLD[1:0]=0
60   *ddrld  |= 0x03; // DDRLD[1:0]=1
70   *pldpar &= 0xFC; // PLDPAR[1:0]=0
80 }

こういったポインタ変数を準備しておくと、メモリ空間への読み書きが簡単にできます。 プロフラムを実行すると、 PLD[0]PLD[1] に "0" が出力されて、二つの LED が点灯するはずです。

光れ!

プログラムを実行すると、LED3は点灯しますが、LED2は何回か点滅したあと、消えてしまいます。 どうやら、オペレーティング・システムが何らかの操作をしているようです。 確認するために、プログラムを以下のように変更して、初期状態の SilentCPLDPAR レジスタの内容を表示させました。

10 main(){
20   char *portld = 0x40100015; // PORTLD
30   char *ddrld  = 0x4010002D; // DDRLD
40   char *pldpar = 0x40100075; // PLDPAR
50   PrHex(*pldpar);
60   PrStr("\r\n");
70   *portld &= 0xFC; // PORTLD[1:0]=0
80   *ddrld  |= 0x03; // DDRLD[1:0]=1
90   *pldpar &= 0xFC; // PLDPAR[1:0]=0
100 }

すると、 telnet 画面には "00000002"と表示されました。 つまり、 LNKLED (LED3) は、 ETHER ポートの状態を自動的に示しているのに対して、 ACTLED (LED2) は、汎用出力として使用されており、オペレーティング・システムで操作しているようです。

ピカピカ・プログラム

それでは、いよいよLEDをピカピカさせます。 ピカピカの周期は、明らかに点滅として認識できる2Hzとします。 そのため、点灯と消灯のそれぞれの時間を250m秒に設定します。 時間待ちには、 SilentCSleep(int time) 関数を使い、 telnet 画面から q を打つと停止するようにします。

10 main(){
20   char *portld = 0x40100015; // PORTLD
30   char *ddrld  = 0x4010002D; // DDRLD
40   char *pldpar = 0x40100075; // PLDPAR
50   *portld &= 0xFE; // PORTLD[0]=0
60   *portld |= 0x02; // PORTLD[1]=1
70   *ddrld  |= 0x03; // DDRLD[1:0]=1
80   *pldpar &= 0xFC; // PLDPAR[1:0]=0
90   #stop 0
100   for(;;) {
110     if(Getc(0)=='q')break;
120     Sleep(25); // wait for 250msec
130     *portld ^= 0x03; // toggle LED
140   }
150 }

「#stop 0」という記述は、何だか良くわからないのですが、 Getc(char wait) 関数で待ち時間を 0 にしたときに必要だと本誌に書いてありました。

実行すると、点滅が始まります。 プログラムは、ポート出力を反転しているだけです。 そのため、 telnet 画面から q 以外のキーを打つと、 ACTLED の状態が変化して、タイミングによって「同時点滅」になったり「かわりべんたん点滅」になったりします。

参考文献

MCF52233 付録基板は、これについてきます。

Interface (インターフェース) 2008年 09月号 [雑誌]

Interface (インターフェース) 2008年 09月号 [雑誌]

  • 作者:
  • 出版社/メーカー: CQ出版
  • 発売日: 2008/07/25
  • メディア: 雑誌

DC電源分配器 [ColdFire V2]このエントリーを含むはてなブックマーク#

1987606

複数のMCF52233付録基板に電源を供給するための分配器を作成しました。 この構成で、6枚の付録基板に電源を供給できます。


1987608

入力一本を三つの出力に分岐させています。 二つの基板は、同一構成なので、分離させて離れた場所で使用することもできます。


めざせ、グリッド・コンピューティング。

参考文献

MCF52233付録基板は、この雑誌についてきます。

Interface (インターフェース) 2008年 09月号 [雑誌]

Interface (インターフェース) 2008年 09月号 [雑誌]

  • 作者:
  • 出版社/メーカー: CQ出版
  • 発売日: 2008/07/25
  • メディア: 雑誌

参考サイト

超Low-EndマイコンRS08を使おう - MC9RS08KA2で作るイルミネーション (1)
DCコネクタをユニバーサル基板に取り付ける方法は、この記事に書いてあります。

MCF52233 - 内蔵Flashメモリの構成を確認した [ColdFire V2]このエントリーを含むはてなブックマーク#

MCF52233に内蔵されている256kByteのFlash-EEPROMの構成を確認しました。

リファレンス・マニュアルには、書いてない

MCF52235RM リファレンス・マニュアルには、全面消去のための単位としてのBLOCK、保護をするための単位としてのSECTOR、そして部分消去のための単位としてPAGEという言葉が出てきます。 このうち、 BLOCK と SECTOR のサイズは、リファレンス・マニュアルに出てきますが、どこを探しても PAGE が何バイトに相当するかという情報が出てきません。 googleさんに聞いても出てこないので、毎度おなじみ Service Request に質問しました。

ごめん、見つけられなかった

時差の関係で、あっという間に返答が返ってきました。

MCF52235のリファレンス・マニュアルやらデータ・シートやら探したけど、論理ページ・サイズに関する記述は見つけられんかった。 すまん。 こんな内容をマニュアルに入れてもらうようにドキュメント・チームに知らせとくわ。

内蔵Flashの記述

  • 物理ブロック

    128kByteの物理ブロックが二つあります。 物理ブロックは16-bitバス幅で、128バイト×1024行の構成になっています。

  • 論理ブロック

    256kByteの論理ブロックが一つあります。 これは、普通は単にブロックとよばれ、MASS-ERASEの単位です。

  • セクタ

    論理ブロックの部分です。 8kByteのセクタが32個あります。 論理セクタとも呼ばれます。

  • 論理ページ

    それぞれのページは、2kByteです。

これが、お役にたてばいいんですけど。

真相がわかったのは、うれしいけど、プログラムを書く皆さんは、ページ・サイズがわからなくても困らなかったのかなあ。

参考文献

Interface (インターフェース) 2008年 09月号 [雑誌]

Interface (インターフェース) 2008年 09月号 [雑誌]

  • 作者:
  • 出版社/メーカー: CQ出版
  • 発売日: 2008/07/25
  • メディア: 雑誌

UDP電圧計Java版 [ColdFire V2]このエントリーを含むはてなブックマーク#

WS000163.png

MCF52233付録基板で作る、UDP電圧計というアプリケーションプログラムが紹介されていました。 C# 版の電圧計プログラムは、性に合わないので、Javaに移植してみようと思いたちました。 ところが、ちょっと Java から離れていた間に、記憶が薄れるやら、 Java そのものが変貌しているやら、結構、難航してしまいました。 とりあえず、今夜のところは、これでご勘弁を。


package org.noritan.udpmeter;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.HeadlessException;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class UdpMeter extends JFrame {
	int adValue = 0;
	JLabel meterLabel = new JLabel("XXXX");
	JPanel meterPanel = new JPanel() {
		@Override
		public void paint(Graphics g) {
			super.paint(g);
			int w = getWidth();
			int h = getHeight();
			g.setColor(Color.BLACK);
			g.drawRect(1, 1, w - 2, h - 2);
			g.setColor(Color.RED);
			g.drawLine(
			    w / 2, h * 3 / 4,
			    (adValue - 2048) * w / 5000 + w / 2, h / 4);
		}
	};

	public UdpMeter() throws HeadlessException {
		super();
		Container contentPane = this.getContentPane();
		meterLabel.setHorizontalAlignment(JLabel.CENTER);
		contentPane.add(meterLabel, BorderLayout.NORTH);
		contentPane.add(meterPanel, BorderLayout.CENTER);
		new Thread(new Receiver()).start();
	}
	
	public class Receiver implements Runnable {
		byte[] buf = new byte[128];

		@Override
		public void run() {
			// TODO Auto-generated method stub
			try {
				DatagramSocket socket = new DatagramSocket(30049);
				DatagramPacket packet = new DatagramPacket(buf, buf.length);
				try {
					for (;;) {
						socket.receive(packet);
						adValue = Integer.parseInt(new String(packet.getData(), 0, packet.getLength()));
						meterLabel.setText(String.valueOf(adValue));
						meterPanel.repaint();
					}
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} finally {
					socket.close();
				}
			} catch (SocketException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		UdpMeter frame = new UdpMeter();
		frame.setBounds(10,10,400,300);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}
}

そうそう、 eclipse も、いつの間にやら GANYMEDE とかいうものになっていました。 私のお気に入りだった、 Visual Editor も、開発が止まっているみたいで。 まさに、浦島太郎状態です。

参考文献

Interface (インターフェース) 2008年 09月号 [雑誌]

Interface (インターフェース) 2008年 09月号 [雑誌]

  • 作者:
  • 出版社/メーカー: CQ出版
  • 発売日: 2008/07/25
  • メディア: 雑誌

第二回 ColdFireアプリケーション・コンテスト [ColdFire V2]このエントリーを含むはてなブックマーク#

CQ出版 Interface誌9月号(7/25発売)の付録として添付された、イーサネット・マイコン基板を使ったアプリケーション・コンテストを開催します。

今度は、FTFデザイン・チャレンジと違って日本ローカルなコンテストだから、厳しい参加条件は付かないと思うのだが。

まずは、これを入手しないと、参加できないのですね。

Interface (インターフェース) 2008年 09月号 [雑誌]

Interface (インターフェース) 2008年 09月号 [雑誌]

  • 作者:
  • 出版社/メーカー: CQ出版
  • 発売日: 2008/07/25
  • メディア: 雑誌

MCF52233付録基板を迎える - コネクタを実装してみた [ColdFire V2]このエントリーを含むはてなブックマーク#

08-07-22_18-57.jpg

RJ-45コネクタとDCコネクタがそろったので、早速、実装してみました。 さすがに、どちらのコネクタもぴったりです。 それにしても、基板に比べてRJ-45コネクタがでっかいなあ。 重さで基板がひわっています。

画面上に影や謎の黒い物体が写っているのは、携帯電話内部のCCDやレンズに付着したゴミですので、お気になさらぬよう。


08-07-22_18-58.jpg

裏側から見るとこんな感じ。 当初の予想通り、RJ-45コネクタのLED端子は基板からはみ出してしまうようです。 この様子なら、切る必要もないね。 残しておいて、別の用途に使ってしまおう。

参考文献

付録基板は、これに付属します。

Interface (インターフェース) 2008年 09月号 [雑誌]

Interface (インターフェース) 2008年 09月号 [雑誌]

  • 作者:
  • 出版社/メーカー: CQ出版
  • 発売日: 2008/07/25
  • メディア: 雑誌

MCF52233付録基板を迎える - コネクタ入手 [ColdFire V2]このエントリーを含むはてなブックマーク#

08-07-22_12-27~00.jpg

Digi-Keyからコネクタを購入しました。

本来の指定品番である SI-60002-Fは、 品切れのまま、当分入荷しそうにないので、代替品として 秘密(の)研究所で紹介された SI-60001-Fを 購入しました。

金属光沢が美しいのだけど、まさか、サビたりしないよね。

参考文献

付録基板は、これに付属します。

Interface (インターフェース) 2008年 09月号 [雑誌]

Interface (インターフェース) 2008年 09月号 [雑誌]

  • 作者:
  • 出版社/メーカー: CQ出版
  • 発売日: 2008/07/25
  • メディア: 雑誌

MCF52233 - LED端子をGPIOとして使いたい [ColdFire V2]このエントリーを含むはてなブックマーク#

MCF52233には、EPHYが搭載されていて、通信の様子を外部に知らせるために最大7個のLEDを装備できます。 EPHYCTL0というレジスタにLEDENというビットがあって、Disable/Enableできるらしいのだけど、二つだけ使いたい場合には、どうしたらいいんだろう。

この記事は、ここでの問題提起に基づいています。

Service Requestにお願い

マニュアルを読んでもわからないし、手軽に確認できるハードウェアもないので、freescale.comService Requestに質問しました。

MC52233のEPHYインターフェイスを使って、ACTLEDとLNKLEDの二つのLEDを付けようと思っています。 その結果、COLLED, DUPLED, そして SPDLED の三つの端子は使われません。 そこで、これら三つの端子をGPIOとして使おうと思います。

LED出力機能を有効・無効にするらしい EPHYCTL0 レジスタの設定ビット LEDEN を見つけました。 でも、この設定ビットは私の使用目的には合わないように思います。

  1. これらのLED出力機能を個別に有効にするような設定ビットが他にあるのでしょうか。
  2. もし、そういった個別設定ビットがあるとしたら、 LEDEN ビットはそれよりも優先順位が高いのでしょうか。

Service Requestからの返答

22時間後、返答がありました。

Yes (何に対する Yes なのかは不明。)、まず第一に、LED が光るようにしたいのであれば、もちろん、 EPHYCTL0[LEDEN] ビットはセットしなくてはなりません。

さらに、Ethernet コントローラの PHY 信号 (ACTLED, COLLED, DUPLED, LNKLED, SPDLED, RXLED そして TXLED) は、ポート LD 端子で GPIO 機能と多重化されています。 詳しい情報は、 MCF52235RM リファレンス・マニュアルを見てください。

PLDPAR (ポート LD 端子割り当てレジスタ)を設定して、端子を第一機能(primary function : この場合 LED 出力機能)か GPIO 機能に割り当てる必要があります。 リセット後のデフォルトでは、 PLDPAR で第一機能が設定されなければ、 GPIO 機能が有効になるでしょう。

もうひとつ、注意すべき点があります。 最初のシリコン(rev 0 silicon)では、 ACT/RX/TX の各 LED 出力機能に問題があります。 シリコンのバージョンを CIR[PRN] レジスタで確認してください。 それ以降のバージョンでは問題はありません。

というわけで、 LEDEN ビットをセットしないと LED 出力機能は働かないし、 PLDPAR レジスタで個別に GPIO 機能と第一機能を切り替えないと LED は光らないということらしいです。 あとは、試してみるしかないか。

日本語訳に疲れました。

これで、試してみよう

Interface (インターフェース) 2008年 09月号 [雑誌]

Interface (インターフェース) 2008年 09月号 [雑誌]

  • 作者:
  • 出版社/メーカー: CQ出版
  • 発売日: 2008/07/25
  • メディア: 雑誌

- | 次の20件 ColdFire V2 ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。