[an error occurred while processing this directive]
|
//==============================================================================
// Настроить работу SPI0
// void setup_spi0();
.global _setup_spi0;
_setup_spi0:
iopg = SPI0_Controller_Page;
ar = 4; // SCK0 - 80MHz/8 = 10 MHz
io(SPIBAUD0) = ar;
ar = SPI0SEL1 | SPI0VALUE1;
io(SPIFLG0) = ar;
rts;//==============================================================================
// Запись байта через SPI
// void spi_write(char);
.global _spi_write;
_spi_write:
iopg = SPI0_Controller_Page;
ar = SPE | MSTR | CPOL | CPHA | GM | SZ | TIMOD(TM_WRITE);
io(SPICTL0) = ar;
ar = dm(i4 + 1);
io(TDBR0) = ar;
nop;
nop;
nop;
swb_l0: ar = io(SPIST0);
ar = ar and 1;
if eq jump swb_l0;
rts;//==============================================================================
// Чтение байта через SPI
// char spi_read_byte();
.global _spi_read_byte;
_spi_read_byte:
iopg = SPI0_Controller_Page;
ar = SPE | MSTR | CPOL | CPHA | GM | SZ | TIMOD(TM_READ);
io(SPICTL0) = ar;
ar = io(RDBR0); // Запуск приёма
nop;
nop;
nop;
srb_l0: ar = io(SPIST0);
ar = ar and 0x20;
if eq jump srb_l0; // если буфер приема пуст возврат
ax1 = io(RDBRS0); // Без запуска нового чтения
rts;
E-mail: info@telesys.ru