misyachniy 0 August 22, 2024 Posted August 22, 2024 · Report post Написал и отладил работу по 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 отложено. То есть ничего не мешает программированию любых регистров, а прерывания конфликтуют. Quote Share this post Link to post Share on other sites More sharing options...
_4afc_ 39 August 23, 2024 Posted August 23, 2024 · Report post Работали одновременно уарт, спорт х2, ппи х2 по прерываниям лет 15 назад. На двух ядрах. Разбирайтесь... Quote Share this post Link to post Share on other sites More sharing options...