Ну сейчас меня с
гавн съедят, и всё же... Товарищ
scifi Вы где? Вы были правы! Правда так я и не допетрил кой чего, а именно... Следующий код обработчика прерывания, как я уже писал результата не даёт:
Код
void DACC_Handler( void )
{
DACC -> DACC_ISR; // читаем регистр что бы сбросить флаг прерывания
DACC -> DACC_CDR = DACC_CDR_DATA(dout[n]); //передаём данные в в цап
{n = n + 1;} // увеличиваем индекс элемента массива
DACC -> DACC_IDR = DACC_IDR_TXRDY; // отключаем прерывание в переферии
return;
}
не зависимо от того какая строчка "n = n + 1" или "DACC -> DACC_CDR = DACC_CDR_DATA(dout[n]);" идёт раньше. Но стоит одну из этих строк (или их обе - не важно) поставить после строки "DACC -> DACC_IDR = DACC_IDR_TXRDY;" как всё чудным образом начинает работать. Т.е.
Код
void DACC_Handler( void )
{
DACC -> DACC_ISR;
DACC -> DACC_IDR = DACC_IDR_TXRDY;
[u]DACC -> DACC_CDR = DACC_CDR_DATA(dout[n]);[/u]
[u]{n = n + 1;}[/u]
return;
}
или
Код
DACC -> DACC_ISR;
[u]{n = n + 1;}[/u]
DACC -> DACC_IDR = DACC_IDR_TXRDY;
[u]DACC -> DACC_CDR = DACC_CDR_DATA(dout[n]);[/u]
return;
или
Код
DACC -> DACC_ISR;
[u]DACC -> DACC_CDR = DACC_CDR_DATA(dout[n]);[/u]
DACC -> DACC_IDR = DACC_IDR_TXRDY;
[u]{n = n + 1;}[/u]
return;
Из - за чего это происходит?