нашел в чем была проблема. вроде шина заработала. но осталась одна проблема. сделал свой модуль, с которым ниос общается через параллельную шину.
команда IOWR_16DIRECT(0x10013202, 0, 0x4); работает нормально. в нужное место прописывается 4. пробую так *((alt_u16*)0x10013202) = 4; - не работает. шагаю в дебаге по сишным строчкам... прохожу строчку *((alt_u16*)0x10013202) = 4;, все работает. снимаю точки останова запускаю программу - обращение через указатель не работает. посмотрел дизассемблер нашел разницу
вот как компилятор скомпилировал код IOWR_16DIRECT(0x10013202, 0, 0x4);
Код
//IOWR_16DIRECT(0x10013202, 0, 0x4);
800bb70: 00c40074 movhi r3,4097
800bb74: 18cc8084 addi r3,r3,12802
800bb78: 00800104 movi r2,4
800bb7c: 1880002d sthio r2,0(r3)
а вот как скомпилировал *((alt_u16*)0x10013202) = 4;
Код
//*((alt_u16*)0x10013202) = 4;
800b634: 00c40074 movhi r3,4097
800b638: 18cc8084 addi r3,r3,12802
800b63c: 00800104 movi r2,4
800b640: 1880000d sth r2,0(r3)
разница в последней команде. с sthio - работает, а с sth. посмотрел в чем разница этих команд:
Цитата
sthio These operations load/store byte and half-word data from/to peripherals without caching or buffering.
как сделать чтоб обращение через указатель к нужным областям памяти не кешировались и не буферезировались, т.е. чтоб компилятор при обращении через указатель использовал команду sthio?