Исходные данные - msp430f1611 rev.A
В SLAU049E на рисунке 8−3 "DMA Single Transfer State Diagram" имеется переход в "Idle" состояние по условию
[ENNMI = 1 AND NMI event] OR [DMALEVEL = 1 AND Trigger = 0]
Т.е. при DMACTL1_bit.ENNMI = 1 и возникновении NMI прерывания устанавливается DMA0CTL_bit.DMAABORT = 1 и мы должны попасть в "Idle" состояние
В режиме Burst-Block Transfers все так и происходит, но в режиме Single Transfer DMA0CTL_bit.DMAABORT всегда равен 0 и в "Idle" состояние я попасть не могу.
Что это может быть? В разделе "8.2.4 Stopping DMA Transfers" четко написано, что ДМА должно останавливаться и в Single Transfer режиме также. Кто работал с данным режимом, подскажите, может я что то не так понимаю или с проциком что то не так?
Кроме того подозрительной кажется вторая половина условия попадания в в "Idle" состояние
[ENNMI = 1 AND NMI event] OR [DMALEVEL = 1 AND Trigger = 0]
Т.е. когда DMA запущен с DMALEVEL = 1 и запускающий Trigger снимается (например автоматом сбрасывается какой либо флаг прерывания) мы опять должны попадать в "Idle" и DMA0CTL_bit.DMAABORT должен быть установлен. Но его может установить только NMI прерывание.
Похоже на глюк в документации.
|