Вот - но правда на асме.

______________________
При переходе на СИ для переключения страниц и записи/чтения
регистров используются вот эти функции (описание в мануале на компилятор)
sysreg_write ();
io_space_write();
io_space_read();
______________________
// ax0,ar,af и.т.д внутренние регистры adsp
______________________
/************************************************************************/
out_data_spi_8:
IOPG = SPI0_Controller_Page; // sysreg_write ()
AR = IO(RDBR0); /* Чтение SPI0 буфера приема */ // io_space_read()
AR = b#0000000001010110;
IO(SPIST0) = AR; /* ОЧИСТКА ОШИБОК */ // io_space_write()
AR = b#1111111100000000;
IO(SPIFLG0) = AR; /* запись во Flag Register */
ar = b#0101000000001001; /*длина слова 8 бит*/
IO(SPICTL0) = AR;
IO(TDBR0) = ax0;
ax0=0;
out_data_spi_8_1:
mx0=IOPG;
ar=IO(SPIST0);
ax1=ar;
ay0=0x9;
ar=ar and ay0; //поразрядное AND
ay0=1;
af=ar-ay0;
af=pass af; // pass команда для определения знака регистра
if eq jump out_data_spi_8_2; // если af == 0 то переход на метку
ar=ax0-1;
ax0=ar;
ar=pass ar;
if ne jump out_data_spi_8_1; // если ar != 0 то переход на метку
nop;
jump out_data_spi_8_3; // безусловный переход
out_data_spi_8_2:
nop;
out_data_spi_8_3:
rts;
/************************************************************************/
in_data_spi_8:
IOPG = SPI0_Controller_Page;
AR = b#0000000001010110;
IO(SPIST0) = AR; /* ОЧИСТКА ОШИБОК */
ar = b#0101000000001000; /*длина слова 8 бит прием*/
IO(SPICTL0) = AR;
AR = IO(RDBR0); /* Чтение SPI0 буфера приема */
in_data_spi_8_1:
ar=IO(SPIST0);
ax0=ar;
ay0=0x30;
ar=ar and ay0;
af=pass ar;
if eq jump in_data_spi_8_1;
AR = IO(RDBR0); /* Чтение SPI0 буфера приема */
rts;
/************************************************************************/
end_spi:
IOPG = SPI0_Controller_Page;
ax0 = b#0001000100001001;
IO(SPICTL0) = ax0;
AR = IO(RDBR0); /* Чтение SPI0 буфера приема */
IOPG = General_Purpose_IO;
AX0 = 0x0004; /* Turn ON FLAGS 0, 1, 2, and 3,4,5,6,7 */
IO(FLAGS) = AX0;
rts;