misyachniy 0 Четверг в 15:06 Опубликовано Четверг в 15:06 · Жалоба Написал и отладил работу по SPI и UART для BF561 отдельно по каждой периферии. Попробовал вместе - не работает. Работает или одна или вторая периферия в зависимости от порядка инициализации. В начале отключил ядро А и начал проверять на какой вектор можно посадить прерывание SPI. Для этого написал макросы типа такого: Quote #define SPI_IRQ_ENABLE() *pSICB_IMASK0 |= SIC_MASK(27) #define SPI_IRQ_DISABLE() *pSICB_IMASK0 &= ~SIC_MASK(27); *pILAT |= EVT_IVG14; #define SPI_IRQ_CONFIG(x) {register_handler(ik_ivg14, x); *pILAT |= EVT_IVG14; *pSICB_IAR3 = Peripheral_IVG(27,14);} Работают вектора EVT_IVG10, 11, 12, 14. Не работате 15-ый, а 13 у меня под watchdog. Для UART пробовал 8 и 10 вектора. До этого ПО работало только с прерываниями по PPI и SPORT которые расположены по умолчанию на EVT_IVG8 и EVT_IVG9. В документации не нашел что регистры SICB_IMASK0 и pSICB_IAR3 доступны только в режиме супервизора. Неработоспособность проявляется в отсутсвии хотя-бы одного вызова прерывания. Дополнение Прочитал документацию, стало понятно, что процессор находится в режиме супервизора. Вызов прерывания 15 рекомендуемым методом перехода на пользовательскую программу. При старте программы IPEND как раз показывает что прерывание 15 отложено. То есть ничего не мешает программированию любых регистров, а прерывания конфликтуют. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_4afc_ 25 Пятница в 12:11 Опубликовано Пятница в 12:11 · Жалоба Работали одновременно уарт, спорт х2, ппи х2 по прерываниям лет 15 назад. На двух ядрах. Разбирайтесь... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться