Использовать intrinsics для tiny у меня не получилось...
Но можно пойти таким путём.
Создаем и подключием к проекту asm модуль my_spm.s90 сл. содержания (это конечно не оптимальный вариант, но работать можно):
Код
#define SPMCR 0x37
#define SREG 0x3F
PUBLIC DoSpm
RSEG CODE:CODE:NOROOT(1)
DoSpm
PUSH R31
PUSH R30
MOVW R31:R30, R17:R16
MOVW R17:R16, R1:R0 // R17:16 pair used as temp space
MOVW R1:R0, R19:R18
CLI
OUT SPMCR, R20
SPM
SEI
MOVW R1:R0, R17:R16 // restore R1:R0 pair
POP R30
POP R31
RET
END DoSpm
В основной программе объявляем функцию DoSpm:
Код
extern int DoSpm( int addr, int data, char spmcsr_code);
addr - помещается в Z
data - в R1-R0
spmcr_code - в SPMCSR (0x37 I/O space для t13)
и выполняется команда SPM
функция будет возвращать "мусор" (содержимое R1:R0 до вызова функции), на результат не смотрите.
Ну а дальше уже по даташиту делайте то, что вам нужно.