2013/11/24からのアクセス回数 4533
LM4F120Fには、3個のSSI*1モジュールが搭載されており、それぞれssi0~ssi2となっています。
今回は、Dポートに接続されているssi1を使ってArduinoのSPIスレーブと通信して、動作を確認しました。
SSI関連のAPIについては、
[[同期シリアル・インターフェイス>http://ja.processors.wiki.ti.com/index.php/%E5%90%8C%E6%9C%9F%E3%82%B7%E3%83%AA%E3%82%A2%E3%83%AB%E3%83%BB%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%95%E3%82%A7%E3%82%A4%E3%82%B9(SSI)-StellarisWare_PDLUG(Japanese)#SSIConfigSetExpClk
に日本語の説明がでていますので、参考にしてください。
LaunchPadのピンは、以下の様になっています。
Arduinoのピンは、以下のピンを使用します。
AdruinoとLaunchPadの結線は、以下の様になっています。
Arduino側のスレーブモジュールには、arduino_spi_slave.pdeのスケッチを使用しました。 詳しくは、raspberrypi/SPIを試すを参照してください。
テストプログラムは、Hello Worldの後に改行を加えた文字列をArduinoに送ります。
SPITutorial.cppは、以下の様にしました。
#include "inc/hw_types.h"
#include "inc/hw_memmap.h"
#include "driverlib/sysctl.h"
#include "driverlib/gpio.h"
#include "driverlib/ssi.h"
#include "driverlib/pin_map.h"
int main(void) {
char *pcChars = "Hello World\n";
long lIdx;
// The SSI1 peripheral and port D must be enabled for use.
SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI1);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
// Configure the pin muxing for SSI1 functions on port D.
GPIOPinConfigure(GPIO_PD0_SSI1CLK);
GPIOPinConfigure(GPIO_PD2_SSI1RX);
GPIOPinConfigure(GPIO_PD3_SSI1TX);
GPIOPinTypeGPIOOutput(GPIO_PORTD_BASE, GPIO_PIN_1);
GPIOPinTypeSSI(GPIO_PORTD_BASE, GPIO_PIN_0 | GPIO_PIN_2 | GPIO_PIN_3);
// SSI を設定します。
SSIClockSourceSet(SSI1_BASE, SSI_CLOCK_SYSTEM);
SSIConfigSetExpClk(SSI1_BASE, SysCtlClockGet(), SSI_FRF_MOTO_MODE_0,
SSI_MODE_MASTER, 500000, 8);
// SSI モジュールをイネーブルします。
SSIEnable(SSI1_BASE);
// データを送信します。
lIdx = 0;
while (pcChars[lIdx]) {
SSIDataPut(SSI1_BASE, pcChars[lIdx++]);
while (SSIBusy(SSI1_BASE))
continue;
}
}
LauchPadのプログラムを動かす前に、ArduionoのIDEメニューで「ツール」→「シリアルモニター」を選択し、ボーレートを115200 bpsにセットします。
それからLauchPadのプログラムを起動します。
Arduinoのシリアルモニターに以下の様にHello Worldが出れば完成です。
皆様のご意見、ご希望をお待ちしております。