Разные модификации CPU188? |
Ответить | Страница <12 |
Автор | |
Новичок Присоединился: 05 Август 2004 Категория: Russian Federation Online Status: Offline Публикации: 6 |
Опубликовано: 13 Август 2007 10:18 |
Справка: Разряды 12..14 регистра флагов в процессорах типа: до 286 включительно - Reserved, Read Only; 386 и старше - Read/Write. Суть проблемы: В микроконтроллере RDC R8830 разряды 12..14 – Read/Write. Это зачастую приводит к ошибке определения пользовательской программой типа процессора. Startup-код пользовательской программы может содержать подпрограмму определения типа процессора, которая, определив что разряды 12..14 регистра флагов процессора не являются Read Only, вправе решить что тип процессора – 386+ и предложить ему выполнить неизвестную ему команду. Это неминуемо приведет к возникновению исключения «unused opcode». Данная проблема проявляется, в частности, при работе программ, созданных с помощью трансляторов Borland C++ 4.5, Borland C++ 5.02 и Turbo Pascal 7.0. Проявление ошибки: Пользовательская программа, без проблем работающая с микроконтроллером Am188ES при запуске на плате с микроконтроллером R8830 приводит к появлению сообщение «unused opcode» после чего система «зависает». Решение проблеммы: Компания Fastwel разработала программу FIX4RDC, которая вносит необходимые исправления в Startup-код. Программу FIX4RDC необходимо однократно запустить после создания исполняемого файла пользовательской программы указав имя исполняемого файла в качестве параметра в коммандной строке. FIX4RDC версии 1.1 протестирована на взаимодействие с программами, созданными с помощью помощью трансляторов Borland C++ 4.5, Borland C++ 5.02 и Turbo Pascal 7.0. Если данная проблема не решается с помощью FIX4RDC, пользователю необходимо по электронной почте выслать исполяемый файл своей программы на адрес Fastwel указав транслятор, с помощью которого исполняемый файл был создан – специалисты компании решат проблему в кратчайшие сроки. В ближайшее время FIX4RDC будет встроена в операционную систему FDOS 6.22.
Суть проблемы: После сброса процессора, вызванного срабатыванием сторожевого таймера в Регистре Состояния последнего разряд 13 должен быть установлен в 1. Микроконтроллер RDC R8830 не выполняет этого требования. Решение проблеммы: Проблема решена программно в BIOS версии 3.6. Пользовательская программа может получить значение Регистра Состояния в регистре AX с помощью программного прерывания 17h (AX=0FD00h, DX=0FFFFh).
Суть проблемы: В процессорах семейства x86 выполнение команды присваивания значения стековому сегментному регистру SS (MOV SS, reg; MOV SS, mem; POP SS) вызывает запрет прерываний на время выполнения следующей команды, которая, логично, обычно является командой присвоения значения регистру указателя стека – SP. Это свойство процессоров x86 избавляет пользователя от необходимости при переназначении стека явного запрета прерываний с помощью команды CLI. К сожалению, процессор микроконтроллера R8830 лишен этого свойства. Решение проблеммы: 1. В пользовательской программе переназначение стека выполнять только при запрещенных прерываниях, например MOV AX, STACKSEG CLI MOV SS, AX MOV SP, STACKPTR STI 2. Не использовать операционную систему FDOS 6.22, если она датирована до 14 сентября 2005 года. Первой версией операционной системы FDOS 6.22, разрешенной для использования с микроконтроллеров R8830, считать версию, датированную 14 сентября 2005 года.
Суть проблемы: Номиналы внутренних подтягивающих сопротивлений входов прерываний у Am188ES и R8830 различны. Из этого следует что номиналы внешних подтягивающих сопротивлений входов прерываний для Am188ES и R8830 также должны отличаться. После перевода на процессор R8830 осенью 2004 года на модули CPU188-5 продолжали устанавливаться подтягивающие сопротивления «старого» номинала – 10 кОм. На этих модулях может наблюдаться нестабильность работы по прерываниям с внешними модулями ввода/вывода, в частности, с UNIO-xx. Решение проблеммы: Начиная с лета 2005 года на модули CPU-188 процессор R8830 устанавливается вместе с подтягивающими сопротивлениями «нового» номинала – 2,2 или 3,3 кОм. Пользователям, которые преобрели модули CPU-188, выпущенные в период с осени 2004 года по лето 2005 года с микроконтроллером R8830 и подтягивающими сопротивлениями 10 кОм, следует обратиться в компанию Fastwel для замены этих сопротивлений. Определить номинал сопротивлений можно по маркировке резисторной сборки RP31 на лицевой стороне платы контроллера CPU-188. «Старые» резисторы имеют маркировку 103, «новые» - 222 или 332.
Суть проблемы: При перезапуске микроконтроллера Am188ES, вызванном срабатыванием сторожевого таймера или передачей управления на адрес 0FFFF0h конфигурация схем XILINX сохраняется. Это позволяет сократить общее время загрузки системы и обеспечить сохранение состояния выходов UNIO-48, входящего в состав модуля CPU188-5. В аналогичной ситуации с микроконтроллером R8830, конфигурация схем XILINX не сохраняется. Решение проблеммы: Смириться. |
|
Сергей Брехов
инженер BIOS Fastwel |
|
Новичок Присоединился: 06 Ноябрь 2003 Категория: Russian Federation Online Status: Offline Публикации: 10 |
|
Пришлось-таки покопаться в недрах RTKernel (как чувствовал). А причина оказалось в том, что, похоже, нашлась еще одна (шестая) несовместимость R8830 с Am188. Во всяком случае, ни одна из описанных Сергеем Бреховым вроде не подходит. Напишу о результатах, может кому пригодится. Суть в следующем. У меня используется обмен с COM-портами по DMA, причем как на прием, так и на передачу. На Am188 все это нормально работало. А на R8830 прием работает, а на передачу получались периодические пропуски символов (иногда через один, иногда по несколько символов сразу). Причем все это проявляется только тогда, когда вызывается RTKernel'овская функция RTKDelay(), т.е. если просто сделать задержку с помощью пустого цикла, то все работает нормально, но только зачем нужет такой DMA. После ряда экспериментов выяснилось, что проблема проявляется только тогда, когда управление получает RTKernel'овская функция IdleTaskCode, то есть пустая задача, вызываемая тогда, когда других активных задач уже нет. А в этой IdleTaskCode есть оператор, который в случае, если тип процессора 0 (т.е. обычный 8086) выполняет ассемблерную инструкцию HLT, т.е. переводит процессор в режим ожидания до следующего прерывания. Зачем так сделано, до конца не понятно (видимо, в целях экономии электроэнергии), но после того, как HLT был убран и вместо него просто выполняется замкнутый цикл с RTKScheduler(), все заработало нормально. Отсюда вывод - в программах для R8830 команду HLT лучше не использовать: она портит обмен по DMA, а может и еще что-нибудь. |
|
С уважением,
Лопаткин Б.В. |
|
Новичок Присоединился: 05 Август 2004 Категория: Russian Federation Online Status: Offline Публикации: 6 |
|
Большое спасибо за очень ценную информацию. Я с такой проблемой пока не сталкивался. |
|
Сергей Брехов
инженер BIOS Fastwel |
|
Ответить | Страница <12 |
Переход на форум | Права доступа на форуме Вы не можете публиковать новые темы в этом форуме Вы не можете отвечать на сообщения в этом форуме Вы не можете удалять Ваши сообщения на этом форуме Вы не можете редактировать Ваши сообщения на этом форуме Вы не можете создавать голосования на этом форуме Вы не можете выражать своё мнение в голосованиях на этом форуме |