blob: 61719e0493c460038e39b63776b7896a2c4e732c [file] [log] [blame]
#include <Arduino.h>
#include <SPI.h>
#include "gonk/pin_config.h"
#define PW_LOG_LEVEL PW_LOG_LEVEL_DEBUG
#define PW_LOG_MODULE_NAME "PinConfig"
#include "pw_log/log.h"
namespace gonk::pin_config {
PinConfig::PinConfig() {}
void PinConfig::Init() {
// Set STATUS LED mode and initial state.
pinMode(StatusLed, OUTPUT);
digitalWrite(StatusLed, LOW);
// Default CS pin to output high.
pinMode(FlashCS, OUTPUT);
digitalWrite(FlashCS, HIGH);
}
void PinConfig::InitFpgaPins() {
// Set FPGA reset pin mode and initial state.
pinMode(ICE40ResetN, OUTPUT);
digitalWrite(ICE40ResetN, HIGH);
// Set FPGA configure done signal pin as an input.
pinMode(ICE40Done, INPUT);
}
void PinConfig::FpgaHalt() {
// Set FlashCS to signal the FPGA it should load the bitstream from external
// flash.
pinMode(FlashCS, INPUT_FLOATING);
// Hold in reset for a small amount of time.
digitalWrite(ICE40ResetN, LOW);
delay(50);
// Boot fpga and give it time to reset any internal SPI pin configuration.
digitalWrite(ICE40ResetN, HIGH);
delay(10);
// Finally, hold in reset.
digitalWrite(ICE40ResetN, LOW);
}
void PinConfig::FpgaEnable() { digitalWrite(ICE40ResetN, HIGH); }
void PinConfig::SPIEnable() {
// SPI pin definitions
SPI.setMISO(FlashMISO);
SPI.setMOSI(FlashMOSI);
SPI.setSCLK(FlashCLK);
SPI.begin();
// Set FlashCS as output with initial state.
pinMode(FlashCS, OUTPUT);
digitalWrite(FlashCS, HIGH);
}
} // namespace gonk::pin_config