Спойлер
Код: Выделить всё
while (PD_IDR_bit.IDR2 == 0) //Пока PD2=0 выполняем цикл...
{
PD_DDR_bit.DDR2 = 1; // Ножка PD2 конфигурируется на вывод (переключение бита ввода на вывод)
PD_CR1_bit.C12 = 1; // Выход типа Push-pull
PD_CR2_bit.C22 = 1; // Скорость переключения - до 10 МГц.
PD_ODR_bit.ODR2 = 0; //Подтянем пин к земле (работает!)
PC_ODR_bit.ODR7 = 0; //Подтянем пин к земле - светодиод горит
PC_ODR_bit.ODR4 = 0; //Подтянем пин к земле - светодиод горит
DelayLong(); // ждем 3 секунды
PD_DDR_bit.DDR2 = 0; // Ножка PD2 конфигурируется на ввод (переключение бита вывода на ввод)
PD_CR1_bit.C12 = 0; // Выход плавающий - установлен подтягивающий резистор
PD_CR2_bit.C22 = 1; // Прерывание ВКЛючено
EXTI_CR1_bit.PDIS = 0; //Прерывание по спаду напряжения (задний фронт)
DelayShort(); // ждем 1,5 секунды
}
Спасибо всем за советы.
P.S. При изучении мануала по STM8S возник еще вопрос по прерываниям, конкретно интересует, возможно ли программно выставить приоритет по отдельным пинам порта? Т.е. в STM8L это сделать можно, для STM8S, как я понял, приоритет можно выставить только для всего порта? Например "средний приоритет" для порта D будет выглядеть так?:
Спойлер
Код: Выделить всё
ITC_SPR2_bit.VECT6SPR = 0; //средний приоритет порт D
методика поиска:
идем в датшит к мк (в моем случае STM8S103F2P6), смотрим таблицу:
"Interrupt vector mapping"
6 | EXTI3 | Port D external interrupts
стр.42
далее идем в RM0016:
"Software priority register x (ITC_SPRx)"
стр.68
вектору 6 соответствует:
ITC_SPR2 VECT6SPR[1:0]
правильно ли я понял методику нахождения бита?
