AFON//Радиотехник
AHDL · проект 18/50

SPI-мастер

Режим 0, 8 бит, обмен по стробу

Задача

Реализовать ведущий узел SPI: выдавать SCK, вдвигать данные в MOSI и одновременно принимать MISO.

Тип схемы и среда

Последовательная схема: сдвиговый регистр обмена, генерация SCK, счётчик полутактов.

Алгоритм работы

По start грузятся данные и счётчик 16 полутактов. Каждый строб tick инвертирует SCK; на одном фронте бит выдвигается в MOSI, на другом — вдвигается MISO.

Код на AHDL

ahdl_18_spi_master.tdf↓ скачать .tdf
% Проект 18: SPI-мастер, режим 0, 8 бит %
SUBDESIGN ahdl_18_spi_master
(
    clk, clrn : INPUT;
    start     : INPUT;
    tick      : INPUT;   % темп SCK %
    din[7..0] : INPUT;
    miso      : INPUT;
    sck       : OUTPUT;
    mosi      : OUTPUT;
    dout[7..0]: OUTPUT;
    busy      : OUTPUT;
)
VARIABLE
    shifter[7..0] : DFF;
    cnt[4..0]     : DFF;
    active        : DFF;
    sckr          : DFF;
BEGIN
    shifter[].clk = clk; shifter[].clrn = clrn;
    cnt[].clk     = clk; cnt[].clrn     = clrn;
    active.clk    = clk; active.clrn    = clrn;
    sckr.clk      = clk; sckr.clrn      = clrn;

    IF !active.q THEN
        sckr.d = GND;
        IF start THEN
            active.d = VCC;
            shifter[].d = din[];
            cnt[].d = 16;
        ELSE
            active.d = GND;
            shifter[].d = shifter[].q;
            cnt[].d = cnt[].q;
        END IF;
    ELSIF tick THEN
        sckr.d = !sckr.q;
        cnt[].d = cnt[].q - 1;
        IF !sckr.q THEN
            shifter[].d = (shifter[6..0].q, miso);
        ELSE
            shifter[].d = shifter[].q;
        END IF;
        IF cnt[].q == 1 THEN active.d = GND; ELSE active.d = VCC; END IF;
    ELSE
        sckr.d = sckr.q;
        shifter[].d = shifter[].q;
        cnt[].d = cnt[].q;
        active.d = active.q;
    END IF;

    sck    = sckr.q;
    mosi   = shifter[7].q;
    dout[] = shifter[].q;
    busy   = active.q;
END;

Пояснения

Режим 0 (CPOL=0, CPHA=0): выборка по нарастающему, смена по спадающему фронту SCK. Дуплексный обмен идёт в одном сдвиговом регистре.

Инструменты и справочники по теме

📦 help-user.ru — скупка и ремонт компьютерной техники. Продать ноутбук, ПК, комплектующие — help-user.ru.

Что дальше

Скачайте ahdl_18_spi_master.tdf, создайте проект в MAX+PLUS II или Quartus, назначьте выводы под свою плату и скомпилируйте. Остальные 49 разработок — в разделе проектов на AHDL.