Bugfixes and improvements for new hardware
This commit is contained in:
parent
7d9d5e27eb
commit
4cbd60e62d
1
FPGA/.gitignore
vendored
1
FPGA/.gitignore
vendored
@ -7,4 +7,5 @@
|
|||||||
*/ipcore_dir
|
*/ipcore_dir
|
||||||
!*.gise
|
!*.gise
|
||||||
!*.xise
|
!*.xise
|
||||||
|
!*.py
|
||||||
|
|
||||||
|
@ -223,7 +223,7 @@
|
|||||||
<status xil_pn:value="SuccessfullyRun"/>
|
<status xil_pn:value="SuccessfullyRun"/>
|
||||||
<status xil_pn:value="ReadyToRun"/>
|
<status xil_pn:value="ReadyToRun"/>
|
||||||
</transform>
|
</transform>
|
||||||
<transform xil_pn:end_ts="1600073684" xil_pn:in_ck="-94812602667091528" xil_pn:name="TRANEXT_xstsynthesize_spartan6" xil_pn:prop_ck="3256065936432453276" xil_pn:start_ts="1600073666">
|
<transform xil_pn:end_ts="1600104613" xil_pn:in_ck="-94812602667091528" xil_pn:name="TRANEXT_xstsynthesize_spartan6" xil_pn:prop_ck="3256065936432453276" xil_pn:start_ts="1600104595">
|
||||||
<status xil_pn:value="SuccessfullyRun"/>
|
<status xil_pn:value="SuccessfullyRun"/>
|
||||||
<status xil_pn:value="WarningsGenerated"/>
|
<status xil_pn:value="WarningsGenerated"/>
|
||||||
<status xil_pn:value="ReadyToRun"/>
|
<status xil_pn:value="ReadyToRun"/>
|
||||||
@ -241,11 +241,11 @@
|
|||||||
<outfile xil_pn:name="webtalk_pn.xml"/>
|
<outfile xil_pn:name="webtalk_pn.xml"/>
|
||||||
<outfile xil_pn:name="xst"/>
|
<outfile xil_pn:name="xst"/>
|
||||||
</transform>
|
</transform>
|
||||||
<transform xil_pn:end_ts="1598796368" xil_pn:in_ck="934418963425178690" xil_pn:name="TRAN_compileBCD2" xil_pn:prop_ck="6693835875156060939" xil_pn:start_ts="1598796368">
|
<transform xil_pn:end_ts="1600116406" xil_pn:in_ck="934418963425178690" xil_pn:name="TRAN_compileBCD2" xil_pn:prop_ck="6693835875156060939" xil_pn:start_ts="1600116406">
|
||||||
<status xil_pn:value="SuccessfullyRun"/>
|
<status xil_pn:value="SuccessfullyRun"/>
|
||||||
<status xil_pn:value="ReadyToRun"/>
|
<status xil_pn:value="ReadyToRun"/>
|
||||||
</transform>
|
</transform>
|
||||||
<transform xil_pn:end_ts="1600073692" xil_pn:in_ck="490340488621696080" xil_pn:name="TRANEXT_ngdbuild_FPGA" xil_pn:prop_ck="4604875190571501774" xil_pn:start_ts="1600073686">
|
<transform xil_pn:end_ts="1600116413" xil_pn:in_ck="490340488621696080" xil_pn:name="TRANEXT_ngdbuild_FPGA" xil_pn:prop_ck="4604875190571501774" xil_pn:start_ts="1600116406">
|
||||||
<status xil_pn:value="SuccessfullyRun"/>
|
<status xil_pn:value="SuccessfullyRun"/>
|
||||||
<status xil_pn:value="ReadyToRun"/>
|
<status xil_pn:value="ReadyToRun"/>
|
||||||
<outfile xil_pn:name="_ngo"/>
|
<outfile xil_pn:name="_ngo"/>
|
||||||
@ -254,7 +254,7 @@
|
|||||||
<outfile xil_pn:name="top.ngd"/>
|
<outfile xil_pn:name="top.ngd"/>
|
||||||
<outfile xil_pn:name="top_ngdbuild.xrpt"/>
|
<outfile xil_pn:name="top_ngdbuild.xrpt"/>
|
||||||
</transform>
|
</transform>
|
||||||
<transform xil_pn:end_ts="1600073728" xil_pn:in_ck="8512332261572065657" xil_pn:name="TRANEXT_map_spartan6" xil_pn:prop_ck="1448924893915930207" xil_pn:start_ts="1600073692">
|
<transform xil_pn:end_ts="1600116446" xil_pn:in_ck="8512332261572065657" xil_pn:name="TRANEXT_map_spartan6" xil_pn:prop_ck="1448924893915930207" xil_pn:start_ts="1600116413">
|
||||||
<status xil_pn:value="SuccessfullyRun"/>
|
<status xil_pn:value="SuccessfullyRun"/>
|
||||||
<status xil_pn:value="WarningsGenerated"/>
|
<status xil_pn:value="WarningsGenerated"/>
|
||||||
<status xil_pn:value="ReadyToRun"/>
|
<status xil_pn:value="ReadyToRun"/>
|
||||||
@ -270,7 +270,7 @@
|
|||||||
<outfile xil_pn:name="top_summary.xml"/>
|
<outfile xil_pn:name="top_summary.xml"/>
|
||||||
<outfile xil_pn:name="top_usage.xml"/>
|
<outfile xil_pn:name="top_usage.xml"/>
|
||||||
</transform>
|
</transform>
|
||||||
<transform xil_pn:end_ts="1600073755" xil_pn:in_ck="1117507038335044978" xil_pn:name="TRANEXT_par_spartan6" xil_pn:prop_ck="93661965788626211" xil_pn:start_ts="1600073728">
|
<transform xil_pn:end_ts="1600116473" xil_pn:in_ck="1117507038335044978" xil_pn:name="TRANEXT_par_spartan6" xil_pn:prop_ck="93661965788626211" xil_pn:start_ts="1600116446">
|
||||||
<status xil_pn:value="SuccessfullyRun"/>
|
<status xil_pn:value="SuccessfullyRun"/>
|
||||||
<status xil_pn:value="ReadyToRun"/>
|
<status xil_pn:value="ReadyToRun"/>
|
||||||
<outfile xil_pn:name="_xmsgs/par.xmsgs"/>
|
<outfile xil_pn:name="_xmsgs/par.xmsgs"/>
|
||||||
@ -284,7 +284,7 @@
|
|||||||
<outfile xil_pn:name="top_pad.txt"/>
|
<outfile xil_pn:name="top_pad.txt"/>
|
||||||
<outfile xil_pn:name="top_par.xrpt"/>
|
<outfile xil_pn:name="top_par.xrpt"/>
|
||||||
</transform>
|
</transform>
|
||||||
<transform xil_pn:end_ts="1600073768" xil_pn:in_ck="154288912438" xil_pn:name="TRANEXT_bitFile_spartan6" xil_pn:prop_ck="4970201210546912173" xil_pn:start_ts="1600073755">
|
<transform xil_pn:end_ts="1600116486" xil_pn:in_ck="154288912438" xil_pn:name="TRANEXT_bitFile_spartan6" xil_pn:prop_ck="3274353840855015246" xil_pn:start_ts="1600116473">
|
||||||
<status xil_pn:value="SuccessfullyRun"/>
|
<status xil_pn:value="SuccessfullyRun"/>
|
||||||
<status xil_pn:value="WarningsGenerated"/>
|
<status xil_pn:value="WarningsGenerated"/>
|
||||||
<status xil_pn:value="ReadyToRun"/>
|
<status xil_pn:value="ReadyToRun"/>
|
||||||
@ -330,7 +330,7 @@
|
|||||||
<status xil_pn:value="OutputChanged"/>
|
<status xil_pn:value="OutputChanged"/>
|
||||||
<status xil_pn:value="OutputRemoved"/>
|
<status xil_pn:value="OutputRemoved"/>
|
||||||
</transform>
|
</transform>
|
||||||
<transform xil_pn:end_ts="1600073755" xil_pn:in_ck="8512326635937592693" xil_pn:name="TRAN_postRouteTrce" xil_pn:prop_ck="445577401284416184" xil_pn:start_ts="1600073748">
|
<transform xil_pn:end_ts="1600116473" xil_pn:in_ck="8512326635937592693" xil_pn:name="TRAN_postRouteTrce" xil_pn:prop_ck="445577401284416184" xil_pn:start_ts="1600116466">
|
||||||
<status xil_pn:value="SuccessfullyRun"/>
|
<status xil_pn:value="SuccessfullyRun"/>
|
||||||
<status xil_pn:value="ReadyToRun"/>
|
<status xil_pn:value="ReadyToRun"/>
|
||||||
<outfile xil_pn:name="_xmsgs/trce.xmsgs"/>
|
<outfile xil_pn:name="_xmsgs/trce.xmsgs"/>
|
||||||
|
@ -406,7 +406,7 @@
|
|||||||
<property xil_pn:name="Top-Level Source Type" xil_pn:value="HDL" xil_pn:valueState="default"/>
|
<property xil_pn:name="Top-Level Source Type" xil_pn:value="HDL" xil_pn:valueState="default"/>
|
||||||
<property xil_pn:name="Trim Unconnected Signals" xil_pn:value="true" xil_pn:valueState="default"/>
|
<property xil_pn:name="Trim Unconnected Signals" xil_pn:value="true" xil_pn:valueState="default"/>
|
||||||
<property xil_pn:name="Tristate On Configuration Pulse Width" xil_pn:value="0" xil_pn:valueState="default"/>
|
<property xil_pn:name="Tristate On Configuration Pulse Width" xil_pn:value="0" xil_pn:valueState="default"/>
|
||||||
<property xil_pn:name="Unused IOB Pins" xil_pn:value="Pull Down" xil_pn:valueState="default"/>
|
<property xil_pn:name="Unused IOB Pins" xil_pn:value="Float" xil_pn:valueState="non-default"/>
|
||||||
<property xil_pn:name="Use 64-bit PlanAhead on 64-bit Systems" xil_pn:value="true" xil_pn:valueState="default"/>
|
<property xil_pn:name="Use 64-bit PlanAhead on 64-bit Systems" xil_pn:value="true" xil_pn:valueState="default"/>
|
||||||
<property xil_pn:name="Use Clock Enable" xil_pn:value="Auto" xil_pn:valueState="default"/>
|
<property xil_pn:name="Use Clock Enable" xil_pn:value="Auto" xil_pn:valueState="default"/>
|
||||||
<property xil_pn:name="Use Custom Project File Behavioral" xil_pn:value="false" xil_pn:valueState="default"/>
|
<property xil_pn:name="Use Custom Project File Behavioral" xil_pn:value="false" xil_pn:valueState="default"/>
|
||||||
|
@ -68,10 +68,10 @@ NET "ATTENUATION[3]" LOC = P12;
|
|||||||
NET "ATTENUATION[2]" LOC = P14;
|
NET "ATTENUATION[2]" LOC = P14;
|
||||||
NET "ATTENUATION[1]" LOC = P15;
|
NET "ATTENUATION[1]" LOC = P15;
|
||||||
NET "ATTENUATION[0]" LOC = P16;
|
NET "ATTENUATION[0]" LOC = P16;
|
||||||
NET "LEDS[0]" LOC = P92;
|
NET "LEDS[0]" LOC = P87;
|
||||||
NET "LEDS[1]" LOC = P93;
|
NET "LEDS[1]" LOC = P92;
|
||||||
NET "LEDS[2]" LOC = P88;
|
NET "LEDS[2]" LOC = P93;
|
||||||
NET "LEDS[3]" LOC = P87;
|
NET "LEDS[3]" LOC = P88;
|
||||||
NET "LEDS[4]" LOC = P85;
|
NET "LEDS[4]" LOC = P85;
|
||||||
NET "LEDS[5]" LOC = P84;
|
NET "LEDS[5]" LOC = P84;
|
||||||
NET "LEDS[6]" LOC = P83;
|
NET "LEDS[6]" LOC = P83;
|
||||||
|
@ -365,10 +365,10 @@ begin
|
|||||||
LEDS(2) <= SOURCE_LD;
|
LEDS(2) <= SOURCE_LD;
|
||||||
LEDS(3) <= LO1_LD;
|
LEDS(3) <= LO1_LD;
|
||||||
-- Sweep and active port
|
-- Sweep and active port
|
||||||
PORT_SELECT2 <= sweep_port_select;
|
PORT_SELECT2 <= not sweep_port_select;
|
||||||
PORT2_SELECT <= sweep_port_select;
|
PORT2_SELECT <= not sweep_port_select;
|
||||||
PORT_SELECT1 <= not sweep_port_select;
|
PORT_SELECT1 <= sweep_port_select;
|
||||||
PORT1_SELECT <= not sweep_port_select;
|
PORT1_SELECT <= sweep_port_select;
|
||||||
BAND_SELECT_HIGH <= not sweep_band;
|
BAND_SELECT_HIGH <= not sweep_band;
|
||||||
BAND_SELECT_LOW <= sweep_band;
|
BAND_SELECT_LOW <= sweep_band;
|
||||||
PORT1_MIX2_EN <= port1mix_en;
|
PORT1_MIX2_EN <= port1mix_en;
|
||||||
@ -377,8 +377,8 @@ begin
|
|||||||
PORT2_MIX1_EN <= not port2mix_en;
|
PORT2_MIX1_EN <= not port2mix_en;
|
||||||
REF_MIX2_EN <= refmix_en;
|
REF_MIX2_EN <= refmix_en;
|
||||||
REF_MIX1_EN <= not refmix_en;
|
REF_MIX1_EN <= not refmix_en;
|
||||||
LEDS(4) <= not (not sweep_reset and sweep_port_select);
|
LEDS(4) <= not (not sweep_reset and not sweep_port_select);
|
||||||
LEDS(5) <= not (not sweep_reset and not sweep_port_select);
|
LEDS(5) <= not (not sweep_reset and sweep_port_select);
|
||||||
-- Uncommitted LEDs
|
-- Uncommitted LEDs
|
||||||
LEDS(7 downto 6) <= user_leds(1 downto 0);
|
LEDS(7 downto 6) <= user_leds(1 downto 0);
|
||||||
--LEDS(7) <= '0';
|
--LEDS(7) <= '0';
|
||||||
@ -608,7 +608,10 @@ begin
|
|||||||
LO1_MOSI <= MCU_MOSI when aux2_sync = '1' else fpga_LO1_MOSI;
|
LO1_MOSI <= MCU_MOSI when aux2_sync = '1' else fpga_LO1_MOSI;
|
||||||
LO1_LE <= MCU_NSS when aux2_sync = '1' else fpga_LO1_LE;
|
LO1_LE <= MCU_NSS when aux2_sync = '1' else fpga_LO1_LE;
|
||||||
-- select MISO source
|
-- select MISO source
|
||||||
MCU_MISO <= SOURCE_MUX when aux1_sync = '1' else LO1_MUX when aux2_sync = '1' else fpga_miso;
|
MCU_MISO <= SOURCE_MUX when aux1_sync = '1' else
|
||||||
|
LO1_MUX when aux2_sync = '1' else
|
||||||
|
fpga_miso when MCU_NSS = '0' else
|
||||||
|
'Z';
|
||||||
|
|
||||||
lo_unlocked <= not lo_ld_sync;
|
lo_unlocked <= not lo_ld_sync;
|
||||||
source_unlocked <= not source_ld_sync;
|
source_unlocked <= not source_ld_sync;
|
||||||
|
46
FPGA/WindowCoefficientGenerator.py
Normal file
46
FPGA/WindowCoefficientGenerator.py
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import math
|
||||||
|
|
||||||
|
# Adapt these constants to your window requirements
|
||||||
|
NUMBER_OF_COEFFICIENTS = 128
|
||||||
|
BITS_PER_COEFFICIENT = 16
|
||||||
|
|
||||||
|
# If set to true, the coefficients will be scaled to include the window amplitude correction factor.
|
||||||
|
# They will also be scaled to 1/8 to have enough headroom for the correction.
|
||||||
|
INCLUDE_AMPLITUDE_CORRECTION = True
|
||||||
|
|
||||||
|
# Don't change anything below this line
|
||||||
|
|
||||||
|
class Window:
|
||||||
|
def __init__(self, name, function, correction):
|
||||||
|
self.name = name
|
||||||
|
self.function = function
|
||||||
|
self.correction = correction
|
||||||
|
|
||||||
|
def StartFile(self):
|
||||||
|
self.file = open(self.name+".txt", "w")
|
||||||
|
|
||||||
|
def AddCoefficient(self, normalized_index):
|
||||||
|
if not hasattr(self, 'file'):
|
||||||
|
self.StartFile()
|
||||||
|
value = self.function(normalized_index)
|
||||||
|
if INCLUDE_AMPLITUDE_CORRECTION:
|
||||||
|
value = value * self.correction / 8.0
|
||||||
|
value = int(value * (2 ** (BITS_PER_COEFFICIENT-1)))
|
||||||
|
# prevent overflow
|
||||||
|
if value >= (2 ** (BITS_PER_COEFFICIENT-1)):
|
||||||
|
value = value - 1
|
||||||
|
output = "{0:b}".format(value)
|
||||||
|
self.file.write(output.zfill(BITS_PER_COEFFICIENT)+"\n")
|
||||||
|
|
||||||
|
def calc_hann(i):
|
||||||
|
return math.sin(math.pi * i) ** 2
|
||||||
|
|
||||||
|
WindowList = []
|
||||||
|
WindowList.append(Window("Hann", calc_hann, 2.0))
|
||||||
|
|
||||||
|
for i in range(NUMBER_OF_COEFFICIENTS):
|
||||||
|
norm_i = (i+0.5) / NUMBER_OF_COEFFICIENTS
|
||||||
|
for w in WindowList:
|
||||||
|
w.AddCoefficient(norm_i)
|
Binary file not shown.
@ -357,9 +357,11 @@ void Device::ReceivedData()
|
|||||||
break;
|
break;
|
||||||
case Protocol::PacketType::Ack:
|
case Protocol::PacketType::Ack:
|
||||||
emit AckReceived();
|
emit AckReceived();
|
||||||
|
// transmissionFinished(TransmissionResult::Ack);
|
||||||
break;
|
break;
|
||||||
case Protocol::PacketType::Nack:
|
case Protocol::PacketType::Nack:
|
||||||
emit NackReceived();
|
emit NackReceived();
|
||||||
|
// transmissionFinished(TransmissionResult::Nack);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
@ -389,7 +391,7 @@ QString Device::serial() const
|
|||||||
|
|
||||||
void Device::startNextTransmission()
|
void Device::startNextTransmission()
|
||||||
{
|
{
|
||||||
if(transmissionQueue.empty() || !m_connected) {
|
if(transmissionQueue.isEmpty() || !m_connected) {
|
||||||
// nothing more to transmit
|
// nothing more to transmit
|
||||||
transmissionActive = false;
|
transmissionActive = false;
|
||||||
return;
|
return;
|
||||||
@ -416,9 +418,13 @@ void Device::transmissionFinished(TransmissionResult result)
|
|||||||
{
|
{
|
||||||
transmissionTimer.stop();
|
transmissionTimer.stop();
|
||||||
// remove transmitted packet
|
// remove transmitted packet
|
||||||
|
if(!transmissionQueue.isEmpty()) {
|
||||||
auto t = transmissionQueue.dequeue();
|
auto t = transmissionQueue.dequeue();
|
||||||
if(t.callback) {
|
if(t.callback) {
|
||||||
t.callback(result);
|
t.callback(result);
|
||||||
}
|
}
|
||||||
startNextTransmission();
|
startNextTransmission();
|
||||||
|
} else {
|
||||||
|
transmissionActive = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -57,6 +57,7 @@ void FirmwareUpdateDialog::on_bStart_clicked()
|
|||||||
abortWithError("Invalid magic header constant");
|
abortWithError("Invalid magic header constant");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
file->seek(0);
|
||||||
state = State::ErasingFLASH;
|
state = State::ErasingFLASH;
|
||||||
connect(dev, &Device::AckReceived, this, &FirmwareUpdateDialog::receivedAck);
|
connect(dev, &Device::AckReceived, this, &FirmwareUpdateDialog::receivedAck);
|
||||||
connect(dev, &Device::NackReceived, this, &FirmwareUpdateDialog::receivedNack);
|
connect(dev, &Device::NackReceived, this, &FirmwareUpdateDialog::receivedNack);
|
||||||
@ -73,6 +74,7 @@ void FirmwareUpdateDialog::addStatus(QString line)
|
|||||||
|
|
||||||
void FirmwareUpdateDialog::abortWithError(QString error)
|
void FirmwareUpdateDialog::abortWithError(QString error)
|
||||||
{
|
{
|
||||||
|
timer.stop();
|
||||||
disconnect(dev, &Device::AckReceived, this, &FirmwareUpdateDialog::receivedAck);
|
disconnect(dev, &Device::AckReceived, this, &FirmwareUpdateDialog::receivedAck);
|
||||||
disconnect(dev, &Device::NackReceived, this, &FirmwareUpdateDialog::receivedNack);
|
disconnect(dev, &Device::NackReceived, this, &FirmwareUpdateDialog::receivedNack);
|
||||||
|
|
||||||
@ -129,9 +131,10 @@ void FirmwareUpdateDialog::receivedAck()
|
|||||||
state = State::TriggeringUpdate;
|
state = State::TriggeringUpdate;
|
||||||
dev->SendCommandWithoutPayload(Protocol::PacketType::PerformFirmwareUpdate);
|
dev->SendCommandWithoutPayload(Protocol::PacketType::PerformFirmwareUpdate);
|
||||||
timer.start(5000);
|
timer.start(5000);
|
||||||
}
|
} else {
|
||||||
sendNextFirmwareChunk();
|
sendNextFirmwareChunk();
|
||||||
timer.start(1000);
|
timer.start(1000);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case State::TriggeringUpdate:
|
case State::TriggeringUpdate:
|
||||||
addStatus("Rebooting device...");
|
addStatus("Rebooting device...");
|
||||||
@ -149,7 +152,15 @@ void FirmwareUpdateDialog::receivedAck()
|
|||||||
|
|
||||||
void FirmwareUpdateDialog::receivedNack()
|
void FirmwareUpdateDialog::receivedNack()
|
||||||
{
|
{
|
||||||
|
switch(state) {
|
||||||
|
case State::ErasingFLASH:
|
||||||
abortWithError("Nack received, device does not support firmware update");
|
abortWithError("Nack received, device does not support firmware update");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
abortWithError("Nack received, something went wrong");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void FirmwareUpdateDialog::sendNextFirmwareChunk()
|
void FirmwareUpdateDialog::sendNextFirmwareChunk()
|
||||||
|
@ -29,7 +29,7 @@
|
|||||||
|
|
||||||
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
||||||
|
|
||||||
<configuration artifactExtension="elf" artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug" cleanCommand="rm -rf" description="" id="fr.ac6.managedbuild.config.gnu.cross.exe.debug.1502405410" name="Debug" optionalBuildProperties="org.eclipse.cdt.docker.launcher.containerbuild.property.selectedvolumes=,org.eclipse.cdt.docker.launcher.containerbuild.property.volumes=" parent="fr.ac6.managedbuild.config.gnu.cross.exe.debug" postannouncebuildStep="Generating hex and Printing size information:" postbuildStep="arm-none-eabi-objcopy -O ihex "${BuildArtifactFileBaseName}.elf" "${BuildArtifactFileBaseName}.hex" && arm-none-eabi-size "${BuildArtifactFileName}"">
|
<configuration artifactExtension="elf" artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug" cleanCommand="rm -rf" description="" id="fr.ac6.managedbuild.config.gnu.cross.exe.debug.1502405410" name="Debug" optionalBuildProperties="org.eclipse.cdt.docker.launcher.containerbuild.property.selectedvolumes=,org.eclipse.cdt.docker.launcher.containerbuild.property.volumes=" parent="fr.ac6.managedbuild.config.gnu.cross.exe.debug" postannouncebuildStep="Generating hex and Printing size information:" postbuildStep="arm-none-eabi-objcopy -O binary "${BuildArtifactFileBaseName}.elf" "${BuildArtifactFileBaseName}.bin" && arm-none-eabi-objcopy -O ihex "${BuildArtifactFileBaseName}.elf" "${BuildArtifactFileBaseName}.hex" && arm-none-eabi-size "${BuildArtifactFileName}"">
|
||||||
|
|
||||||
<folderInfo id="fr.ac6.managedbuild.config.gnu.cross.exe.debug.1502405410." name="/" resourcePath="">
|
<folderInfo id="fr.ac6.managedbuild.config.gnu.cross.exe.debug.1502405410." name="/" resourcePath="">
|
||||||
|
|
||||||
@ -779,7 +779,7 @@
|
|||||||
|
|
||||||
<configuration configurationName="Debug">
|
<configuration configurationName="Debug">
|
||||||
|
|
||||||
<resource resourceType="PROJECT" workspacePath="/VNA_embedded"/>
|
<resource resourceType="PROJECT" workspacePath="VNA_embedded"/>
|
||||||
|
|
||||||
</configuration>
|
</configuration>
|
||||||
|
|
||||||
|
File diff suppressed because one or more lines are too long
@ -12,6 +12,7 @@
|
|||||||
#include "Flash.hpp"
|
#include "Flash.hpp"
|
||||||
#include "FreeRTOS.h"
|
#include "FreeRTOS.h"
|
||||||
#include "task.h"
|
#include "task.h"
|
||||||
|
#include "Led.hpp"
|
||||||
|
|
||||||
#define LOG_LEVEL LOG_LEVEL_INFO
|
#define LOG_LEVEL LOG_LEVEL_INFO
|
||||||
#define LOG_MODULE "App"
|
#define LOG_MODULE "App"
|
||||||
@ -66,6 +67,8 @@ void App_Start() {
|
|||||||
handle = xTaskGetCurrentTaskHandle();
|
handle = xTaskGetCurrentTaskHandle();
|
||||||
usb_init(communication_usb_input);
|
usb_init(communication_usb_input);
|
||||||
Log_Init();
|
Log_Init();
|
||||||
|
LED::Init();
|
||||||
|
LED::Pulsating();
|
||||||
Communication::SetCallback(USBPacketReceived);
|
Communication::SetCallback(USBPacketReceived);
|
||||||
// Pass on logging output to USB
|
// Pass on logging output to USB
|
||||||
Log_SetRedirect(usb_log);
|
Log_SetRedirect(usb_log);
|
||||||
@ -74,23 +77,34 @@ void App_Start() {
|
|||||||
#ifdef HAS_FLASH
|
#ifdef HAS_FLASH
|
||||||
if(!flash.isPresent()) {
|
if(!flash.isPresent()) {
|
||||||
LOG_CRIT("Failed to detect onboard FLASH");
|
LOG_CRIT("Failed to detect onboard FLASH");
|
||||||
|
LED::Error(1);
|
||||||
}
|
}
|
||||||
auto fw_info = Firmware::GetFlashContentInfo(&flash);
|
auto fw_info = Firmware::GetFlashContentInfo(&flash);
|
||||||
if(fw_info.valid) {
|
if(fw_info.valid) {
|
||||||
if(fw_info.CPU_need_update) {
|
if(fw_info.CPU_need_update) {
|
||||||
// Function will not return, the device will reboot with the new firmware instead
|
// Function will not return, the device will reboot with the new firmware instead
|
||||||
Firmware::PerformUpdate(&flash);
|
// Firmware::PerformUpdate(&flash, fw_info);
|
||||||
|
}
|
||||||
|
if(!FPGA::Configure(&flash, fw_info.FPGA_bitstream_address, fw_info.FPGA_bitstream_size)) {
|
||||||
|
LOG_CRIT("FPGA configuration failed");
|
||||||
|
LED::Error(3);
|
||||||
}
|
}
|
||||||
FPGA::Configure(&flash, fw_info.FPGA_bitstream_address, fw_info.FPGA_bitstream_size);
|
|
||||||
} else {
|
} else {
|
||||||
LOG_CRIT("Invalid bitstream/firmware, not configuring FPGA");
|
LOG_CRIT("Invalid bitstream/firmware, not configuring FPGA");
|
||||||
|
LED::Error(2);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
// The FPGA configures itself from the flash, allow time for this
|
// The FPGA configures itself from the flash, allow time for this
|
||||||
vTaskDelay(2000);
|
vTaskDelay(2000);
|
||||||
#endif
|
#endif
|
||||||
|
#if HW_REVISION == 'B'
|
||||||
|
// Enable supply to RF circuit
|
||||||
|
EN_6V_GPIO_Port->BSRR = EN_6V_Pin;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (!VNA::Init()) {
|
if (!VNA::Init()) {
|
||||||
LOG_CRIT("Initialization failed, unable to start");
|
LOG_CRIT("Initialization failed, unable to start");
|
||||||
|
LED::Error(4);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if HW_REVISION == 'A'
|
#if HW_REVISION == 'A'
|
||||||
@ -102,6 +116,7 @@ void App_Start() {
|
|||||||
bool sweepActive = false;
|
bool sweepActive = false;
|
||||||
Protocol::ReferenceSettings reference;
|
Protocol::ReferenceSettings reference;
|
||||||
|
|
||||||
|
LED::Off();
|
||||||
while (1) {
|
while (1) {
|
||||||
uint32_t notification;
|
uint32_t notification;
|
||||||
if(xTaskNotifyWait(0x00, UINT32_MAX, ¬ification, 100) == pdPASS) {
|
if(xTaskNotifyWait(0x00, UINT32_MAX, ¬ification, 100) == pdPASS) {
|
||||||
@ -190,7 +205,7 @@ void App_Start() {
|
|||||||
break;
|
break;
|
||||||
#ifdef HAS_FLASH
|
#ifdef HAS_FLASH
|
||||||
case Protocol::PacketType::ClearFlash:
|
case Protocol::PacketType::ClearFlash:
|
||||||
FPGA::AbortSweep();
|
VNA::SetIdle();
|
||||||
sweepActive = false;
|
sweepActive = false;
|
||||||
LOG_DEBUG("Erasing FLASH in preparation for firmware update...");
|
LOG_DEBUG("Erasing FLASH in preparation for firmware update...");
|
||||||
if(flash.eraseChip()) {
|
if(flash.eraseChip()) {
|
||||||
@ -203,10 +218,15 @@ void App_Start() {
|
|||||||
break;
|
break;
|
||||||
case Protocol::PacketType::FirmwarePacket:
|
case Protocol::PacketType::FirmwarePacket:
|
||||||
LOG_INFO("Writing firmware packet at address %u", packet.firmware.address);
|
LOG_INFO("Writing firmware packet at address %u", packet.firmware.address);
|
||||||
flash.write(packet.firmware.address, sizeof(packet.firmware.data), packet.firmware.data);
|
if(flash.write(packet.firmware.address, sizeof(packet.firmware.data), packet.firmware.data)) {
|
||||||
Communication::SendWithoutPayload(Protocol::PacketType::Ack);
|
Communication::SendWithoutPayload(Protocol::PacketType::Ack);
|
||||||
|
} else {
|
||||||
|
LOG_ERR("Failed to write FLASH");
|
||||||
|
Communication::SendWithoutPayload(Protocol::PacketType::Nack);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case Protocol::PacketType::PerformFirmwareUpdate: {
|
case Protocol::PacketType::PerformFirmwareUpdate: {
|
||||||
|
LOG_INFO("Firmware update process triggered");
|
||||||
auto fw_info = Firmware::GetFlashContentInfo(&flash);
|
auto fw_info = Firmware::GetFlashContentInfo(&flash);
|
||||||
if(fw_info.valid) {
|
if(fw_info.valid) {
|
||||||
Protocol::PacketInfo p;
|
Protocol::PacketInfo p;
|
||||||
@ -214,7 +234,7 @@ void App_Start() {
|
|||||||
Communication::Send(p);
|
Communication::Send(p);
|
||||||
// Some delay to allow communication to finish
|
// Some delay to allow communication to finish
|
||||||
vTaskDelay(1000);
|
vTaskDelay(1000);
|
||||||
Firmware::PerformUpdate(&flash);
|
Firmware::PerformUpdate(&flash, fw_info);
|
||||||
// should never get here
|
// should never get here
|
||||||
Communication::SendWithoutPayload(Protocol::PacketType::Nack);
|
Communication::SendWithoutPayload(Protocol::PacketType::Nack);
|
||||||
}
|
}
|
||||||
@ -230,8 +250,7 @@ void App_Start() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(sweepActive && HAL_GetTick() - lastNewPoint > 1000) {
|
if(sweepActive && HAL_GetTick() - lastNewPoint > 1000) {
|
||||||
LOG_WARN("Timed out waiting for point, last received point was %d", result.pointNum);
|
LOG_WARN("Timed out waiting for point, last received point was %d (Status 0x%04x)", result.pointNum, FPGA::GetStatus());
|
||||||
LOG_WARN("FPGA status: 0x%04x", FPGA::GetStatus());
|
|
||||||
FPGA::AbortSweep();
|
FPGA::AbortSweep();
|
||||||
// restart the current sweep
|
// restart the current sweep
|
||||||
VNA::Init();
|
VNA::Init();
|
||||||
|
@ -14,10 +14,17 @@ static uint16_t ISRMaskReg = 0x0000;
|
|||||||
|
|
||||||
using namespace FPGAHAL;
|
using namespace FPGAHAL;
|
||||||
|
|
||||||
|
static void SwitchBytes(uint16_t &value) {
|
||||||
|
value = (value & 0xFF00) >> 8 | (value & 0x00FF) << 8;
|
||||||
|
}
|
||||||
|
static void SwitchBytes(int16_t &value) {
|
||||||
|
value = (value & 0xFF00) >> 8 | (value & 0x00FF) << 8;
|
||||||
|
}
|
||||||
|
|
||||||
void WriteRegister(FPGA::Reg reg, uint16_t value) {
|
void WriteRegister(FPGA::Reg reg, uint16_t value) {
|
||||||
uint16_t cmd[2] = {(uint16_t) (0x8000 | (uint16_t) reg), value};
|
uint8_t cmd[4] = {0x80, (uint8_t) reg, (uint8_t) (value >> 8), (uint8_t) (value & 0xFF)};
|
||||||
Low(CS);
|
Low(CS);
|
||||||
HAL_SPI_Transmit(&FPGA_SPI, (uint8_t*) cmd, 2, 100);
|
HAL_SPI_Transmit(&FPGA_SPI, (uint8_t*) cmd, 4, 100);
|
||||||
High(CS);
|
High(CS);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -34,8 +41,18 @@ bool FPGA::Configure(Flash *f, uint32_t start_address, uint32_t bitstream_size)
|
|||||||
High(PROGRAM_B);
|
High(PROGRAM_B);
|
||||||
while(!isHigh(INIT_B));
|
while(!isHigh(INIT_B));
|
||||||
|
|
||||||
|
if(isHigh(DONE)) {
|
||||||
|
LOG_ERR("DONE not asserted, aborting configuration");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t lastmessage = HAL_GetTick();
|
||||||
uint8_t buf[256];
|
uint8_t buf[256];
|
||||||
while(bitstream_size > 0) {
|
while(bitstream_size > 0) {
|
||||||
|
if(HAL_GetTick() - lastmessage > 100) {
|
||||||
|
LOG_DEBUG("Remaining: %lu", bitstream_size);
|
||||||
|
lastmessage = HAL_GetTick();
|
||||||
|
}
|
||||||
uint16_t size = sizeof(buf);
|
uint16_t size = sizeof(buf);
|
||||||
if(size > bitstream_size) {
|
if(size > bitstream_size) {
|
||||||
size = bitstream_size;
|
size = bitstream_size;
|
||||||
@ -73,18 +90,20 @@ bool FPGA::Init(HaltedCallback cb) {
|
|||||||
Delay::ms(10);
|
Delay::ms(10);
|
||||||
|
|
||||||
// Check if FPGA response is as expected
|
// Check if FPGA response is as expected
|
||||||
uint16_t cmd[2] = {0x4000, 0x0000};
|
uint8_t cmd[4] = {0x40, 0x00, 0x00, 0x00};
|
||||||
uint16_t recv[2];
|
uint8_t recv[4];
|
||||||
Low(CS);
|
Low(CS);
|
||||||
HAL_SPI_TransmitReceive(&FPGA_SPI, (uint8_t*) cmd, (uint8_t*) recv, 2, 100);
|
HAL_SPI_TransmitReceive(&FPGA_SPI, (uint8_t*) cmd, (uint8_t*) recv, 4, 100);
|
||||||
High(CS);
|
High(CS);
|
||||||
|
|
||||||
if(recv[1] != 0xF0A5) {
|
uint16_t resp = (uint16_t) recv[2] << 8 | recv[3];
|
||||||
LOG_ERR("Initialization failed, got 0x%04x instead of 0xF0A5", recv[1]);
|
uint16_t status = (uint16_t) recv[0] << 8 | recv[1];
|
||||||
|
if(resp != 0xF0A5) {
|
||||||
|
LOG_ERR("Initialization failed, got 0x%04x instead of 0xF0A5", resp);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG_DEBUG("Initialized, status register: 0x%04x", recv[0]);
|
LOG_DEBUG("Initialized, status register: 0x%04x", status);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -183,8 +202,15 @@ void FPGA::WriteSweepConfig(uint16_t pointnum, bool lowband, uint32_t *SourceReg
|
|||||||
}
|
}
|
||||||
send[5] = (Source_M & 0x000F) << 12 | Source_FRAC;
|
send[5] = (Source_M & 0x000F) << 12 | Source_FRAC;
|
||||||
send[6] = Source_DIV_A << 13 | Source_VCO << 7 | Source_N;
|
send[6] = Source_DIV_A << 13 | Source_VCO << 7 | Source_N;
|
||||||
|
SwitchBytes(send[0]);
|
||||||
|
SwitchBytes(send[1]);
|
||||||
|
SwitchBytes(send[2]);
|
||||||
|
SwitchBytes(send[3]);
|
||||||
|
SwitchBytes(send[4]);
|
||||||
|
SwitchBytes(send[5]);
|
||||||
|
SwitchBytes(send[6]);
|
||||||
Low(CS);
|
Low(CS);
|
||||||
HAL_SPI_Transmit(&FPGA_SPI, (uint8_t*) send, 7, 100);
|
HAL_SPI_Transmit(&FPGA_SPI, (uint8_t*) send, 14, 100);
|
||||||
High(CS);
|
High(CS);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -194,17 +220,18 @@ static inline int64_t sign_extend_64(int64_t x, uint16_t bits) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static FPGA::ReadCallback callback;
|
static FPGA::ReadCallback callback;
|
||||||
static uint16_t raw[18];
|
static uint8_t raw[36];
|
||||||
static bool halted;
|
static bool halted;
|
||||||
|
|
||||||
bool FPGA::InitiateSampleRead(ReadCallback cb) {
|
bool FPGA::InitiateSampleRead(ReadCallback cb) {
|
||||||
callback = cb;
|
callback = cb;
|
||||||
uint16_t cmd = 0xC000;
|
uint8_t cmd[2] = {0xC0, 0x00};
|
||||||
uint16_t status;
|
uint16_t status;
|
||||||
|
|
||||||
Low(CS);
|
Low(CS);
|
||||||
HAL_SPI_TransmitReceive(&FPGA_SPI, (uint8_t*) &cmd, (uint8_t*) &status, 1,
|
HAL_SPI_TransmitReceive(&FPGA_SPI, cmd, (uint8_t*) &status, 2, 100);
|
||||||
100);
|
|
||||||
|
SwitchBytes(status);
|
||||||
|
|
||||||
if (status & 0x0010) {
|
if (status & 0x0010) {
|
||||||
halted = true;
|
halted = true;
|
||||||
@ -227,27 +254,28 @@ bool FPGA::InitiateSampleRead(ReadCallback cb) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Start data read
|
// Start data read
|
||||||
HAL_SPI_Receive_DMA(&FPGA_SPI, (uint8_t*) raw, 18);
|
HAL_SPI_Receive_DMA(&FPGA_SPI, raw, 36);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int64_t assembleSampleResultValue(uint8_t *raw) {
|
||||||
|
return sign_extend_64(
|
||||||
|
(uint16_t) raw[0] << 8 | raw[1] | (uint32_t) raw[2] << 24
|
||||||
|
| (uint32_t) raw[3] << 16 | (uint64_t) raw[4] << 40
|
||||||
|
| (uint64_t) raw[5] << 32, 48);
|
||||||
|
}
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
void HAL_SPI_RxCpltCallback(SPI_HandleTypeDef *hspi) {
|
void HAL_SPI_RxCpltCallback(SPI_HandleTypeDef *hspi) {
|
||||||
FPGA::SamplingResult result;
|
FPGA::SamplingResult result;
|
||||||
High(CS);
|
High(CS);
|
||||||
// Assemble data from words
|
// Assemble data from words
|
||||||
result.P1I = sign_extend_64(
|
result.P1I = assembleSampleResultValue(&raw[30]);
|
||||||
(uint64_t) raw[17] << 32 | (uint32_t) raw[16] << 16 | raw[15], 48);
|
result.P1Q = assembleSampleResultValue(&raw[24]);
|
||||||
result.P1Q = sign_extend_64(
|
result.P2I = assembleSampleResultValue(&raw[18]);
|
||||||
(uint64_t) raw[14] << 32 | (uint32_t) raw[13] << 16 | raw[12], 48);
|
result.P2Q = assembleSampleResultValue(&raw[12]);
|
||||||
result.P2I = sign_extend_64(
|
result.RefI = assembleSampleResultValue(&raw[6]);
|
||||||
(uint64_t) raw[11] << 32 | (uint32_t) raw[10] << 16 | raw[9], 48);
|
result.RefQ = assembleSampleResultValue(&raw[0]);
|
||||||
result.P2Q = sign_extend_64(
|
|
||||||
(uint64_t) raw[8] << 32 | (uint32_t) raw[7] << 16 | raw[6], 48);
|
|
||||||
result.RefI = sign_extend_64(
|
|
||||||
(uint64_t) raw[5] << 32 | (uint32_t) raw[4] << 16 | raw[3], 48);
|
|
||||||
result.RefQ = sign_extend_64(
|
|
||||||
(uint64_t) raw[2] << 32 | (uint32_t) raw[1] << 16 | raw[0], 48);
|
|
||||||
if (callback) {
|
if (callback) {
|
||||||
callback(result);
|
callback(result);
|
||||||
}
|
}
|
||||||
@ -293,36 +321,45 @@ void FPGA::SetMode(Mode mode) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
uint16_t FPGA::GetStatus() {
|
uint16_t FPGA::GetStatus() {
|
||||||
uint16_t cmd = 0x4000;
|
uint8_t cmd[2] = {0x40, 0x00};
|
||||||
uint16_t status;
|
uint8_t status[2];
|
||||||
Low(CS);
|
Low(CS);
|
||||||
HAL_SPI_TransmitReceive(&FPGA_SPI, (uint8_t*) &cmd, (uint8_t*) &status, 1,
|
HAL_SPI_TransmitReceive(&FPGA_SPI, (uint8_t*) &cmd, (uint8_t*) &status, 2,
|
||||||
100);
|
100);
|
||||||
High(CS);
|
High(CS);
|
||||||
return status;
|
return (uint16_t) status[0] << 8 | status[1];
|
||||||
}
|
}
|
||||||
|
|
||||||
FPGA::ADCLimits FPGA::GetADCLimits() {
|
FPGA::ADCLimits FPGA::GetADCLimits() {
|
||||||
uint16_t cmd = 0xE000;
|
uint16_t cmd = 0xE000;
|
||||||
|
SwitchBytes(cmd);
|
||||||
Low(CS);
|
Low(CS);
|
||||||
HAL_SPI_Transmit(&FPGA_SPI, (uint8_t*) &cmd, 1, 100);
|
HAL_SPI_Transmit(&FPGA_SPI, (uint8_t*) &cmd, 2, 100);
|
||||||
ADCLimits limits;
|
ADCLimits limits;
|
||||||
HAL_SPI_Receive(&FPGA_SPI, (uint8_t*) &limits, 6, 100);
|
HAL_SPI_Receive(&FPGA_SPI, (uint8_t*) &limits, 12, 100);
|
||||||
High(CS);
|
High(CS);
|
||||||
|
SwitchBytes(limits.P1max);
|
||||||
|
SwitchBytes(limits.P1min);
|
||||||
|
SwitchBytes(limits.P2max);
|
||||||
|
SwitchBytes(limits.P2min);
|
||||||
|
SwitchBytes(limits.Rmax);
|
||||||
|
SwitchBytes(limits.Rmin);
|
||||||
return limits;
|
return limits;
|
||||||
}
|
}
|
||||||
|
|
||||||
void FPGA::ResetADCLimits() {
|
void FPGA::ResetADCLimits() {
|
||||||
uint16_t cmd = 0x6000;
|
uint16_t cmd = 0x6000;
|
||||||
|
SwitchBytes(cmd);
|
||||||
Low(CS);
|
Low(CS);
|
||||||
HAL_SPI_Transmit(&FPGA_SPI, (uint8_t*) &cmd, 1, 100);
|
HAL_SPI_Transmit(&FPGA_SPI, (uint8_t*) &cmd, 2, 100);
|
||||||
High(CS);
|
High(CS);
|
||||||
}
|
}
|
||||||
|
|
||||||
void FPGA::ResumeHaltedSweep() {
|
void FPGA::ResumeHaltedSweep() {
|
||||||
uint16_t cmd = 0x2000;
|
uint16_t cmd = 0x2000;
|
||||||
|
SwitchBytes(cmd);
|
||||||
Low(CS);
|
Low(CS);
|
||||||
HAL_SPI_Transmit(&FPGA_SPI, (uint8_t*) &cmd, 1, 100);
|
HAL_SPI_Transmit(&FPGA_SPI, (uint8_t*) &cmd, 2, 100);
|
||||||
High(CS);
|
High(CS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,5 +1,13 @@
|
|||||||
#include "Flash.hpp"
|
#include "Flash.hpp"
|
||||||
|
|
||||||
|
#include "FreeRTOS.h"
|
||||||
|
#include "task.h"
|
||||||
|
#include <cstring>
|
||||||
|
|
||||||
|
#define LOG_LEVEL LOG_LEVEL_INFO
|
||||||
|
#define LOG_MODULE "Flash"
|
||||||
|
#include "Log.h"
|
||||||
|
|
||||||
bool Flash::isPresent() {
|
bool Flash::isPresent() {
|
||||||
CS(false);
|
CS(false);
|
||||||
// read JEDEC ID
|
// read JEDEC ID
|
||||||
@ -24,16 +32,18 @@ void Flash::read(uint32_t address, uint16_t length, void *dest) {
|
|||||||
bool Flash::write(uint32_t address, uint16_t length, uint8_t *src) {
|
bool Flash::write(uint32_t address, uint16_t length, uint8_t *src) {
|
||||||
if((address & 0xFF) != 0 || length%256 != 0) {
|
if((address & 0xFF) != 0 || length%256 != 0) {
|
||||||
// only writes to complete pages allowed
|
// only writes to complete pages allowed
|
||||||
|
LOG_ERR("Invalid write address/size: %lu/%u", address, length);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
address &= 0x00FFFFFF;
|
address &= 0x00FFFFFF;
|
||||||
|
LOG_DEBUG("Writing %u bytes to address %lu", length, address);
|
||||||
while(length > 0) {
|
while(length > 0) {
|
||||||
EnableWrite();
|
EnableWrite();
|
||||||
CS(false);
|
CS(false);
|
||||||
uint8_t cmd[4] = {
|
uint8_t cmd[4] = {
|
||||||
0x02,
|
0x02,
|
||||||
((uint8_t) address >> 16) & 0xFF,
|
(uint8_t) (address >> 16) & 0xFF,
|
||||||
((uint8_t) address >> 8) & 0xFF,
|
(uint8_t) (address >> 8) & 0xFF,
|
||||||
(uint8_t) (address & 0xFF),
|
(uint8_t) (address & 0xFF),
|
||||||
};
|
};
|
||||||
// issue read command
|
// issue read command
|
||||||
@ -41,9 +51,18 @@ bool Flash::write(uint32_t address, uint16_t length, uint8_t *src) {
|
|||||||
// write data
|
// write data
|
||||||
HAL_SPI_Transmit(spi, src, 256, 1000);
|
HAL_SPI_Transmit(spi, src, 256, 1000);
|
||||||
CS(true);
|
CS(true);
|
||||||
if(!WaitBusy(5)) {
|
if(!WaitBusy(20)) {
|
||||||
|
LOG_ERR("Write timed out");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
// Verify
|
||||||
|
uint8_t buf[256];
|
||||||
|
read(address, 256, buf);
|
||||||
|
if(memcmp(src, buf, 256)) {
|
||||||
|
LOG_ERR("Verification error");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
address += 256;
|
||||||
length -= 256;
|
length -= 256;
|
||||||
src += 256;
|
src += 256;
|
||||||
}
|
}
|
||||||
@ -59,6 +78,7 @@ void Flash::EnableWrite() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool Flash::eraseChip() {
|
bool Flash::eraseChip() {
|
||||||
|
LOG_INFO("Erasing...");
|
||||||
EnableWrite();
|
EnableWrite();
|
||||||
CS(false);
|
CS(false);
|
||||||
// enable write latch
|
// enable write latch
|
||||||
@ -73,8 +93,8 @@ void Flash::initiateRead(uint32_t address) {
|
|||||||
CS(false);
|
CS(false);
|
||||||
uint8_t cmd[4] = {
|
uint8_t cmd[4] = {
|
||||||
0x03,
|
0x03,
|
||||||
((uint8_t) address >> 16) & 0xFF,
|
(uint8_t) (address >> 16) & 0xFF,
|
||||||
((uint8_t) address >> 8) & 0xFF,
|
(uint8_t) (address >> 8) & 0xFF,
|
||||||
(uint8_t) (address & 0xFF),
|
(uint8_t) (address & 0xFF),
|
||||||
};
|
};
|
||||||
// issue read command
|
// issue read command
|
||||||
@ -86,15 +106,17 @@ bool Flash::WaitBusy(uint32_t timeout) {
|
|||||||
CS(false);
|
CS(false);
|
||||||
uint8_t readStatus1 = 0x05;
|
uint8_t readStatus1 = 0x05;
|
||||||
HAL_SPI_Transmit(spi, &readStatus1, 1, 100);
|
HAL_SPI_Transmit(spi, &readStatus1, 1, 100);
|
||||||
while(HAL_GetTick() - starttime > timeout) {
|
do {
|
||||||
|
vTaskDelay(1);
|
||||||
uint8_t status1;
|
uint8_t status1;
|
||||||
HAL_SPI_Receive(spi, &status1, 1, 100);
|
HAL_SPI_Receive(spi, &status1, 1, 100);
|
||||||
if (!(status1 & 0x01)) {
|
if (!(status1 & 0x01)) {
|
||||||
CS(true);
|
CS(true);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
} while (HAL_GetTick() - starttime < timeout);
|
||||||
// timed out
|
// timed out
|
||||||
CS(true);
|
CS(true);
|
||||||
|
LOG_ERR("Timeout occured");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,7 @@ extern "C" {
|
|||||||
|
|
||||||
//#define LOG_BLOCKING
|
//#define LOG_BLOCKING
|
||||||
|
|
||||||
#define LOG_USART 2
|
#define LOG_USART 3
|
||||||
#define LOG_SENDBUF_LENGTH 1024
|
#define LOG_SENDBUF_LENGTH 1024
|
||||||
//#define LOG_USE_MUTEX
|
//#define LOG_USE_MUTEX
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
|
||||||
#define LOG_LEVEL LOG_LEVEL_DEBUG
|
#define LOG_LEVEL LOG_LEVEL_INFO
|
||||||
#define LOG_MODULE "SI5351"
|
#define LOG_MODULE "SI5351"
|
||||||
#include "Log.h"
|
#include "Log.h"
|
||||||
|
|
||||||
|
@ -296,12 +296,14 @@ void MAX2871::UpdateFrequency() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void MAX2871::Write(uint8_t reg, uint32_t val) {
|
void MAX2871::Write(uint8_t reg, uint32_t val) {
|
||||||
uint16_t data[2];
|
uint8_t data[4];
|
||||||
// split value into two 16 bit words
|
// split value into two 16 bit words
|
||||||
data[0] = val >> 16;
|
data[0] = (val >> 24) & 0xFF;
|
||||||
data[1] = (val & 0xFFF8) | reg;
|
data[1] = (val >> 16) & 0xFF;
|
||||||
|
data[2] = (val >> 8) & 0xFF;
|
||||||
|
data[3] = (val & 0xF8) | reg;
|
||||||
Delay::us(1);
|
Delay::us(1);
|
||||||
HAL_SPI_Transmit(hspi, (uint8_t*) data, 2, 20);
|
HAL_SPI_Transmit(hspi, (uint8_t*) data, 4, 20);
|
||||||
LE->BSRR = LEpin;
|
LE->BSRR = LEpin;
|
||||||
Delay::us(1);
|
Delay::us(1);
|
||||||
LE->BSRR = LEpin << 16;
|
LE->BSRR = LEpin << 16;
|
||||||
@ -309,15 +311,16 @@ void MAX2871::Write(uint8_t reg, uint32_t val) {
|
|||||||
|
|
||||||
// Assumes that the MUX pin is already configured as "Read register 6" and connected to MISO
|
// Assumes that the MUX pin is already configured as "Read register 6" and connected to MISO
|
||||||
uint32_t MAX2871::Read() {
|
uint32_t MAX2871::Read() {
|
||||||
uint16_t transmit[2] = {0x0000, 0x0006};
|
uint8_t transmit[4] = {0x00, 0x00, 0x00, 0x06};
|
||||||
HAL_SPI_Transmit(hspi, (uint8_t*) transmit, 2, 20);
|
HAL_SPI_Transmit(hspi, (uint8_t*) transmit, 4, 20);
|
||||||
LE->BSRR = LEpin;
|
LE->BSRR = LEpin;
|
||||||
memset(transmit, 0, sizeof(transmit));
|
memset(transmit, 0, sizeof(transmit));
|
||||||
uint16_t recv[2];
|
uint8_t recv[4];
|
||||||
HAL_SPI_TransmitReceive(hspi, (uint8_t*) transmit, (uint8_t*) recv, 2, 20);
|
HAL_SPI_TransmitReceive(hspi, (uint8_t*) transmit, (uint8_t*) recv, 4, 20);
|
||||||
LE->BSRR = LEpin << 16;
|
LE->BSRR = LEpin << 16;
|
||||||
// assemble readback result
|
// assemble readback result
|
||||||
uint32_t result = ((uint32_t) recv[0] << 16) | (recv[1] & 0xFFFF);
|
uint32_t result = ((uint32_t) recv[0] << 24) | ((uint32_t) recv[1] << 16
|
||||||
|
) | ((uint32_t) recv[2] << 8) | (recv[3] & 0xFF);
|
||||||
result <<= 2;
|
result <<= 2;
|
||||||
LOG_DEBUG("Readback: 0x%08x", result);
|
LOG_DEBUG("Readback: 0x%08x", result);
|
||||||
return result;
|
return result;
|
||||||
|
@ -42,6 +42,7 @@ Firmware::Info Firmware::GetFlashContentInfo(Flash *f) {
|
|||||||
}
|
}
|
||||||
f->read(h.FPGA_start + checked_size, read_size, buf);
|
f->read(h.FPGA_start + checked_size, read_size, buf);
|
||||||
crc = Protocol::CRC32(crc, buf, read_size);
|
crc = Protocol::CRC32(crc, buf, read_size);
|
||||||
|
checked_size += read_size;
|
||||||
}
|
}
|
||||||
if (crc != h.crc) {
|
if (crc != h.crc) {
|
||||||
LOG_ERR("CRC mismatch, invalid FPGA bitstream/CPU firmware");
|
LOG_ERR("CRC mismatch, invalid FPGA bitstream/CPU firmware");
|
||||||
@ -54,12 +55,13 @@ Firmware::Info Firmware::GetFlashContentInfo(Flash *f) {
|
|||||||
if (h.CPU_size - checked_size < read_size) {
|
if (h.CPU_size - checked_size < read_size) {
|
||||||
read_size = h.CPU_size - checked_size;
|
read_size = h.CPU_size - checked_size;
|
||||||
}
|
}
|
||||||
f->read(h.FPGA_start + checked_size, read_size, buf);
|
f->read(h.CPU_start + checked_size, read_size, buf);
|
||||||
if(memcmp(buf, (void*)(0x8000000+checked_size), read_size)) {
|
if(memcmp(buf, (void*)(0x8000000+checked_size), read_size)) {
|
||||||
LOG_WARN("Difference to CPU firmware in external FLASH detected, update required");
|
LOG_WARN("Difference to CPU firmware in external FLASH detected, update required");
|
||||||
ret.CPU_need_update = true;
|
ret.CPU_need_update = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
checked_size += read_size;
|
||||||
}
|
}
|
||||||
ret.valid = true;
|
ret.valid = true;
|
||||||
ret.FPGA_bitstream_address = h.FPGA_start;
|
ret.FPGA_bitstream_address = h.FPGA_start;
|
||||||
@ -100,9 +102,12 @@ static void copy_flash(uint32_t size, SPI_TypeDef *spi) {
|
|||||||
* content into the internal MCU flash */
|
* content into the internal MCU flash */
|
||||||
uint32_t written = 0;
|
uint32_t written = 0;
|
||||||
|
|
||||||
|
// Enable FIFO notifications for 8 bit
|
||||||
|
SET_BIT(spi->CR2, SPI_RXFIFO_THRESHOLD);
|
||||||
|
|
||||||
/* Enable FLASH write */
|
/* Enable FLASH write */
|
||||||
FLASH->CR |= FLASH_CR_PG;
|
FLASH->CR |= FLASH_CR_PG;
|
||||||
uint32_t to = 0x80000000;
|
uint32_t *to = (uint32_t*) 0x8000000;
|
||||||
while (written < size) {
|
while (written < size) {
|
||||||
uint8_t buf[8];
|
uint8_t buf[8];
|
||||||
// Get 64bit from external flash
|
// Get 64bit from external flash
|
||||||
@ -110,14 +115,15 @@ static void copy_flash(uint32_t size, SPI_TypeDef *spi) {
|
|||||||
// wait for SPI ready to transmit dummy data
|
// wait for SPI ready to transmit dummy data
|
||||||
while(!(spi->SR & SPI_FLAG_TXE));
|
while(!(spi->SR & SPI_FLAG_TXE));
|
||||||
// send dummy byte
|
// send dummy byte
|
||||||
*(__IO uint8_t *)spi->DR = 0x00;
|
*(__IO uint8_t *)&spi->DR = 0x00;
|
||||||
// wait for received byte to be ready
|
// wait for received byte to be ready
|
||||||
while(!(spi->SR & SPI_FLAG_RXNE));
|
while(!(spi->SR & SPI_FLAG_RXNE));
|
||||||
// get received byte
|
// get received byte
|
||||||
buf[i] = *(__IO uint8_t *)spi->DR;
|
buf[i] = *(__IO uint8_t *)&spi->DR;
|
||||||
}
|
}
|
||||||
// program received data into flash
|
// program received data into flash
|
||||||
*(__IO uint32_t*) to++ = *(uint32_t*)&buf[0];
|
*(__IO uint32_t*) to++ = *(uint32_t*)&buf[0];
|
||||||
|
__ISB();
|
||||||
*(__IO uint32_t*) to++ = *(uint32_t*)&buf[4];
|
*(__IO uint32_t*) to++ = *(uint32_t*)&buf[4];
|
||||||
/* Wait for it to finish */
|
/* Wait for it to finish */
|
||||||
while (FLASH->SR & FLASH_SR_BSY)
|
while (FLASH->SR & FLASH_SR_BSY)
|
||||||
@ -152,8 +158,7 @@ static void copy_flash(uint32_t size, SPI_TypeDef *spi) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Firmware::PerformUpdate(Flash *f) {
|
void Firmware::PerformUpdate(Flash *f, Info info) {
|
||||||
auto info = GetFlashContentInfo(f);
|
|
||||||
if(!info.valid) {
|
if(!info.valid) {
|
||||||
LOG_ERR("Invalid firmware data, not performing update");
|
LOG_ERR("Invalid firmware data, not performing update");
|
||||||
return;
|
return;
|
||||||
|
@ -22,7 +22,7 @@ using Info = struct info {
|
|||||||
};
|
};
|
||||||
|
|
||||||
Info GetFlashContentInfo(Flash *f);
|
Info GetFlashContentInfo(Flash *f);
|
||||||
void PerformUpdate(Flash *f);
|
void PerformUpdate(Flash *f, Info info);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
131
Software/VNA_embedded/Application/Led.cpp
Normal file
131
Software/VNA_embedded/Application/Led.cpp
Normal file
@ -0,0 +1,131 @@
|
|||||||
|
#include "Led.hpp"
|
||||||
|
|
||||||
|
#include "stm.hpp"
|
||||||
|
#include "FreeRTOS.h"
|
||||||
|
#include "task.h"
|
||||||
|
|
||||||
|
#if HW_REVISION == 'B'
|
||||||
|
|
||||||
|
#define LED_TASK_STACK 128
|
||||||
|
|
||||||
|
extern TIM_HandleTypeDef htim2;
|
||||||
|
|
||||||
|
enum class Mode {
|
||||||
|
Off,
|
||||||
|
On,
|
||||||
|
Blink,
|
||||||
|
Pulsating,
|
||||||
|
Error,
|
||||||
|
};
|
||||||
|
|
||||||
|
static Mode mode;
|
||||||
|
static uint8_t led_statecnt;
|
||||||
|
static int8_t led_ncnt;
|
||||||
|
static xTaskHandle task;
|
||||||
|
static StaticTask_t xTask;
|
||||||
|
static StackType_t xStack[LED_TASK_STACK];
|
||||||
|
static uint8_t err_cnt;
|
||||||
|
|
||||||
|
static void led_set_percentage(uint8_t val) {
|
||||||
|
uint16_t compare = val * val / 100;
|
||||||
|
TIM2->CCR1 = compare;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void led_task(void* unused) {
|
||||||
|
UNUSED(unused);
|
||||||
|
while (1) {
|
||||||
|
if (led_statecnt < 199) {
|
||||||
|
led_statecnt++;
|
||||||
|
} else {
|
||||||
|
led_statecnt = 0;
|
||||||
|
}
|
||||||
|
switch (mode) {
|
||||||
|
case Mode::Off:
|
||||||
|
led_set_percentage(0);
|
||||||
|
vTaskSuspend(NULL);
|
||||||
|
break;
|
||||||
|
case Mode::On:
|
||||||
|
led_set_percentage(100);
|
||||||
|
vTaskSuspend(NULL);
|
||||||
|
break;
|
||||||
|
case Mode::Error:
|
||||||
|
if (led_statecnt == 0) {
|
||||||
|
err_cnt++;
|
||||||
|
if (err_cnt > led_ncnt) {
|
||||||
|
// reached number of blinks + 1
|
||||||
|
err_cnt = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (err_cnt >= led_ncnt) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// fall through
|
||||||
|
/* no break */
|
||||||
|
case Mode::Blink:
|
||||||
|
if(led_statecnt < 100) {
|
||||||
|
led_set_percentage(100);
|
||||||
|
} else {
|
||||||
|
led_set_percentage(0);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case Mode::Pulsating:
|
||||||
|
if (led_statecnt < 100) {
|
||||||
|
led_set_percentage(led_statecnt);
|
||||||
|
} else {
|
||||||
|
led_set_percentage(200 - led_statecnt);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
vTaskDelay(5);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void LED::Init() {
|
||||||
|
#if HW_REVISION == 'B'
|
||||||
|
led_ncnt = 0;
|
||||||
|
mode = Mode::Off;
|
||||||
|
HAL_TIM_Base_Start(&htim2);
|
||||||
|
HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);
|
||||||
|
|
||||||
|
task = xTaskCreateStatic(led_task, "LED",
|
||||||
|
LED_TASK_STACK, NULL, 6, xStack, &xTask);
|
||||||
|
vTaskSuspend(task);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void LED::Pulsating() {
|
||||||
|
#if HW_REVISION == 'B'
|
||||||
|
if(led_ncnt) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
vTaskSuspend(task);
|
||||||
|
mode = Mode::Pulsating;
|
||||||
|
vTaskResume(task);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void LED::Off() {
|
||||||
|
#if HW_REVISION == 'B'
|
||||||
|
if(led_ncnt) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
vTaskSuspend(task);
|
||||||
|
mode = Mode::Off;
|
||||||
|
vTaskResume(task);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void LED::Error(uint8_t code) {
|
||||||
|
#if HW_REVISION == 'B'
|
||||||
|
if(led_ncnt) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
vTaskSuspend(task);
|
||||||
|
mode = Mode::Error;
|
||||||
|
led_statecnt = 0;
|
||||||
|
err_cnt = 0;
|
||||||
|
led_ncnt = code;
|
||||||
|
vTaskResume(task);
|
||||||
|
#endif
|
||||||
|
}
|
12
Software/VNA_embedded/Application/Led.hpp
Normal file
12
Software/VNA_embedded/Application/Led.hpp
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
|
|
||||||
|
namespace LED {
|
||||||
|
|
||||||
|
void Init();
|
||||||
|
void Pulsating();
|
||||||
|
void Off();
|
||||||
|
void Error(uint8_t code);
|
||||||
|
|
||||||
|
}
|
@ -568,3 +568,16 @@ bool VNA::ConfigureGenerator(Protocol::GeneratorSettings g) {
|
|||||||
m.attenuator = attval;
|
m.attenuator = attval;
|
||||||
return ConfigureManual(m, nullptr);
|
return ConfigureManual(m, nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void VNA::SetIdle() {
|
||||||
|
FPGA::AbortSweep();
|
||||||
|
FPGA::SetMode(FPGA::Mode::FPGA);
|
||||||
|
FPGA::Enable(FPGA::Periphery::SourceChip, false);
|
||||||
|
FPGA::Enable(FPGA::Periphery::SourceRF, false);
|
||||||
|
FPGA::Enable(FPGA::Periphery::LO1Chip, false);
|
||||||
|
FPGA::Enable(FPGA::Periphery::LO1RF, false);
|
||||||
|
FPGA::Enable(FPGA::Periphery::Amplifier, false);
|
||||||
|
FPGA::Enable(FPGA::Periphery::Port1Mixer, false);
|
||||||
|
FPGA::Enable(FPGA::Periphery::Port2Mixer, false);
|
||||||
|
FPGA::Enable(FPGA::Periphery::RefMixer, false);
|
||||||
|
}
|
||||||
|
@ -13,6 +13,7 @@ bool Init();
|
|||||||
bool ConfigureSweep(Protocol::SweepSettings s, SweepCallback cb);
|
bool ConfigureSweep(Protocol::SweepSettings s, SweepCallback cb);
|
||||||
bool ConfigureManual(Protocol::ManualControl m, StatusCallback cb);
|
bool ConfigureManual(Protocol::ManualControl m, StatusCallback cb);
|
||||||
bool ConfigureGenerator(Protocol::GeneratorSettings g);
|
bool ConfigureGenerator(Protocol::GeneratorSettings g);
|
||||||
|
void SetIdle();
|
||||||
|
|
||||||
// Only call the following function when the sweep is inactive
|
// Only call the following function when the sweep is inactive
|
||||||
bool GetTemps(uint8_t *source, uint8_t *lo);
|
bool GetTemps(uint8_t *source, uint8_t *lo);
|
||||||
|
@ -11,8 +11,8 @@ extern SPI_HandleTypeDef hspi1;
|
|||||||
namespace VNAHAL {
|
namespace VNAHAL {
|
||||||
|
|
||||||
static Si5351C Si5351 = Si5351C(&hi2c2, 26000000);
|
static Si5351C Si5351 = Si5351C(&hi2c2, 26000000);
|
||||||
static MAX2871 Source = MAX2871(&hspi1, FPGA_CS_GPIO_Port, FPGA_CS_Pin, nullptr, 0, nullptr, 0, nullptr, 0, GPIOB, GPIO_PIN_4);
|
static MAX2871 Source = MAX2871(&hspi1, FPGA_CS_GPIO_Port, FPGA_CS_Pin, nullptr, 0, nullptr, 0, nullptr, 0, GPIOA, GPIO_PIN_6);
|
||||||
static MAX2871 LO1 = MAX2871(&hspi1, FPGA_CS_GPIO_Port, FPGA_CS_Pin, nullptr, 0, nullptr, 0, nullptr, 0, GPIOB, GPIO_PIN_4);
|
static MAX2871 LO1 = MAX2871(&hspi1, FPGA_CS_GPIO_Port, FPGA_CS_Pin, nullptr, 0, nullptr, 0, nullptr, 0, GPIOA, GPIO_PIN_6);
|
||||||
|
|
||||||
// Mapping of the Si5351 channels to PLLs/Mixers
|
// Mapping of the Si5351 channels to PLLs/Mixers
|
||||||
namespace SiChannel {
|
namespace SiChannel {
|
||||||
@ -22,7 +22,7 @@ namespace SiChannel {
|
|||||||
Port2LO2 = 4,
|
Port2LO2 = 4,
|
||||||
RefLO2 = 1,
|
RefLO2 = 1,
|
||||||
Port1LO2 = 2,
|
Port1LO2 = 2,
|
||||||
LowbandSource = 1,
|
LowbandSource = 0,
|
||||||
ReferenceOut = 6,
|
ReferenceOut = 6,
|
||||||
FPGA = 7,
|
FPGA = 7,
|
||||||
};
|
};
|
||||||
|
@ -61,7 +61,7 @@
|
|||||||
#define configTICK_RATE_HZ ((TickType_t)1000)
|
#define configTICK_RATE_HZ ((TickType_t)1000)
|
||||||
#define configMAX_PRIORITIES ( 7 )
|
#define configMAX_PRIORITIES ( 7 )
|
||||||
#define configMINIMAL_STACK_SIZE ((uint16_t)128)
|
#define configMINIMAL_STACK_SIZE ((uint16_t)128)
|
||||||
#define configTOTAL_HEAP_SIZE ((size_t)4096)
|
#define configTOTAL_HEAP_SIZE ((size_t)2048)
|
||||||
#define configMAX_TASK_NAME_LEN ( 16 )
|
#define configMAX_TASK_NAME_LEN ( 16 )
|
||||||
#define configUSE_16_BIT_TICKS 0
|
#define configUSE_16_BIT_TICKS 0
|
||||||
#define configUSE_MUTEXES 1
|
#define configUSE_MUTEXES 1
|
||||||
@ -78,7 +78,7 @@ to exclude the API function. */
|
|||||||
#define INCLUDE_uxTaskPriorityGet 0
|
#define INCLUDE_uxTaskPriorityGet 0
|
||||||
#define INCLUDE_vTaskDelete 0
|
#define INCLUDE_vTaskDelete 0
|
||||||
#define INCLUDE_vTaskCleanUpResources 0
|
#define INCLUDE_vTaskCleanUpResources 0
|
||||||
#define INCLUDE_vTaskSuspend 0
|
#define INCLUDE_vTaskSuspend 1
|
||||||
#define INCLUDE_vTaskDelayUntil 0
|
#define INCLUDE_vTaskDelayUntil 0
|
||||||
#define INCLUDE_vTaskDelay 1
|
#define INCLUDE_vTaskDelay 1
|
||||||
#define INCLUDE_xTaskGetSchedulerState 1
|
#define INCLUDE_xTaskGetSchedulerState 1
|
||||||
|
@ -61,6 +61,8 @@ extern "C" {
|
|||||||
|
|
||||||
/* USER CODE END EM */
|
/* USER CODE END EM */
|
||||||
|
|
||||||
|
void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim);
|
||||||
|
|
||||||
/* Exported functions prototypes ---------------------------------------------*/
|
/* Exported functions prototypes ---------------------------------------------*/
|
||||||
void Error_Handler(void);
|
void Error_Handler(void);
|
||||||
|
|
||||||
@ -73,10 +75,10 @@ void Error_Handler(void);
|
|||||||
#define FPGA_INIT_B_GPIO_Port GPIOF
|
#define FPGA_INIT_B_GPIO_Port GPIOF
|
||||||
#define FPGA_AUX1_Pin GPIO_PIN_1
|
#define FPGA_AUX1_Pin GPIO_PIN_1
|
||||||
#define FPGA_AUX1_GPIO_Port GPIOA
|
#define FPGA_AUX1_GPIO_Port GPIOA
|
||||||
#define FPGA_AUX2_Pin GPIO_PIN_2
|
#define FPGA_AUX3_Pin GPIO_PIN_2
|
||||||
#define FPGA_AUX2_GPIO_Port GPIOA
|
|
||||||
#define FPGA_AUX3_Pin GPIO_PIN_3
|
|
||||||
#define FPGA_AUX3_GPIO_Port GPIOA
|
#define FPGA_AUX3_GPIO_Port GPIOA
|
||||||
|
#define FPGA_AUX2_Pin GPIO_PIN_3
|
||||||
|
#define FPGA_AUX2_GPIO_Port GPIOA
|
||||||
#define FPGA_CS_Pin GPIO_PIN_4
|
#define FPGA_CS_Pin GPIO_PIN_4
|
||||||
#define FPGA_CS_GPIO_Port GPIOA
|
#define FPGA_CS_GPIO_Port GPIOA
|
||||||
#define FLASH_CS_Pin GPIO_PIN_0
|
#define FLASH_CS_Pin GPIO_PIN_0
|
||||||
@ -87,8 +89,6 @@ void Error_Handler(void);
|
|||||||
#define FPGA_PROGRAM_B_GPIO_Port GPIOB
|
#define FPGA_PROGRAM_B_GPIO_Port GPIOB
|
||||||
#define EN_6V_Pin GPIO_PIN_12
|
#define EN_6V_Pin GPIO_PIN_12
|
||||||
#define EN_6V_GPIO_Port GPIOB
|
#define EN_6V_GPIO_Port GPIOB
|
||||||
#define LED1_Pin GPIO_PIN_15
|
|
||||||
#define LED1_GPIO_Port GPIOA
|
|
||||||
#define FPGA_RESET_Pin GPIO_PIN_5
|
#define FPGA_RESET_Pin GPIO_PIN_5
|
||||||
#define FPGA_RESET_GPIO_Port GPIOB
|
#define FPGA_RESET_GPIO_Port GPIOB
|
||||||
#define FPGA_DONE_Pin GPIO_PIN_9
|
#define FPGA_DONE_Pin GPIO_PIN_9
|
||||||
|
@ -55,6 +55,8 @@ void UsageFault_Handler(void);
|
|||||||
void DebugMon_Handler(void);
|
void DebugMon_Handler(void);
|
||||||
void DMA1_Channel1_IRQHandler(void);
|
void DMA1_Channel1_IRQHandler(void);
|
||||||
void DMA1_Channel2_IRQHandler(void);
|
void DMA1_Channel2_IRQHandler(void);
|
||||||
|
void DMA1_Channel3_IRQHandler(void);
|
||||||
|
void DMA1_Channel4_IRQHandler(void);
|
||||||
void USB_HP_IRQHandler(void);
|
void USB_HP_IRQHandler(void);
|
||||||
void USB_LP_IRQHandler(void);
|
void USB_LP_IRQHandler(void);
|
||||||
void TIM1_TRG_COM_TIM17_IRQHandler(void);
|
void TIM1_TRG_COM_TIM17_IRQHandler(void);
|
||||||
|
@ -90,10 +90,10 @@
|
|||||||
Definitions for timer service feature
|
Definitions for timer service feature
|
||||||
-------------------------------------------------------------------------------*/
|
-------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#define TIMX TIM2
|
#define TIMX TIM3
|
||||||
#define TIMX_CLK_ENABLE LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_TIM2)
|
#define TIMX_CLK_ENABLE LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_TIM3)
|
||||||
#define TIMX_CLK_DISABLE LL_APB1_GRP1_DisableClock(LL_APB1_GRP1_PERIPH_TIM2)
|
#define TIMX_CLK_DISABLE LL_APB1_GRP1_DisableClock(LL_APB1_GRP1_PERIPH_TIM3)
|
||||||
#define TIMX_IRQ TIM2_IRQn
|
#define TIMX_IRQ TIM3_IRQn
|
||||||
#define TIMX_CHANNEL_CH1 LL_TIM_CHANNEL_CH1
|
#define TIMX_CHANNEL_CH1 LL_TIM_CHANNEL_CH1
|
||||||
#define TIMX_CHANNEL_CH2 LL_TIM_CHANNEL_CH2
|
#define TIMX_CHANNEL_CH2 LL_TIM_CHANNEL_CH2
|
||||||
#define TIMX_CHANNEL_CH3 LL_TIM_CHANNEL_CH3
|
#define TIMX_CHANNEL_CH3 LL_TIM_CHANNEL_CH3
|
||||||
|
@ -9,7 +9,7 @@ set WORKAREASIZE 0x8000
|
|||||||
|
|
||||||
transport select "hla_swd"
|
transport select "hla_swd"
|
||||||
|
|
||||||
set CHIPNAME STM32L432KCUx
|
set CHIPNAME STM32G432CBUx
|
||||||
set BOARDNAME VNA_embedded
|
set BOARDNAME VNA_embedded
|
||||||
|
|
||||||
# CHIPNAMES state
|
# CHIPNAMES state
|
||||||
@ -33,4 +33,4 @@ set CONNECT_UNDER_RESET 1
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
source [find target/stm32l4x.cfg]
|
source [find target/stm32g4x.cfg]
|
||||||
|
@ -48,15 +48,18 @@ I2C_HandleTypeDef hi2c2;
|
|||||||
|
|
||||||
SPI_HandleTypeDef hspi1;
|
SPI_HandleTypeDef hspi1;
|
||||||
SPI_HandleTypeDef hspi2;
|
SPI_HandleTypeDef hspi2;
|
||||||
|
DMA_HandleTypeDef hdma_spi1_rx;
|
||||||
|
DMA_HandleTypeDef hdma_spi1_tx;
|
||||||
|
|
||||||
TIM_HandleTypeDef htim1;
|
TIM_HandleTypeDef htim1;
|
||||||
|
TIM_HandleTypeDef htim2;
|
||||||
|
|
||||||
UART_HandleTypeDef huart3;
|
UART_HandleTypeDef huart3;
|
||||||
|
|
||||||
PCD_HandleTypeDef hpcd_USB_FS;
|
PCD_HandleTypeDef hpcd_USB_FS;
|
||||||
|
|
||||||
osThreadId defaultTaskHandle;
|
osThreadId defaultTaskHandle;
|
||||||
uint32_t defaultTaskBuffer[ 4096 ];
|
uint32_t defaultTaskBuffer[ 1024 ];
|
||||||
osStaticThreadDef_t defaultTaskControlBlock;
|
osStaticThreadDef_t defaultTaskControlBlock;
|
||||||
/* USER CODE BEGIN PV */
|
/* USER CODE BEGIN PV */
|
||||||
|
|
||||||
@ -73,6 +76,7 @@ static void MX_UCPD1_Init(void);
|
|||||||
static void MX_USART3_UART_Init(void);
|
static void MX_USART3_UART_Init(void);
|
||||||
static void MX_USB_PCD_Init(void);
|
static void MX_USB_PCD_Init(void);
|
||||||
static void MX_TIM1_Init(void);
|
static void MX_TIM1_Init(void);
|
||||||
|
static void MX_TIM2_Init(void);
|
||||||
void StartDefaultTask(void const * argument);
|
void StartDefaultTask(void const * argument);
|
||||||
|
|
||||||
/* USER CODE BEGIN PFP */
|
/* USER CODE BEGIN PFP */
|
||||||
@ -121,6 +125,7 @@ int main(void)
|
|||||||
MX_USART3_UART_Init();
|
MX_USART3_UART_Init();
|
||||||
MX_USB_PCD_Init();
|
MX_USB_PCD_Init();
|
||||||
MX_TIM1_Init();
|
MX_TIM1_Init();
|
||||||
|
MX_TIM2_Init();
|
||||||
/* USER CODE BEGIN 2 */
|
/* USER CODE BEGIN 2 */
|
||||||
|
|
||||||
/* USER CODE END 2 */
|
/* USER CODE END 2 */
|
||||||
@ -145,7 +150,7 @@ int main(void)
|
|||||||
|
|
||||||
/* Create the thread(s) */
|
/* Create the thread(s) */
|
||||||
/* definition and creation of defaultTask */
|
/* definition and creation of defaultTask */
|
||||||
osThreadStaticDef(defaultTask, StartDefaultTask, osPriorityNormal, 0, 4096, defaultTaskBuffer, &defaultTaskControlBlock);
|
osThreadStaticDef(defaultTask, StartDefaultTask, osPriorityNormal, 0, 1024, defaultTaskBuffer, &defaultTaskControlBlock);
|
||||||
defaultTaskHandle = osThreadCreate(osThread(defaultTask), NULL);
|
defaultTaskHandle = osThreadCreate(osThread(defaultTask), NULL);
|
||||||
|
|
||||||
/* USER CODE BEGIN RTOS_THREADS */
|
/* USER CODE BEGIN RTOS_THREADS */
|
||||||
@ -221,7 +226,6 @@ void SystemClock_Config(void)
|
|||||||
{
|
{
|
||||||
Error_Handler();
|
Error_Handler();
|
||||||
}
|
}
|
||||||
HAL_RCC_MCOConfig(RCC_MCO1, RCC_MCO1SOURCE_HSI, RCC_MCODIV_1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -289,11 +293,11 @@ static void MX_SPI1_Init(void)
|
|||||||
hspi1.Instance = SPI1;
|
hspi1.Instance = SPI1;
|
||||||
hspi1.Init.Mode = SPI_MODE_MASTER;
|
hspi1.Init.Mode = SPI_MODE_MASTER;
|
||||||
hspi1.Init.Direction = SPI_DIRECTION_2LINES;
|
hspi1.Init.Direction = SPI_DIRECTION_2LINES;
|
||||||
hspi1.Init.DataSize = SPI_DATASIZE_4BIT;
|
hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
|
||||||
hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
|
hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
|
||||||
hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
|
hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
|
||||||
hspi1.Init.NSS = SPI_NSS_SOFT;
|
hspi1.Init.NSS = SPI_NSS_SOFT;
|
||||||
hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_64;
|
hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16;
|
||||||
hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
|
hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
|
||||||
hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
|
hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
|
||||||
hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
|
hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
|
||||||
@ -329,11 +333,11 @@ static void MX_SPI2_Init(void)
|
|||||||
hspi2.Instance = SPI2;
|
hspi2.Instance = SPI2;
|
||||||
hspi2.Init.Mode = SPI_MODE_MASTER;
|
hspi2.Init.Mode = SPI_MODE_MASTER;
|
||||||
hspi2.Init.Direction = SPI_DIRECTION_2LINES;
|
hspi2.Init.Direction = SPI_DIRECTION_2LINES;
|
||||||
hspi2.Init.DataSize = SPI_DATASIZE_4BIT;
|
hspi2.Init.DataSize = SPI_DATASIZE_8BIT;
|
||||||
hspi2.Init.CLKPolarity = SPI_POLARITY_LOW;
|
hspi2.Init.CLKPolarity = SPI_POLARITY_LOW;
|
||||||
hspi2.Init.CLKPhase = SPI_PHASE_1EDGE;
|
hspi2.Init.CLKPhase = SPI_PHASE_1EDGE;
|
||||||
hspi2.Init.NSS = SPI_NSS_SOFT;
|
hspi2.Init.NSS = SPI_NSS_SOFT;
|
||||||
hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_64;
|
hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16;
|
||||||
hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB;
|
hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB;
|
||||||
hspi2.Init.TIMode = SPI_TIMODE_DISABLE;
|
hspi2.Init.TIMode = SPI_TIMODE_DISABLE;
|
||||||
hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
|
hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
|
||||||
@ -404,6 +408,65 @@ static void MX_TIM1_Init(void)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief TIM2 Initialization Function
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
static void MX_TIM2_Init(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* USER CODE BEGIN TIM2_Init 0 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM2_Init 0 */
|
||||||
|
|
||||||
|
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
|
||||||
|
TIM_MasterConfigTypeDef sMasterConfig = {0};
|
||||||
|
TIM_OC_InitTypeDef sConfigOC = {0};
|
||||||
|
|
||||||
|
/* USER CODE BEGIN TIM2_Init 1 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM2_Init 1 */
|
||||||
|
htim2.Instance = TIM2;
|
||||||
|
htim2.Init.Prescaler = 143;
|
||||||
|
htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
|
||||||
|
htim2.Init.Period = 99;
|
||||||
|
htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
||||||
|
htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
||||||
|
if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
|
||||||
|
if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
if (HAL_TIM_PWM_Init(&htim2) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
|
||||||
|
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
|
||||||
|
if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigOC.OCMode = TIM_OCMODE_PWM2;
|
||||||
|
sConfigOC.Pulse = 0;
|
||||||
|
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
|
||||||
|
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
|
||||||
|
if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
/* USER CODE BEGIN TIM2_Init 2 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM2_Init 2 */
|
||||||
|
HAL_TIM_MspPostInit(&htim2);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief UCPD1 Initialization Function
|
* @brief UCPD1 Initialization Function
|
||||||
* @param None
|
* @param None
|
||||||
@ -485,7 +548,7 @@ static void MX_USART3_UART_Init(void)
|
|||||||
/* USER CODE END USART3_Init 1 */
|
/* USER CODE END USART3_Init 1 */
|
||||||
huart3.Instance = USART3;
|
huart3.Instance = USART3;
|
||||||
huart3.Init.BaudRate = 115200;
|
huart3.Init.BaudRate = 115200;
|
||||||
huart3.Init.WordLength = UART_WORDLENGTH_7B;
|
huart3.Init.WordLength = UART_WORDLENGTH_8B;
|
||||||
huart3.Init.StopBits = UART_STOPBITS_1;
|
huart3.Init.StopBits = UART_STOPBITS_1;
|
||||||
huart3.Init.Parity = UART_PARITY_NONE;
|
huart3.Init.Parity = UART_PARITY_NONE;
|
||||||
huart3.Init.Mode = UART_MODE_TX_RX;
|
huart3.Init.Mode = UART_MODE_TX_RX;
|
||||||
@ -494,7 +557,7 @@ static void MX_USART3_UART_Init(void)
|
|||||||
huart3.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
|
huart3.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
|
||||||
huart3.Init.ClockPrescaler = UART_PRESCALER_DIV1;
|
huart3.Init.ClockPrescaler = UART_PRESCALER_DIV1;
|
||||||
huart3.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
|
huart3.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
|
||||||
if (HAL_HalfDuplex_Init(&huart3) != HAL_OK)
|
if (HAL_UART_Init(&huart3) != HAL_OK)
|
||||||
{
|
{
|
||||||
Error_Handler();
|
Error_Handler();
|
||||||
}
|
}
|
||||||
@ -565,6 +628,12 @@ static void MX_DMA_Init(void)
|
|||||||
/* DMA1_Channel2_IRQn interrupt configuration */
|
/* DMA1_Channel2_IRQn interrupt configuration */
|
||||||
NVIC_SetPriority(DMA1_Channel2_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),5, 0));
|
NVIC_SetPriority(DMA1_Channel2_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),5, 0));
|
||||||
NVIC_EnableIRQ(DMA1_Channel2_IRQn);
|
NVIC_EnableIRQ(DMA1_Channel2_IRQn);
|
||||||
|
/* DMA1_Channel3_IRQn interrupt configuration */
|
||||||
|
HAL_NVIC_SetPriority(DMA1_Channel3_IRQn, 5, 0);
|
||||||
|
HAL_NVIC_EnableIRQ(DMA1_Channel3_IRQn);
|
||||||
|
/* DMA1_Channel4_IRQn interrupt configuration */
|
||||||
|
HAL_NVIC_SetPriority(DMA1_Channel4_IRQn, 5, 0);
|
||||||
|
HAL_NVIC_EnableIRQ(DMA1_Channel4_IRQn);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -579,40 +648,30 @@ static void MX_GPIO_Init(void)
|
|||||||
|
|
||||||
/* GPIO Ports Clock Enable */
|
/* GPIO Ports Clock Enable */
|
||||||
__HAL_RCC_GPIOF_CLK_ENABLE();
|
__HAL_RCC_GPIOF_CLK_ENABLE();
|
||||||
__HAL_RCC_GPIOG_CLK_ENABLE();
|
|
||||||
__HAL_RCC_GPIOA_CLK_ENABLE();
|
__HAL_RCC_GPIOA_CLK_ENABLE();
|
||||||
__HAL_RCC_GPIOC_CLK_ENABLE();
|
__HAL_RCC_GPIOC_CLK_ENABLE();
|
||||||
__HAL_RCC_GPIOB_CLK_ENABLE();
|
__HAL_RCC_GPIOB_CLK_ENABLE();
|
||||||
|
|
||||||
/*Configure GPIO pin Output Level */
|
/*Configure GPIO pin Output Level */
|
||||||
HAL_GPIO_WritePin(FPGA_INIT_B_GPIO_Port, FPGA_INIT_B_Pin, GPIO_PIN_RESET);
|
HAL_GPIO_WritePin(GPIOA, FPGA_AUX1_Pin|FPGA_AUX3_Pin|FPGA_AUX2_Pin, GPIO_PIN_RESET);
|
||||||
|
|
||||||
/*Configure GPIO pin Output Level */
|
/*Configure GPIO pin Output Level */
|
||||||
HAL_GPIO_WritePin(GPIOA, FPGA_AUX1_Pin|FPGA_AUX2_Pin|FPGA_AUX3_Pin|FPGA_CS_Pin
|
HAL_GPIO_WritePin(FPGA_CS_GPIO_Port, FPGA_CS_Pin, GPIO_PIN_SET);
|
||||||
|LED1_Pin, GPIO_PIN_RESET);
|
|
||||||
|
|
||||||
/*Configure GPIO pin Output Level */
|
/*Configure GPIO pin Output Level */
|
||||||
HAL_GPIO_WritePin(GPIOB, FLASH_CS_Pin|FPGA_PROGRAM_B_Pin|EN_6V_Pin|FPGA_RESET_Pin, GPIO_PIN_RESET);
|
HAL_GPIO_WritePin(FLASH_CS_GPIO_Port, FLASH_CS_Pin, GPIO_PIN_SET);
|
||||||
|
|
||||||
|
/*Configure GPIO pin Output Level */
|
||||||
|
HAL_GPIO_WritePin(GPIOB, FPGA_PROGRAM_B_Pin|EN_6V_Pin|FPGA_RESET_Pin, GPIO_PIN_RESET);
|
||||||
|
|
||||||
/*Configure GPIO pin : FPGA_INIT_B_Pin */
|
/*Configure GPIO pin : FPGA_INIT_B_Pin */
|
||||||
GPIO_InitStruct.Pin = FPGA_INIT_B_Pin;
|
GPIO_InitStruct.Pin = FPGA_INIT_B_Pin;
|
||||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;
|
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
||||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
|
||||||
HAL_GPIO_Init(FPGA_INIT_B_GPIO_Port, &GPIO_InitStruct);
|
HAL_GPIO_Init(FPGA_INIT_B_GPIO_Port, &GPIO_InitStruct);
|
||||||
|
|
||||||
/*Configure GPIO pin : PG10 */
|
/*Configure GPIO pins : FPGA_AUX1_Pin FPGA_AUX3_Pin FPGA_AUX2_Pin FPGA_CS_Pin */
|
||||||
GPIO_InitStruct.Pin = GPIO_PIN_10;
|
GPIO_InitStruct.Pin = FPGA_AUX1_Pin|FPGA_AUX3_Pin|FPGA_AUX2_Pin|FPGA_CS_Pin;
|
||||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
|
||||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
|
||||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
|
||||||
GPIO_InitStruct.Alternate = GPIO_AF0_MCO;
|
|
||||||
HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);
|
|
||||||
|
|
||||||
/*Configure GPIO pins : FPGA_AUX1_Pin FPGA_AUX2_Pin FPGA_AUX3_Pin FPGA_CS_Pin
|
|
||||||
LED1_Pin */
|
|
||||||
GPIO_InitStruct.Pin = FPGA_AUX1_Pin|FPGA_AUX2_Pin|FPGA_AUX3_Pin|FPGA_CS_Pin
|
|
||||||
|LED1_Pin;
|
|
||||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
|
@ -24,6 +24,9 @@
|
|||||||
/* USER CODE BEGIN Includes */
|
/* USER CODE BEGIN Includes */
|
||||||
|
|
||||||
/* USER CODE END Includes */
|
/* USER CODE END Includes */
|
||||||
|
extern DMA_HandleTypeDef hdma_spi1_rx;
|
||||||
|
|
||||||
|
extern DMA_HandleTypeDef hdma_spi1_tx;
|
||||||
|
|
||||||
/* Private typedef -----------------------------------------------------------*/
|
/* Private typedef -----------------------------------------------------------*/
|
||||||
/* USER CODE BEGIN TD */
|
/* USER CODE BEGIN TD */
|
||||||
@ -58,6 +61,8 @@
|
|||||||
/* USER CODE BEGIN 0 */
|
/* USER CODE BEGIN 0 */
|
||||||
|
|
||||||
/* USER CODE END 0 */
|
/* USER CODE END 0 */
|
||||||
|
|
||||||
|
void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim);
|
||||||
/**
|
/**
|
||||||
* Initializes the Global MSP.
|
* Initializes the Global MSP.
|
||||||
*/
|
*/
|
||||||
@ -184,6 +189,41 @@ void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi)
|
|||||||
GPIO_InitStruct.Alternate = GPIO_AF5_SPI1;
|
GPIO_InitStruct.Alternate = GPIO_AF5_SPI1;
|
||||||
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/* SPI1 DMA Init */
|
||||||
|
/* SPI1_RX Init */
|
||||||
|
hdma_spi1_rx.Instance = DMA1_Channel3;
|
||||||
|
hdma_spi1_rx.Init.Request = DMA_REQUEST_SPI1_RX;
|
||||||
|
hdma_spi1_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
|
||||||
|
hdma_spi1_rx.Init.PeriphInc = DMA_PINC_DISABLE;
|
||||||
|
hdma_spi1_rx.Init.MemInc = DMA_MINC_ENABLE;
|
||||||
|
hdma_spi1_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
|
||||||
|
hdma_spi1_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
|
||||||
|
hdma_spi1_rx.Init.Mode = DMA_NORMAL;
|
||||||
|
hdma_spi1_rx.Init.Priority = DMA_PRIORITY_LOW;
|
||||||
|
if (HAL_DMA_Init(&hdma_spi1_rx) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
__HAL_LINKDMA(hspi,hdmarx,hdma_spi1_rx);
|
||||||
|
|
||||||
|
/* SPI1_TX Init */
|
||||||
|
hdma_spi1_tx.Instance = DMA1_Channel4;
|
||||||
|
hdma_spi1_tx.Init.Request = DMA_REQUEST_SPI1_TX;
|
||||||
|
hdma_spi1_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
|
||||||
|
hdma_spi1_tx.Init.PeriphInc = DMA_PINC_DISABLE;
|
||||||
|
hdma_spi1_tx.Init.MemInc = DMA_MINC_ENABLE;
|
||||||
|
hdma_spi1_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
|
||||||
|
hdma_spi1_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
|
||||||
|
hdma_spi1_tx.Init.Mode = DMA_NORMAL;
|
||||||
|
hdma_spi1_tx.Init.Priority = DMA_PRIORITY_LOW;
|
||||||
|
if (HAL_DMA_Init(&hdma_spi1_tx) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
__HAL_LINKDMA(hspi,hdmatx,hdma_spi1_tx);
|
||||||
|
|
||||||
/* USER CODE BEGIN SPI1_MspInit 1 */
|
/* USER CODE BEGIN SPI1_MspInit 1 */
|
||||||
|
|
||||||
/* USER CODE END SPI1_MspInit 1 */
|
/* USER CODE END SPI1_MspInit 1 */
|
||||||
@ -238,6 +278,9 @@ void HAL_SPI_MspDeInit(SPI_HandleTypeDef* hspi)
|
|||||||
*/
|
*/
|
||||||
HAL_GPIO_DeInit(GPIOA, GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7);
|
HAL_GPIO_DeInit(GPIOA, GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7);
|
||||||
|
|
||||||
|
/* SPI1 DMA DeInit */
|
||||||
|
HAL_DMA_DeInit(hspi->hdmarx);
|
||||||
|
HAL_DMA_DeInit(hspi->hdmatx);
|
||||||
/* USER CODE BEGIN SPI1_MspDeInit 1 */
|
/* USER CODE BEGIN SPI1_MspDeInit 1 */
|
||||||
|
|
||||||
/* USER CODE END SPI1_MspDeInit 1 */
|
/* USER CODE END SPI1_MspDeInit 1 */
|
||||||
@ -285,9 +328,46 @@ void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base)
|
|||||||
|
|
||||||
/* USER CODE END TIM1_MspInit 1 */
|
/* USER CODE END TIM1_MspInit 1 */
|
||||||
}
|
}
|
||||||
|
else if(htim_base->Instance==TIM2)
|
||||||
|
{
|
||||||
|
/* USER CODE BEGIN TIM2_MspInit 0 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM2_MspInit 0 */
|
||||||
|
/* Peripheral clock enable */
|
||||||
|
__HAL_RCC_TIM2_CLK_ENABLE();
|
||||||
|
/* USER CODE BEGIN TIM2_MspInit 1 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM2_MspInit 1 */
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void HAL_TIM_MspPostInit(TIM_HandleTypeDef* htim)
|
||||||
|
{
|
||||||
|
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||||||
|
if(htim->Instance==TIM2)
|
||||||
|
{
|
||||||
|
/* USER CODE BEGIN TIM2_MspPostInit 0 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM2_MspPostInit 0 */
|
||||||
|
|
||||||
|
__HAL_RCC_GPIOA_CLK_ENABLE();
|
||||||
|
/**TIM2 GPIO Configuration
|
||||||
|
PA15 ------> TIM2_CH1
|
||||||
|
*/
|
||||||
|
GPIO_InitStruct.Pin = GPIO_PIN_15;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
|
GPIO_InitStruct.Alternate = GPIO_AF1_TIM2;
|
||||||
|
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/* USER CODE BEGIN TIM2_MspPostInit 1 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM2_MspPostInit 1 */
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* @brief TIM_Base MSP De-Initialization
|
* @brief TIM_Base MSP De-Initialization
|
||||||
* This function freeze the hardware resources used in this example
|
* This function freeze the hardware resources used in this example
|
||||||
@ -310,6 +390,17 @@ void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* htim_base)
|
|||||||
|
|
||||||
/* USER CODE END TIM1_MspDeInit 1 */
|
/* USER CODE END TIM1_MspDeInit 1 */
|
||||||
}
|
}
|
||||||
|
else if(htim_base->Instance==TIM2)
|
||||||
|
{
|
||||||
|
/* USER CODE BEGIN TIM2_MspDeInit 0 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM2_MspDeInit 0 */
|
||||||
|
/* Peripheral clock disable */
|
||||||
|
__HAL_RCC_TIM2_CLK_DISABLE();
|
||||||
|
/* USER CODE BEGIN TIM2_MspDeInit 1 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM2_MspDeInit 1 */
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -330,12 +421,21 @@ void HAL_UART_MspInit(UART_HandleTypeDef* huart)
|
|||||||
/* Peripheral clock enable */
|
/* Peripheral clock enable */
|
||||||
__HAL_RCC_USART3_CLK_ENABLE();
|
__HAL_RCC_USART3_CLK_ENABLE();
|
||||||
|
|
||||||
|
__HAL_RCC_GPIOB_CLK_ENABLE();
|
||||||
__HAL_RCC_GPIOC_CLK_ENABLE();
|
__HAL_RCC_GPIOC_CLK_ENABLE();
|
||||||
/**USART3 GPIO Configuration
|
/**USART3 GPIO Configuration
|
||||||
|
PB11 ------> USART3_RX
|
||||||
PC10 ------> USART3_TX
|
PC10 ------> USART3_TX
|
||||||
*/
|
*/
|
||||||
|
GPIO_InitStruct.Pin = GPIO_PIN_11;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
|
GPIO_InitStruct.Alternate = GPIO_AF7_USART3;
|
||||||
|
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||||
|
|
||||||
GPIO_InitStruct.Pin = GPIO_PIN_10;
|
GPIO_InitStruct.Pin = GPIO_PIN_10;
|
||||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
|
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
||||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
GPIO_InitStruct.Alternate = GPIO_AF7_USART3;
|
GPIO_InitStruct.Alternate = GPIO_AF7_USART3;
|
||||||
@ -365,8 +465,11 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* huart)
|
|||||||
__HAL_RCC_USART3_CLK_DISABLE();
|
__HAL_RCC_USART3_CLK_DISABLE();
|
||||||
|
|
||||||
/**USART3 GPIO Configuration
|
/**USART3 GPIO Configuration
|
||||||
|
PB11 ------> USART3_RX
|
||||||
PC10 ------> USART3_TX
|
PC10 ------> USART3_TX
|
||||||
*/
|
*/
|
||||||
|
HAL_GPIO_DeInit(GPIOB, GPIO_PIN_11);
|
||||||
|
|
||||||
HAL_GPIO_DeInit(GPIOC, GPIO_PIN_10);
|
HAL_GPIO_DeInit(GPIOC, GPIO_PIN_10);
|
||||||
|
|
||||||
/* USER CODE BEGIN USART3_MspDeInit 1 */
|
/* USER CODE BEGIN USART3_MspDeInit 1 */
|
||||||
|
@ -57,6 +57,8 @@
|
|||||||
/* USER CODE END 0 */
|
/* USER CODE END 0 */
|
||||||
|
|
||||||
/* External variables --------------------------------------------------------*/
|
/* External variables --------------------------------------------------------*/
|
||||||
|
extern DMA_HandleTypeDef hdma_spi1_rx;
|
||||||
|
extern DMA_HandleTypeDef hdma_spi1_tx;
|
||||||
extern TIM_HandleTypeDef htim1;
|
extern TIM_HandleTypeDef htim1;
|
||||||
extern PCD_HandleTypeDef hpcd_USB_FS;
|
extern PCD_HandleTypeDef hpcd_USB_FS;
|
||||||
extern TIM_HandleTypeDef htim17;
|
extern TIM_HandleTypeDef htim17;
|
||||||
@ -189,6 +191,34 @@ void DMA1_Channel2_IRQHandler(void)
|
|||||||
/* USER CODE END DMA1_Channel2_IRQn 1 */
|
/* USER CODE END DMA1_Channel2_IRQn 1 */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This function handles DMA1 channel3 global interrupt.
|
||||||
|
*/
|
||||||
|
void DMA1_Channel3_IRQHandler(void)
|
||||||
|
{
|
||||||
|
/* USER CODE BEGIN DMA1_Channel3_IRQn 0 */
|
||||||
|
|
||||||
|
/* USER CODE END DMA1_Channel3_IRQn 0 */
|
||||||
|
HAL_DMA_IRQHandler(&hdma_spi1_rx);
|
||||||
|
/* USER CODE BEGIN DMA1_Channel3_IRQn 1 */
|
||||||
|
|
||||||
|
/* USER CODE END DMA1_Channel3_IRQn 1 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This function handles DMA1 channel4 global interrupt.
|
||||||
|
*/
|
||||||
|
void DMA1_Channel4_IRQHandler(void)
|
||||||
|
{
|
||||||
|
/* USER CODE BEGIN DMA1_Channel4_IRQn 0 */
|
||||||
|
|
||||||
|
/* USER CODE END DMA1_Channel4_IRQn 0 */
|
||||||
|
HAL_DMA_IRQHandler(&hdma_spi1_tx);
|
||||||
|
/* USER CODE BEGIN DMA1_Channel4_IRQn 1 */
|
||||||
|
|
||||||
|
/* USER CODE END DMA1_Channel4_IRQn 1 */
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief This function handles USB high priority interrupt remap.
|
* @brief This function handles USB high priority interrupt remap.
|
||||||
*/
|
*/
|
||||||
|
@ -1,7 +1,43 @@
|
|||||||
#MicroXplorer Configuration settings - do not modify
|
#MicroXplorer Configuration settings - do not modify
|
||||||
Dma.Request0=UCPD1_RX
|
Dma.Request0=UCPD1_RX
|
||||||
Dma.Request1=UCPD1_TX
|
Dma.Request1=UCPD1_TX
|
||||||
Dma.RequestsNb=2
|
Dma.Request2=SPI1_RX
|
||||||
|
Dma.Request3=SPI1_TX
|
||||||
|
Dma.RequestsNb=4
|
||||||
|
Dma.SPI1_RX.2.Direction=DMA_PERIPH_TO_MEMORY
|
||||||
|
Dma.SPI1_RX.2.EventEnable=DISABLE
|
||||||
|
Dma.SPI1_RX.2.Instance=DMA1_Channel3
|
||||||
|
Dma.SPI1_RX.2.MemDataAlignment=DMA_MDATAALIGN_BYTE
|
||||||
|
Dma.SPI1_RX.2.MemInc=DMA_MINC_ENABLE
|
||||||
|
Dma.SPI1_RX.2.Mode=DMA_NORMAL
|
||||||
|
Dma.SPI1_RX.2.PeriphDataAlignment=DMA_PDATAALIGN_BYTE
|
||||||
|
Dma.SPI1_RX.2.PeriphInc=DMA_PINC_DISABLE
|
||||||
|
Dma.SPI1_RX.2.Polarity=HAL_DMAMUX_REQ_GEN_RISING
|
||||||
|
Dma.SPI1_RX.2.Priority=DMA_PRIORITY_LOW
|
||||||
|
Dma.SPI1_RX.2.RequestNumber=1
|
||||||
|
Dma.SPI1_RX.2.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,SignalID,Polarity,RequestNumber,SyncSignalID,SyncPolarity,SyncEnable,EventEnable,SyncRequestNumber
|
||||||
|
Dma.SPI1_RX.2.SignalID=NONE
|
||||||
|
Dma.SPI1_RX.2.SyncEnable=DISABLE
|
||||||
|
Dma.SPI1_RX.2.SyncPolarity=HAL_DMAMUX_SYNC_NO_EVENT
|
||||||
|
Dma.SPI1_RX.2.SyncRequestNumber=1
|
||||||
|
Dma.SPI1_RX.2.SyncSignalID=NONE
|
||||||
|
Dma.SPI1_TX.3.Direction=DMA_MEMORY_TO_PERIPH
|
||||||
|
Dma.SPI1_TX.3.EventEnable=DISABLE
|
||||||
|
Dma.SPI1_TX.3.Instance=DMA1_Channel4
|
||||||
|
Dma.SPI1_TX.3.MemDataAlignment=DMA_MDATAALIGN_BYTE
|
||||||
|
Dma.SPI1_TX.3.MemInc=DMA_MINC_ENABLE
|
||||||
|
Dma.SPI1_TX.3.Mode=DMA_NORMAL
|
||||||
|
Dma.SPI1_TX.3.PeriphDataAlignment=DMA_PDATAALIGN_BYTE
|
||||||
|
Dma.SPI1_TX.3.PeriphInc=DMA_PINC_DISABLE
|
||||||
|
Dma.SPI1_TX.3.Polarity=HAL_DMAMUX_REQ_GEN_RISING
|
||||||
|
Dma.SPI1_TX.3.Priority=DMA_PRIORITY_LOW
|
||||||
|
Dma.SPI1_TX.3.RequestNumber=1
|
||||||
|
Dma.SPI1_TX.3.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,SignalID,Polarity,RequestNumber,SyncSignalID,SyncPolarity,SyncEnable,EventEnable,SyncRequestNumber
|
||||||
|
Dma.SPI1_TX.3.SignalID=NONE
|
||||||
|
Dma.SPI1_TX.3.SyncEnable=DISABLE
|
||||||
|
Dma.SPI1_TX.3.SyncPolarity=HAL_DMAMUX_SYNC_NO_EVENT
|
||||||
|
Dma.SPI1_TX.3.SyncRequestNumber=1
|
||||||
|
Dma.SPI1_TX.3.SyncSignalID=NONE
|
||||||
Dma.UCPD1_RX.0.Direction=DMA_PERIPH_TO_MEMORY
|
Dma.UCPD1_RX.0.Direction=DMA_PERIPH_TO_MEMORY
|
||||||
Dma.UCPD1_RX.0.EventEnable=DISABLE
|
Dma.UCPD1_RX.0.EventEnable=DISABLE
|
||||||
Dma.UCPD1_RX.0.Instance=DMA1_Channel1
|
Dma.UCPD1_RX.0.Instance=DMA1_Channel1
|
||||||
@ -40,13 +76,13 @@ FREERTOS.FootprintOK=true
|
|||||||
FREERTOS.INCLUDE_uxTaskPriorityGet=0
|
FREERTOS.INCLUDE_uxTaskPriorityGet=0
|
||||||
FREERTOS.INCLUDE_vTaskDelete=0
|
FREERTOS.INCLUDE_vTaskDelete=0
|
||||||
FREERTOS.INCLUDE_vTaskPrioritySet=0
|
FREERTOS.INCLUDE_vTaskPrioritySet=0
|
||||||
FREERTOS.INCLUDE_vTaskSuspend=0
|
FREERTOS.INCLUDE_vTaskSuspend=1
|
||||||
FREERTOS.INCLUDE_xTaskResumeFromISR=0
|
FREERTOS.INCLUDE_xTaskResumeFromISR=0
|
||||||
FREERTOS.IPParameters=Tasks01,INCLUDE_vTaskDelete,INCLUDE_vTaskPrioritySet,INCLUDE_uxTaskPriorityGet,INCLUDE_xTaskResumeFromISR,INCLUDE_vTaskSuspend,MEMORY_ALLOCATION,configTOTAL_HEAP_SIZE,configENABLE_BACKWARD_COMPATIBILITY,configUSE_MUTEXES,FootprintOK
|
FREERTOS.IPParameters=Tasks01,INCLUDE_vTaskDelete,INCLUDE_vTaskPrioritySet,INCLUDE_uxTaskPriorityGet,INCLUDE_xTaskResumeFromISR,INCLUDE_vTaskSuspend,MEMORY_ALLOCATION,configTOTAL_HEAP_SIZE,configENABLE_BACKWARD_COMPATIBILITY,configUSE_MUTEXES,FootprintOK
|
||||||
FREERTOS.MEMORY_ALLOCATION=2
|
FREERTOS.MEMORY_ALLOCATION=2
|
||||||
FREERTOS.Tasks01=defaultTask,0,4096,StartDefaultTask,Default,NULL,Static,defaultTaskBuffer,defaultTaskControlBlock
|
FREERTOS.Tasks01=defaultTask,0,1024,StartDefaultTask,Default,NULL,Static,defaultTaskBuffer,defaultTaskControlBlock
|
||||||
FREERTOS.configENABLE_BACKWARD_COMPATIBILITY=1
|
FREERTOS.configENABLE_BACKWARD_COMPATIBILITY=1
|
||||||
FREERTOS.configTOTAL_HEAP_SIZE=4096
|
FREERTOS.configTOTAL_HEAP_SIZE=2048
|
||||||
FREERTOS.configUSE_MUTEXES=1
|
FREERTOS.configUSE_MUTEXES=1
|
||||||
File.Version=6
|
File.Version=6
|
||||||
I2C2.IPParameters=Timing
|
I2C2.IPParameters=Timing
|
||||||
@ -55,9 +91,10 @@ KeepUserPlacement=false
|
|||||||
Mcu.Family=STM32G4
|
Mcu.Family=STM32G4
|
||||||
Mcu.IP0=DMA
|
Mcu.IP0=DMA
|
||||||
Mcu.IP1=FREERTOS
|
Mcu.IP1=FREERTOS
|
||||||
Mcu.IP10=USART3
|
Mcu.IP10=UCPD1
|
||||||
Mcu.IP11=USB
|
Mcu.IP11=USART3
|
||||||
Mcu.IP12=USBPD
|
Mcu.IP12=USB
|
||||||
|
Mcu.IP13=USBPD
|
||||||
Mcu.IP2=I2C2
|
Mcu.IP2=I2C2
|
||||||
Mcu.IP3=NVIC
|
Mcu.IP3=NVIC
|
||||||
Mcu.IP4=RCC
|
Mcu.IP4=RCC
|
||||||
@ -65,15 +102,15 @@ Mcu.IP5=SPI1
|
|||||||
Mcu.IP6=SPI2
|
Mcu.IP6=SPI2
|
||||||
Mcu.IP7=SYS
|
Mcu.IP7=SYS
|
||||||
Mcu.IP8=TIM1
|
Mcu.IP8=TIM1
|
||||||
Mcu.IP9=UCPD1
|
Mcu.IP9=TIM2
|
||||||
Mcu.IPNb=13
|
Mcu.IPNb=14
|
||||||
Mcu.Name=STM32G431C(6-8-B)Ux
|
Mcu.Name=STM32G431C(6-8-B)Ux
|
||||||
Mcu.Package=UFQFPN48
|
Mcu.Package=UFQFPN48
|
||||||
Mcu.Pin0=PF1-OSC_OUT
|
Mcu.Pin0=PF1-OSC_OUT
|
||||||
Mcu.Pin1=PG10-NRST
|
Mcu.Pin1=PA1
|
||||||
Mcu.Pin10=PB0
|
Mcu.Pin10=PB1
|
||||||
Mcu.Pin11=PB1
|
Mcu.Pin11=PB2
|
||||||
Mcu.Pin12=PB2
|
Mcu.Pin12=PB11
|
||||||
Mcu.Pin13=PB12
|
Mcu.Pin13=PB12
|
||||||
Mcu.Pin14=PB13
|
Mcu.Pin14=PB13
|
||||||
Mcu.Pin15=PB15
|
Mcu.Pin15=PB15
|
||||||
@ -81,7 +118,7 @@ Mcu.Pin16=PA8
|
|||||||
Mcu.Pin17=PA9
|
Mcu.Pin17=PA9
|
||||||
Mcu.Pin18=PA10
|
Mcu.Pin18=PA10
|
||||||
Mcu.Pin19=PA11
|
Mcu.Pin19=PA11
|
||||||
Mcu.Pin2=PA1
|
Mcu.Pin2=PA2
|
||||||
Mcu.Pin20=PA12
|
Mcu.Pin20=PA12
|
||||||
Mcu.Pin21=PA13
|
Mcu.Pin21=PA13
|
||||||
Mcu.Pin22=PA14
|
Mcu.Pin22=PA14
|
||||||
@ -92,18 +129,19 @@ Mcu.Pin26=PB5
|
|||||||
Mcu.Pin27=PB6
|
Mcu.Pin27=PB6
|
||||||
Mcu.Pin28=PB9
|
Mcu.Pin28=PB9
|
||||||
Mcu.Pin29=VP_FREERTOS_VS_CMSIS_V1
|
Mcu.Pin29=VP_FREERTOS_VS_CMSIS_V1
|
||||||
Mcu.Pin3=PA2
|
Mcu.Pin3=PA3
|
||||||
Mcu.Pin30=VP_SYS_VS_tim17
|
Mcu.Pin30=VP_SYS_VS_tim17
|
||||||
Mcu.Pin31=VP_TIM1_VS_ClockSourceINT
|
Mcu.Pin31=VP_TIM1_VS_ClockSourceINT
|
||||||
Mcu.Pin32=VP_USBPD_VS_USBPD1
|
Mcu.Pin32=VP_TIM2_VS_ClockSourceINT
|
||||||
Mcu.Pin33=VP_USBPD_VS_usbpd_tim2
|
Mcu.Pin33=VP_USBPD_VS_USBPD1
|
||||||
Mcu.Pin4=PA3
|
Mcu.Pin34=VP_USBPD_VS_usbpd_tim3
|
||||||
Mcu.Pin5=PA4
|
Mcu.Pin4=PA4
|
||||||
Mcu.Pin6=PA5
|
Mcu.Pin5=PA5
|
||||||
Mcu.Pin7=PA6
|
Mcu.Pin6=PA6
|
||||||
Mcu.Pin8=PA7
|
Mcu.Pin7=PA7
|
||||||
Mcu.Pin9=PC4
|
Mcu.Pin8=PC4
|
||||||
Mcu.PinsNb=34
|
Mcu.Pin9=PB0
|
||||||
|
Mcu.PinsNb=35
|
||||||
Mcu.ThirdPartyNb=0
|
Mcu.ThirdPartyNb=0
|
||||||
Mcu.UserConstants=
|
Mcu.UserConstants=
|
||||||
Mcu.UserName=STM32G431CBUx
|
Mcu.UserName=STM32G431CBUx
|
||||||
@ -112,6 +150,8 @@ MxDb.Version=DB.5.0.21
|
|||||||
NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
||||||
NVIC.DMA1_Channel1_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true
|
NVIC.DMA1_Channel1_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true
|
||||||
NVIC.DMA1_Channel2_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true
|
NVIC.DMA1_Channel2_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true
|
||||||
|
NVIC.DMA1_Channel3_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true
|
||||||
|
NVIC.DMA1_Channel4_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true
|
||||||
NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
||||||
NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
||||||
NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
||||||
@ -146,21 +186,20 @@ PA13.Signal=SYS_JTMS-SWDIO
|
|||||||
PA14.Locked=true
|
PA14.Locked=true
|
||||||
PA14.Mode=Serial_Wire
|
PA14.Mode=Serial_Wire
|
||||||
PA14.Signal=SYS_JTCK-SWCLK
|
PA14.Signal=SYS_JTCK-SWCLK
|
||||||
PA15.GPIOParameters=GPIO_Label
|
|
||||||
PA15.GPIO_Label=LED1
|
|
||||||
PA15.Locked=true
|
PA15.Locked=true
|
||||||
PA15.Signal=GPIO_Output
|
PA15.Signal=S_TIM2_CH1
|
||||||
PA2.GPIOParameters=GPIO_Label
|
PA2.GPIOParameters=GPIO_Label
|
||||||
PA2.GPIO_Label=FPGA_AUX2
|
PA2.GPIO_Label=FPGA_AUX3
|
||||||
PA2.Locked=true
|
PA2.Locked=true
|
||||||
PA2.Signal=GPIO_Output
|
PA2.Signal=GPIO_Output
|
||||||
PA3.GPIOParameters=GPIO_Label
|
PA3.GPIOParameters=GPIO_Label
|
||||||
PA3.GPIO_Label=FPGA_AUX3
|
PA3.GPIO_Label=FPGA_AUX2
|
||||||
PA3.Locked=true
|
PA3.Locked=true
|
||||||
PA3.Signal=GPIO_Output
|
PA3.Signal=GPIO_Output
|
||||||
PA4.GPIOParameters=GPIO_Label
|
PA4.GPIOParameters=PinState,GPIO_Label
|
||||||
PA4.GPIO_Label=FPGA_CS
|
PA4.GPIO_Label=FPGA_CS
|
||||||
PA4.Locked=true
|
PA4.Locked=true
|
||||||
|
PA4.PinState=GPIO_PIN_SET
|
||||||
PA4.Signal=GPIO_Output
|
PA4.Signal=GPIO_Output
|
||||||
PA5.Locked=true
|
PA5.Locked=true
|
||||||
PA5.Mode=Full_Duplex_Master
|
PA5.Mode=Full_Duplex_Master
|
||||||
@ -177,14 +216,17 @@ PA8.Signal=I2C2_SDA
|
|||||||
PA9.Locked=true
|
PA9.Locked=true
|
||||||
PA9.Mode=EnableDeadBattery
|
PA9.Mode=EnableDeadBattery
|
||||||
PA9.Signal=UCPD1_DBCC1
|
PA9.Signal=UCPD1_DBCC1
|
||||||
PB0.GPIOParameters=GPIO_Label
|
PB0.GPIOParameters=PinState,GPIO_Label
|
||||||
PB0.GPIO_Label=FLASH_CS
|
PB0.GPIO_Label=FLASH_CS
|
||||||
PB0.Locked=true
|
PB0.Locked=true
|
||||||
|
PB0.PinState=GPIO_PIN_SET
|
||||||
PB0.Signal=GPIO_Output
|
PB0.Signal=GPIO_Output
|
||||||
PB1.GPIOParameters=GPIO_Label
|
PB1.GPIOParameters=GPIO_Label
|
||||||
PB1.GPIO_Label=FPGA_INTR
|
PB1.GPIO_Label=FPGA_INTR
|
||||||
PB1.Locked=true
|
PB1.Locked=true
|
||||||
PB1.Signal=GPXTI1
|
PB1.Signal=GPXTI1
|
||||||
|
PB11.Mode=Asynchronous
|
||||||
|
PB11.Signal=USART3_RX
|
||||||
PB12.GPIOParameters=GPIO_Label
|
PB12.GPIOParameters=GPIO_Label
|
||||||
PB12.GPIO_Label=EN_6V
|
PB12.GPIO_Label=EN_6V
|
||||||
PB12.Locked=true
|
PB12.Locked=true
|
||||||
@ -214,7 +256,7 @@ PB9.GPIO_Label=FPGA_DONE
|
|||||||
PB9.Locked=true
|
PB9.Locked=true
|
||||||
PB9.Signal=GPIO_Input
|
PB9.Signal=GPIO_Input
|
||||||
PC10.Locked=true
|
PC10.Locked=true
|
||||||
PC10.Mode=Half_duplex(single_wire_mode)
|
PC10.Mode=Asynchronous
|
||||||
PC10.Signal=USART3_TX
|
PC10.Signal=USART3_TX
|
||||||
PC4.Locked=true
|
PC4.Locked=true
|
||||||
PC4.Mode=I2C
|
PC4.Mode=I2C
|
||||||
@ -227,14 +269,10 @@ PCC.Seq0=0
|
|||||||
PCC.Series=STM32G4
|
PCC.Series=STM32G4
|
||||||
PCC.Temperature=25
|
PCC.Temperature=25
|
||||||
PCC.Vdd=3.0
|
PCC.Vdd=3.0
|
||||||
PF1-OSC_OUT.GPIOParameters=GPIO_Label,GPIO_ModeDefaultOutputPP
|
PF1-OSC_OUT.GPIOParameters=GPIO_Label
|
||||||
PF1-OSC_OUT.GPIO_Label=FPGA_INIT_B
|
PF1-OSC_OUT.GPIO_Label=FPGA_INIT_B
|
||||||
PF1-OSC_OUT.GPIO_ModeDefaultOutputPP=GPIO_MODE_OUTPUT_OD
|
|
||||||
PF1-OSC_OUT.Locked=true
|
PF1-OSC_OUT.Locked=true
|
||||||
PF1-OSC_OUT.Signal=GPIO_Output
|
PF1-OSC_OUT.Signal=GPIO_Input
|
||||||
PG10-NRST.Locked=true
|
|
||||||
PG10-NRST.Mode=Clock-out
|
|
||||||
PG10-NRST.Signal=RCC_MCO
|
|
||||||
PinOutPanel.RotationAngle=0
|
PinOutPanel.RotationAngle=0
|
||||||
ProjectManager.AskForMigrate=true
|
ProjectManager.AskForMigrate=true
|
||||||
ProjectManager.BackupPrevious=false
|
ProjectManager.BackupPrevious=false
|
||||||
@ -262,7 +300,7 @@ ProjectManager.StackSize=0x400
|
|||||||
ProjectManager.TargetToolchain=SW4STM32
|
ProjectManager.TargetToolchain=SW4STM32
|
||||||
ProjectManager.ToolChainLocation=
|
ProjectManager.ToolChainLocation=
|
||||||
ProjectManager.UnderRoot=true
|
ProjectManager.UnderRoot=true
|
||||||
ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-MX_DMA_Init-DMA-false-HAL-true,3-SystemClock_Config-RCC-false-HAL-false,4-MX_I2C2_Init-I2C2-false-HAL-true,5-MX_SPI1_Init-SPI1-false-HAL-true,6-MX_SPI2_Init-SPI2-false-HAL-true,7-MX_UCPD1_Init-UCPD1-false-LL-true,8-MX_USART3_UART_Init-USART3-false-HAL-true,9-MX_USB_PCD_Init-USB-false-HAL-true,10-MX_USBPD_Init-USBPD-false-HAL-true
|
ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-MX_DMA_Init-DMA-false-HAL-true,3-SystemClock_Config-RCC-false-HAL-false,4-MX_I2C2_Init-I2C2-false-HAL-true,5-MX_SPI1_Init-SPI1-false-HAL-true,6-MX_SPI2_Init-SPI2-false-HAL-true,7-MX_UCPD1_Init-UCPD1-false-LL-true,8-MX_USART3_UART_Init-USART3-false-HAL-true,9-MX_USB_PCD_Init-USB-false-HAL-true,10-MX_USBPD_Init-USBPD-false-HAL-true,11-MX_TIM1_Init-TIM1-false-HAL-true,12-MX_TIM2_Init-TIM2-false-HAL-true
|
||||||
RCC.ADC12Freq_Value=144000000
|
RCC.ADC12Freq_Value=144000000
|
||||||
RCC.AHBFreq_Value=144000000
|
RCC.AHBFreq_Value=144000000
|
||||||
RCC.APB1Freq_Value=144000000
|
RCC.APB1Freq_Value=144000000
|
||||||
@ -310,31 +348,43 @@ RCC.VCOInputFreq_Value=8000000
|
|||||||
RCC.VCOOutputFreq_Value=288000000
|
RCC.VCOOutputFreq_Value=288000000
|
||||||
SH.GPXTI1.0=GPIO_EXTI1
|
SH.GPXTI1.0=GPIO_EXTI1
|
||||||
SH.GPXTI1.ConfNb=1
|
SH.GPXTI1.ConfNb=1
|
||||||
SPI1.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_64
|
SH.S_TIM2_CH1.0=TIM2_CH1,PWM Generation1 CH1
|
||||||
SPI1.CalculateBaudRate=2.25 MBits/s
|
SH.S_TIM2_CH1.ConfNb=1
|
||||||
|
SPI1.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_16
|
||||||
|
SPI1.CalculateBaudRate=9.0 MBits/s
|
||||||
|
SPI1.DataSize=SPI_DATASIZE_8BIT
|
||||||
SPI1.Direction=SPI_DIRECTION_2LINES
|
SPI1.Direction=SPI_DIRECTION_2LINES
|
||||||
SPI1.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,BaudRatePrescaler
|
SPI1.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,BaudRatePrescaler,DataSize
|
||||||
SPI1.Mode=SPI_MODE_MASTER
|
SPI1.Mode=SPI_MODE_MASTER
|
||||||
SPI1.VirtualType=VM_MASTER
|
SPI1.VirtualType=VM_MASTER
|
||||||
SPI2.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_64
|
SPI2.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_16
|
||||||
SPI2.CalculateBaudRate=2.25 MBits/s
|
SPI2.CalculateBaudRate=9.0 MBits/s
|
||||||
|
SPI2.DataSize=SPI_DATASIZE_8BIT
|
||||||
SPI2.Direction=SPI_DIRECTION_2LINES
|
SPI2.Direction=SPI_DIRECTION_2LINES
|
||||||
SPI2.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,BaudRatePrescaler
|
SPI2.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,BaudRatePrescaler,DataSize
|
||||||
SPI2.Mode=SPI_MODE_MASTER
|
SPI2.Mode=SPI_MODE_MASTER
|
||||||
SPI2.VirtualType=VM_MASTER
|
SPI2.VirtualType=VM_MASTER
|
||||||
TIM1.IPParameters=Prescaler,PeriodNoDither
|
TIM1.IPParameters=Prescaler,PeriodNoDither
|
||||||
TIM1.PeriodNoDither=65535
|
TIM1.PeriodNoDither=65535
|
||||||
TIM1.Prescaler=143
|
TIM1.Prescaler=143
|
||||||
USART3.IPParameters=VirtualMode-Half_duplex(single_wire_mode)
|
TIM2.Channel-PWM\ Generation1\ CH1=TIM_CHANNEL_1
|
||||||
USART3.VirtualMode-Half_duplex(single_wire_mode)=VM_ASYNC
|
TIM2.IPParameters=Channel-PWM Generation1 CH1,Prescaler,PeriodNoDither,OCMode_PWM-PWM Generation1 CH1
|
||||||
|
TIM2.OCMode_PWM-PWM\ Generation1\ CH1=TIM_OCMODE_PWM2
|
||||||
|
TIM2.PeriodNoDither=99
|
||||||
|
TIM2.Prescaler=143
|
||||||
|
USART3.IPParameters=WordLength,VirtualMode-Asynchronous
|
||||||
|
USART3.VirtualMode-Asynchronous=VM_ASYNC
|
||||||
|
USART3.WordLength=WORDLENGTH_8B
|
||||||
VP_FREERTOS_VS_CMSIS_V1.Mode=CMSIS_V1
|
VP_FREERTOS_VS_CMSIS_V1.Mode=CMSIS_V1
|
||||||
VP_FREERTOS_VS_CMSIS_V1.Signal=FREERTOS_VS_CMSIS_V1
|
VP_FREERTOS_VS_CMSIS_V1.Signal=FREERTOS_VS_CMSIS_V1
|
||||||
VP_SYS_VS_tim17.Mode=TIM17
|
VP_SYS_VS_tim17.Mode=TIM17
|
||||||
VP_SYS_VS_tim17.Signal=SYS_VS_tim17
|
VP_SYS_VS_tim17.Signal=SYS_VS_tim17
|
||||||
VP_TIM1_VS_ClockSourceINT.Mode=Internal
|
VP_TIM1_VS_ClockSourceINT.Mode=Internal
|
||||||
VP_TIM1_VS_ClockSourceINT.Signal=TIM1_VS_ClockSourceINT
|
VP_TIM1_VS_ClockSourceINT.Signal=TIM1_VS_ClockSourceINT
|
||||||
|
VP_TIM2_VS_ClockSourceINT.Mode=Internal
|
||||||
|
VP_TIM2_VS_ClockSourceINT.Signal=TIM2_VS_ClockSourceINT
|
||||||
VP_USBPD_VS_USBPD1.Mode=USBPD_P0
|
VP_USBPD_VS_USBPD1.Mode=USBPD_P0
|
||||||
VP_USBPD_VS_USBPD1.Signal=USBPD_VS_USBPD1
|
VP_USBPD_VS_USBPD1.Signal=USBPD_VS_USBPD1
|
||||||
VP_USBPD_VS_usbpd_tim2.Mode=TIM2
|
VP_USBPD_VS_usbpd_tim3.Mode=TIM3
|
||||||
VP_USBPD_VS_usbpd_tim2.Signal=USBPD_VS_usbpd_tim2
|
VP_USBPD_VS_usbpd_tim3.Signal=USBPD_VS_usbpd_tim3
|
||||||
board=custom
|
board=custom
|
||||||
|
Loading…
Reference in New Issue
Block a user