GUI Maker for Avalon Bus - FPGA SPI Bridge Panel
このGUI Maker for Avalon Bus - FPGA SPI Bridge Panelについて
インテルFPGAのAvalonバスをNios II無しで操作するGUIを作成できます。
このアプリケーションの目的は?
インテル(旧アルテラ社)のFPGAのAvalonバスを操作するGUIを短時間で作成できます。Nios II CPU無しでAndroidからFPGAを操作できます。
ボタン、タイマー、グラフ等を配置し、処理をPythonで記述することができます。
同様に、3Dオブジェクトの配置、処理をPythonで記述して、簡単なゲームを作ることができます。
ESP8266、ESP32に書き込むべきプログラムは?
Arduinoスケッチ http://rapidnack.com/?p=860
操作説明ー画面 http://rapidnack.com/?p=918
SPI Bridge Scope http://rapidnack.com/?p=1831
上記Arduinoスケッチを、ESPに書き込んでください。
下記のメソッドを使ってFPGA内のAvalonバスをアクセスできます。
byte[] WriteBytePacket(UInt32 addr, byte data, int timeoutInSec = 3)
byte[] WriteUInt16Packet(UInt32 addr, UInt16 data, int timeoutInSec = 3)
byte[] WriteUInt32Packet(UInt32 addr, UInt32 data, int timeoutInSec = 3)
byte[] WriteBytePacket(UInt32 addr, byte[] dataBytes, bool isIncremental = false, int timeoutInSec = 3)
byte[] WriteUInt16Packet(UInt32 addr, UInt16[] dataArray, bool isIncremental = false, int timeoutInSec = 3)
byte[] WriteUInt32Packet(UInt32 addr, UInt32[] dataArray, bool isIncremental = false, int timeoutInSec = 3)
byte ReadBytePacket(UInt32 addr, int timeoutInSec = 3)
UInt16 ReadUInt16Packet(UInt32 addr, int timeoutInSec = 3)
UInt32 ReadUInt32Packet(UInt32 addr, int timeoutInSec = 3)
byte[] ReadBytePacket(UInt16 size, UInt32 addr, bool isIncremental = false, int timeoutInSec = 3)
UInt16[] ReadUInt16Packet(UInt16 size, UInt32 addr, bool isIncremental = false, int timeoutInSec = 3)
UInt32[] ReadUInt32Packet(UInt16 size, UInt32 addr, bool isIncremental = false, int timeoutInSec = 3)
以下は、ESP32用のスケッチです。
----------------------------------- ここから -----------------------------------
#include <SPI.h>
#include <WiFi.h>
const char* ssid = "your-ssid";
const char* password = "your-password";
WiFiServer server(2002);
WiFiClient client;
#define SPI_BUF_LEN 1024
byte spiBuf[SPI_BUF_LEN];
byte spiReadBuf[SPI_BUF_LEN];
void setup() {
Serial.begin(57600);
SPI.begin();
SPI.setFrequency(24000000);
SPI.setDataMode(SPI_MODE1);
SPI.setBitOrder(MSBFIRST);
pinMode(SS, OUTPUT);
digitalWrite(SS, HIGH);
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
//WiFi.mode(WIFI_STA); // Disable Access Point
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
server.begin();
Serial.println("Server started");
}
void loop() {
if (!client.connected()) {
// try to connect to a new client
client = server.available();
} else {
// read data from the connected client
int n = client.available();
if (n > 0) {
//Serial.print("available: ");
//Serial.println(n);
if (n > SPI_BUF_LEN) {
n = SPI_BUF_LEN;
}
// transfer data to/from SPI
client.readBytes(spiBuf, n);
digitalWrite(SS, LOW);
SPI.transferBytes(spiBuf, spiReadBuf, n);
digitalWrite(SS, HIGH);
// return data to client
client.write(spiReadBuf, n);
}
}
}
----------------------------------- ここまで -----------------------------------