Вообще-то для UARTов в хmege есть очень эффективный механизм DMA, но ни одна из представленных сишных реализаций его не использует. Во всяком случае, при передаче, когда длина буфера заранее известна, применять DMA очень эффективно и красиво, и не нужно никаких прерываний. При приеме посложнее. Но если протокол предусматривает передачу длины посылки, я по прерыванию RxC побайтно беру начало, пока не доберусь до длины, а потом настраиваю DMA на прием указанного числа байтов и реагирую только на прерывание окончания DMA. Но это на ассемблере
По IO - да. Плюс к тому есть виртуальные порты, которые можно присвоить к любым портам, подключенным к внешним ногам, и обращаться к ним традиционно, через IN,OUT,CBI,SBI и т.д. А так, в общем случае до назначения виртуальных портов, внешние порты не входят в пространство IO И это на ассемблере
Сообщение отредактировал V_G - Jan 24 2012, 07:12
|