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の
- 初期
あなたはこれに運がありましたか?これを確認するためにログオンしましたか? – NoMoreZealots