ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
19 мая
113598 Топик полностью
Ксения (21.02.2008 10:35, просмотров: 222) ответил Ксения на 90USB647 и его причуды
Вопрос 1-ый: Прерывание по INT6 работает, а по INT7 - нет. Почему это может быть? Совершенно непонятно почему, т.к. программирование полностью аналогично. Сигналы видны, даже если просто часто читать порт-B (PINB): прыгают единички в старшем разряде и рядом с ним. Сюда у меня выведены DRDY от обоих АЦП. При ожидании бита в порту все работает, а по прерыванию работать могу только с тем АЦП, чей DRDY подключен к ITN6, т.к. INT7 не срабатывает. Не помогает и замена условия генерации прерывания по спадающему фронту, на возрастающий или изменяющийся - INT6_interrupt что-то считает, а в INT7_interrupt ни разу не заходит. Может быть порт PB7 используется по умолчанию в каком-то альтернативном режиме (OC0A/OC1C), который нужно как-то отменить? Из-за того, что в порту изменения битов вижу, грешить на электронику не могу, только на программирование. // Port configuration PORTB = 0; DDRB = 0x30; // PORTB_DIRECTION, out: MOSI, SCK // Port interrupts EICRB = (1<<ISC61) | (1<<ISC71); // прерывание по спаду EIFR = (1<<INTF6) | (1<<INTF7); EIMSK = (1<<INT6) | (1<<INT7); ..... #pragma vector=INT6_vect __interrupt void INT6_interrupt() { Flag |= 1; } #pragma vector=INT7_vect __interrupt void INT7_interrupt() { Flag |= 2; } Примечание: Flag используется для отслеживания возникновения прерываний.