12.07.2015 Views

Взлом GSM - Xakep Online

Взлом GSM - Xakep Online

Взлом GSM - Xakep Online

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

frikingМой домашний роутер от ASUS. На чипе от Broadcom с сердцем armФайл-сервер на arm9 под линухом (266 МГц, 32 Мб ОЗУ)Ты можешь спросить: «Что это за указатели на непонятные структуры?» ТакAtmel предлагает нам работать с периферией. Для каждого узла контроллеразаведена структура, описывающая все регистры, которые к нему относятся.Такой подход позволяет достаточно легко использовать один и тот жекод с однотипными узлами процессора (например, с любым из трех каналовтаймера или одним из двух блоков USART). Также это позволяет с минимумисправлений перетаскивать код с одного на другой контроллер. Все этиструктуры и дефайны для работы с ними описаны в файлах AT91SAM7Sхх.Enable, Disable, etcЕсли ты уже заглянул в файл с описаниями структур, то могзаметить, что многие регистры имеют по три «отражения» Enable(Set), Disable (Clear) и Status. При этом первые два регистра —только для записи, последний — для чтения. Для чего это сделано?Рассмотрим на примере регистров управления портом в/в PIO_SODR, PIO_CODR и PIO_ODSR. При записи в регистр PIO_SODR(Set Output Data Register) числа 3 ножки 0 и 1 примут состояниелог 1. Остальные ножки не изменят своего состояния. Каждый битэтого регистра отвечает за свою ножку. Если мы пишем в этот бит1, то соответствующая ножка принимает состояние лог 1, если 0— не меняет своего состояния. Если после этого записать число 2 врегистр PIO_CODR (Clear Output Data Register), то ножка 1 приметсостояние лог 0, а ножка 0 останется в прежнем состоянии. Вовремя всех этих действий регистр PIO_ODSR (Output Data StatusRegister) отражает текущее состояние порта в/в.На первый взгляд, это кажется излишним, ведь можно использоватьодин регистр и конструкции вроде PIO |= 3; и PIO &= ~2.Но такие операции не являются атомарными. Это значит, что,например, операция PIO |= 3 состоит из трех машинных команд:загрузить значение из регистра периферии в регистр общегоназначения; логическая операция ИЛИ; загрузка значенияобратно в регистр периферии. Если в процессе выполненияэтих трех операций произойдет прерывание или переключениеконтекста в ОС, и участок кода, получивший управление, тожезахочет установить/сбросить биты регистра PIO, то после возвратауправления, ранее записанные значения могут быть затертыпоследней машинной командой загрузки в регистр PIO. Именнопоэтому для многих регистров введены такие вот «двойники».Обращаться к ним следует обычной операцией присвоения. Этогарантирует, что в какой бы момент не произошло прерываниеили смена контекста, ни одно «воздействие» на регистр не будетпропущено.xàêåð 07 /115/ 08h в зависимости от конкретного контроллера. Контроллеры at91sam7s64,at91sam7s128, at91sam7s256 и at91sam7s512 отличаются только объемамипамяти, поэтому и файлы описания периферии совпадают.Первая строчка (p_pPMCPMC_PCER = 1

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!