2009-07-19 3 views
1

私は、同様のポストがある知っていた: Steps to make a LED blink from a C/C++ program?シリアルポートを使用してCプログラムからLEDをオンまたはオフにする手順は?

しかし、今私は、ARMベースの開発ボードに取り組んでいます、そして私がオンまたはオフにLEDを作るためにそれを使用することができます2つのシリアルポートを持っているようです。

基本的に私はフローが1つのピンをシリアル "1"またはオンにし、LEDがオンになり、 "0"でオフにすると考えます。

C言語で参照できるコードはありますか?

+0

あなたはこれに運がありましたか?これを確認するためにログオンしましたか? – NoMoreZealots

答えて

2

これは、使用している特定のアームベースの開発ボードの仕様に大きく依存することになります。

そのボード固有のドキュメントが必要です。

4

一般に、ボードには、内蔵I/Oを制御できるボードサポートパッケージ(BSP)が付属しています。ハードウェアフロー制御信号を実際に使用する場合は、シリアルライブラリを探します。

ボード上のGPIO(汎用I/O、またはデジタルI/O)を探してみることをお勧めします。これは通常、入力または出力として設定することができます。デジタルI/Oラインとグランド・ピンの間に電流制限抵抗を介してLEDを接続することができます。 LEDを逆向きに接続すると、LEDが正しく向きが変わっていることを確認してください。また、接続する前に常にデジタル電圧メーターで確認してください。

デジタルI/O用のBSPを持っていなくても、設定は通常とても簡単です。 ビットを有効にするにはレジスタにビットを設定し、別のレジスタにビットを設定して入力または出力を選択すると、通常は8ビットの「ポート」に配置されます。いくつかのシステムでは、個々のI/Oピンを設定することができ、他のシステムでは入力または出力用にポート全体を設定することしかできません。次に、書き込み/出力レジスタで制御したいビットに1または0を書き込みます。

ARMチップでは、通常、内蔵されている周辺機器がかなり多いため、ほとんどのボードはI/Oをボード上の物理コネクタに接続するだけで、チップベンダーのドキュメントを読んで、地図。より良いボードベンダーは、ドキュメンテーション、図書館(BSP)および例を提供します。 Luminary MicroはイーサネットMACとPHYを内蔵したチップを供給するだけで、コネクタとMagneticsを追加するだけで、1チップのWebサーバーを手に入れることができます。

0

以前はこの種のプログラミングをしていましたが、

あなたは出力に-5V、それが持っている+ 5V、シリアルポート接続 http://www.lammertbies.nl/comm/cable/RS-232.html http://www.beyondlogic.org/serial/serial.htm

を勉強する必要がある、私は今、はっきりと覚えていないことができます。すべてのピンが必要なわけではありません。

以前はARMを使用していませんが、私は8ビットのPICコントローラを使用してプログラミングしています。私はあなたがオンラインでたくさんの例を見つけることができると思います。

0

GPIOを制御するための好ましい代替案は、BSP経由です。このBSP(ボードサポートパッケージ)は、すべての周辺機器を適切なデフォルトに設定し、機能を呼び出すことを可能にするため、すべての作業を行います。可能であれば、選択したBSPには8ビットのGPIOポートにバイトを書き込む機能があります。あなたのLEDは1ビットしか持っていません。この場合、Cコードは次のようになります(少なくともLuminary Microキットではこのように動作します)。(サンプルコード;特にあなたのキットでコンパイルするためには少し余分な作業が必要です)。

/* each LED is addressed by an address (byte) and a bit-within-this-byte */ 
struct { 
    address, // address of IO register for LED port 
    bit  // bit of LED 
} LEDConfigPair; 

struct LEDConfigPair LEDConfig[NUMBER_OF_LEDS] = { 
    {GPIO_PORTB_BASE,0}, // LED_0 is at port B0 
    {GPIO_PORTB_BASE,1}  // LED_1 is at port B1 
} ; 



/* function LED_init configures the GPIOs where LEDs are connected as output */ 
led_init(void) 
{ 
    U32 i; 
    for(i=0;i<NUMBER_OF_LEDS;i++) 
    { 
     GPIODirModeSet(LEDConfig[i][0], LEDConfig[i][1], GPIO_DIR_MODE_OUT); 
    } 
} 


/* my LED function 
    set_led_state makes use of the BSP of Luminary Micro to access a GPIO function 

    Implementation: this BSP requires setting 8 port wide IO, so the function will calculate a mask (

*/ 
set_led_state(U8 led,bool state) 
{ 
    U8 andmask; 
    U8 setmask; 

    andmask = ~(1 << LEDConfig[led].bit);// a bitmask with all 1's except bit of LED 

    if (true == state) 
    { 
     setmask = (1 << LEDConfig[led].bit); // set bit for LED 
    } else 
    { 
     setmask = 0; 
    } 
    GPIOPinWrite(LEDConfig[led].address, andmask, setmask); 
} 

もちろん、これはすべて綴られています。それは、このような単一の行で行うことができます

#DEFINE SETLEDSTATE(led,state) GPIOPinWrite(LEDConfig[led].address, ~(1<<LEDConfig[led].bit),(state<<LEDConfig[led].bit)) 

これは同じことを行うが、あなたはビットマスクを夢を見ることができる場合にのみ意味がある、とあなたが唯一の本当のプログラムをデバッグするために、いくつかのLEDを切り替えることになるでしょう。..

代替手段:ベアメタル。 この場合、すべてを自分で設定する必要があります。組み込みシステムの場合、あなたは(メモリコントローラとCPUクロックがすでに設定されていると仮定し!)ピン多重化および電源管理を意識する必要が

  • 初期化:設定した端子の多重化機能は、あなたがしたいような方法で、コントロールは実際にパッケージにマップされます。 (この場合、UART、または同じピンのGPIO機能のいずれか)pheripheralの
  • 初期
0

あなたはシリアルポートの受信または送信ピンを使用してそれを行うことはできません。そのためには、シリアルポートのRTSピンまたはCTSピンを制御するだけです。 「VC++コードでCOMポートにアクセス」をgoogleしてから、RTSとCTSステータスピンを制御して外部デバイスをオンまたはオフにします。

関連する問題