Перейти к содержанию
    

MasterAlexei

Участник
  • Постов

    5
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о MasterAlexei

  • День рождения 10.12.1976

Контакты

  • Сайт
    Array
  • ICQ
    Array

Информация

  • Город
    Array
  1. STM32F103x

    Итак. Кто тут хочет систик в себя впихнуть! У меня есть решение!!!!!!! определяем регистр: #define System_Handler_Control_And_State_Register (*((volatile uint32_t *) 0xE000ED24 )) Он вдоках описан. В нем есть замечательный бит, который говорит нам, что сейчас работает какое то прерывание. В нашем случае о систике нам рассказывает бит 11. Вот. Как заходим в преррывание, и если оно долгое - мы убираем этот бит: System_Handler_Control_And_State_Register &= ~( 1 << 11 ); Но по выходу из этого долгого прервания надо незабыть обязательно поставить этот бит на место!!! Этот бит говорит ядру не только то, что сейчас работаеть какое то прерывание, но и то, что стек надо бы почистить. Если не убрать - стек кончится и все встанет. Я это дело попробовал - все работает!!! И прерывание само себя прерывает, так сказать. Во как.
  2. STM32F103x

    А можно поинтересоваться, на сколько сложным оказался враппер? Можно ли глянуть на него. Не то, чтобы мы его будем применять, но надо одному утырку доказать, что именно эта схема, которая приведена в вашем посте про вложенные прерывания - не работает. Картинка с осциллографа его почему-то не устраивает, и он говорит, что оно должно работать, хотя я наблюдаю именно то, что прерывание само себя прервать не может, и, собственно, не прерывает, а просто висит. Он придумал тут систему шедулера и активно ее проталкивает. Правда все задачи у него запускаются как раз из systick таймера. Это систик таймер настроен на 1 милисекунду, и есть задачи - 1 мс, 10 мс. Причем он утверждает, что задачи в 10 мс могут и выполняться все 10 мс. и что те задачи, что в 1 мс тоже будут запускаться, прерывая 10милисекундные задачи. Но вот каким образом, если все эти задачи стартуют именно ИЗ обработчика систик. Я состряпал простенький тест, который симулирует такое поведение. И благополучно завесил весь контроллер. Если не затруднит, можно глянуть на враппер?
  3. STM32F103x

    Да я собственно не переносил, а делал по аналогии. Видимо придется так и делать - прерывание разрешать именно при непосредственной передаче. Но тогда возникает логичный вопрос - почему в режиме SLAVE при абсолютно одинаковой инициализации всех прерываний такого не происходит? Там я тоже оба прерывания разрешаю.
  4. STM32F103x

    У меня разрешены TXE и RXNE прерывания. Но ведь я же еще ничего не записывал в TX буфер. На других контроллерах (например AVR от Амел) оно так и работает: пока ничего не запишешь, никаких прерываний не будет. А тут с какого испугу пришло прерывание, если в переферию ничего не писали? Может я через полчаса только записать чего нить захочу туда.
  5. STM32F103x

    Приветствую! Программлю SPI на STM32F103RBT6. До этого сделал SPI в режиме SLAVE через прерывания, все работало прекрасно. Решил переключить в MASTER, так как только NVIC настраиваю, так он падает в SPI прерывание и там и остается на всю оставшуюся жисть до ресета. Причем в прерывании выставленны как RX так и TX флаги, типа он и принял чего то и послал чего то. Пины все выставил вроде как правильно. NSS пин выставил в Софт-режим. На сам пин вроде вывел 1. По идее, проц даже и не должен попадать в прерывание, как только проинициализируешь СПИ переферию. А он даже не вылазит от туда. Ни у кого такого не было случаем?
×
×
  • Создать...