【发布时间】:2015-02-23 11:45:41
【问题描述】:
我试图在传输窗口期间在 SPI 总线上发送多个字节。最初,当输入脉冲为高电平时,我从闪存 ADC 获取数据,然后计算其平均值并在 SPI 总线上按顺序传输每个平均值。我让 SPI vhdl 模块工作,当我尝试发送单个字节时它能够发送数据,但是当我尝试发送超过 1 个字节时它就不起作用了。 MOSI线上有逻辑0,SS线一直为高。这是我尝试发送多个字节的部分。
process(SPITrig, Clock, TX_Done, data_count, average2A_s, average2B_s)
begin
case data_count is
when 1 =>
TX_Data <= average2A_s;
when 2 =>
TX_Data <= average2B_s;
when others => TX_Data <= "0101010101010101";
end case;
end process;
process(SPIBusy, SPITrig, SPI_Clock_base, data_count, TX_Start)
begin
if falling_edge(SPITrig) then
SPIBusy <= '1';
TX_Start <= '0';
data_count <= 0;
delay_counter <= 0;
end if;
if rising_edge(SPI_Clock_base) and SPIBusy = '1' then
if data_count < 3 then
if delay_counter = 128 then
TX_Start <= not TX_Start;
delay_counter <= 0;
elsif delay_counter < 128 then
delay_counter <= delay_counter + 1;
end if;
elsif data_count >= 3 then
TX_Start <= '0';
delay_counter <= 0;
SPIBusy <= '0';
end if;
end if;
if rising_edge(TX_Start) then
data_count <= data_count + 1;
end if;
end process;
它在模拟中运行良好,但在硬件上没有输出。需要您帮助找出问题所在。 PS:这是我的第一个FPGA项目,所以我的代码可能效率不高。 我还附上了 ISIM 屏幕截图。
tx = TX Done pin
trig = TX Start ping
c1 = data count
注意:当平均输出可用并使用内部信号“SPITRig”触发时,SPI 传输序列开始。
【问题讨论】: