Освоение микроконтроллеров Microchip семейства PIC32
После отхода от ступора, возникшего при первом знакомстве с указанными контроллерами пришло, наконец, здоровое понимание: надо изучать. Ну куда еще пойти за свежей инфой? Разумеется в интернет. После продолжительных поисков надежда найти более-менее нормальное описалово на русском языке постепенно растаяла. Это значит — открываем руководство 61132B на английском языке и со словариком (или как там еще) начинаем читать. Мало того, что надо «въехать» в философию ядра М4К, так ведь это все еще и на техническом английском… ну, да, ладно, достаточно лирики ))
Как же все это изучить? С чего начать?
Первое, что мне очень помогло, это установка среды разработки MPLAB и многократная прогонка в нем примеров программ на Ассемблере. Через два вечера я начал уже угадывать знакомые команды, вполне понимая суть их работы. Ну и пусть пока не знаю все их возможности, но сохранить, сложить, загрузить и перейти по адресу я уже могу. Начало положено.
Этап воторой . Возник вопрос (много вопросов) каков адрес регистра PC после сброса контроллера? Нашел в том же описании. Потом проверил в симуляторе — все верно! При нажатии кнопочки «сброс» РС всегда устанавливается на 0хBFC00000 (а физический адрес 0х1FC00000, с этими системами адресации тоже, кстати, пока полной ясности еще нет).
Сегодня (дата написания этой заметки) наконец разобрался с регистрами. С основными и те что называются «CP0 Registers». Опять же помог симулятор. А точнее дизассемблер. Например: есть регистр по адресу или по номеру 12. А внем аж 4 регистра! Ну как я, выбирая 12 регистр, могу выбрать еще один из четырех? Все просто. Нашел в дизассемблере (в листинге тестовой программы) команду MFC0 K0, Status, код которой 0х401A6000. Потом просто взял и изменил этот код на 0х401A6001. И что же? Тут же дизассемблер мне показал команду MFC0 K0, IntCtl. А это как раз и есть второй из 4 регистров под номером 12! Теоретически, если создать дамп памяти с кодами от 0х00000000 до 0хFFFFFFFF, и затем его дизассемблировать, мы получим все возможные комбинации всех ассемблерных команд данного ядра.
Это значит, что метод освоения с закреплением знаний сразу практическим навыком найден. Ну конечно весь код я и не собираюсь дизассемблировать, но некоторые непонятные из описания команды всеже придется не только дизассемблировать, но и погонять усердно в симуляторе просматривая все регистры и все адреса в памяти, на которые эти регистры могут ссылаться.
Теперь работаем над прерываниями. Они бывают простые и многовекторные. Мне нужен был адрес вектора прерывания при старте и я его только что нашел. Нашел и регистр, в котором содержится адрес вектора прерывания, а точнее исключения. Все гораздо сложнее, чем мне казалось первое время, но согласно недоказуемой теоретически, но многократно подтвержденной практикой теории — если долго над чем то трудиться, то все сложное становится простым, и все, что необходимо познать, со временем познается. Главное не забывать, что эти контроллеры тоже люди разрабатывали, хотя и программисты, но все равно люди! )))
Комментарии
если не секрет, почему именно микрочип а не скажем TI или analog devices ? там камушки есть намного достойнее.
Хотя и прошло много времени, отвечу на вопрос:
этот контроллер на тот момент мне показался весьма дружественным. Пайка простым паяльником, среда разработки сразу ставится, программатор не дорогой, памяти RAM много, тактовая частота высокая, DMA встроенный, все прерывания отрабатываются четкое количество тактов, что не маловажно для приложений чувствительны ко времени тактов. Компания вполне серьезная Microchip. Много было факторов, опыта мало, что-то надо было выбирать. Возможно, сегодня бы посмотрел уже на BGA камушки с АRМ-ом внутри. Прогресс не стоит на месте.