Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Работа с последовательным каналом по опросу
Простейшим из способов организации последовательного обмена является управление им из прикладной программы. То есть, если требуется переслать байт, то: 1) сбрасывается TI; 2) в SBUF записывается нужный байт данных; и 3) ожидается, пока TI не будет установлен контроллером. С приемом в этом случае дело обстоит сложнее: нужно постоянно проверять флаг RI и, если он установлен, то читать принятый байт из SBUF и сбрасывать RI. Такой способ удобен, когда разработчику четко известно, когда произойдет прием данных и когда его завершать. Неудобен он тем, что время выполнения самой программы напрямую зависит от скорости обмена. Чем медленнее скорость, тем дольше по времени цикл ожидания готовности к приему/посылке следующего байта. При программировании последовательного канала под Windows, нужного состояния сигналов RTS и DTR можно добиться с помощью двух строк кода на языке С: EscapeCommFunction(Port, SETRTS); EscapeCommFunction(Port, CLRDTR); Порядок работы. В процессе работы необходимо изучить: 1. Аппаратный блок последовательного канала · Структурную схему контроллера последовательного канала · Схему включения UART · Страничную организацию памяти 2. ПЛИС МАХ · Регистры ПЛИС 3. Схему подключения светодиодов В процессе работы необходимо: 1. Разработать архитектуру драйверов и системы тестирования. 2. Написать тесты драйвера светодиодов. 3. Написать тест драйвера последовательного канала. 4. Написать драйвер светодиодов. 5. Написать драйвер UART (функции чтения и записи байтов, опрос готовности приемника) без использования прерываний. 6. Отладить и протестировать драйверы. Содержание отчета Отчет должен содержать: 1. Описание архитектуры · используемой аппаратной части, · драйверов, · системы тестирования, 2. Исходные тексты драйверов. 3. Исходные тексты тестов. 5. Результаты тестирования. 4. Контрольные вопросы 1. Какие проблемы могут возникнуть при обращении к ПЛИС? 2. Какой режим работы последовательного канала используется в SDK-1.1 при связи с ПК? 3. Нарисуйте на бумаге формат посылки для байтов 0x14, 0x25, 0хА0. 4. Какой режим работы последовательного канала ADuC812 вы использовали? 5. Что такое гальваническая изоляция? 6. Что такое оптрон? 7. Как работает схема гальванической развязки последовательного канала в SDK-1.1?
8. Какой бит устанавливается в логическую 1 при приеме байта по последовательному каналу? 9. Когда устанавливается бит TI, после записи байта в SBUF или после его передачи? 10. Нарисуйте регистровую модель контроллера последовательного канала ADuC812. Лабораторная работа 10 Цель работы: Изучить архитектуру таймеров и систему прерываний лабораторного стенда SDK-1.1, принципы обработки прерываний, разработать программы для управления системным таймером, просимулировать программы в отладчике-симуляторе, загрузить и выполнить программы на лабораторном стенде. Методические указания к работе. Таймеры ADUC812 имеет три 16-битных таймера/счетчика общего назначения: Таймер 0, Таймер 1, Таймер 2. Каждый таймер состоит из двух 8-битных регистров ТНх и TLх (х обозначает 0, 1 или 2 для таймеров 0,1 и2). Все три таймера могут быть настроены на работу в режимах "таймер" или "счетчик". В режиме "таймер" регистр инкрементируется каждый машинный цикл. То есть можно рассматривать это как подсчет машинных циклов. Так как машинный цикл состоит из 12 перепадов напряжения на тактовом входе контроллера, частота инкрементирования таймера в 12 раз меньше тактовой частоты контроллера. В режиме "счетчик" регистр инкрементируется по перепаду 1→0 на соответствующем входе Т0, Т1 или Т2. В этом режиме внешний вывод опрашивается в S5P2 каждого машинного цикла. Когда опрос показывает высокий уровень в одном цикле и низкий уровень в следующем, счетчик увеличивается на 1. Новое значение появляется в счетчике в S3P1 машинного цикла следующего за тем, в котором был обнаружен перепад. Так как требуется два машинных цикла на обнаружение перепада 1→0, максимальная частота инкремента счетчика равна 1/24 тактовой частоты контроллера. Нет никаких ограничений на поведение сигнала на входе, но для обеспечения того, чтобы он был хотя бы раз опрошен, необходимо продержать его значение не менее одного машинного цикла. Для конфигурации и контроля Таймеров используются 3 SFR регистра: TMOD и TCON для управления таймерами 1 и О, T2CON для управления таймером 2.
Таймеры 0 и 1 Каждый таймер состоит из двух 8 битных регистров. В зависимости от режима работы они могут использоваться как независимые регистры, или как один объединенный 16 битный регистр. ТНО и ТНО (SFR адреса 8Ch и 8Ah) -старший и младший байты Таймера 0. ТН1 и ТН1 (SFR адреса 8Dh и 8Bh) -старший и младший байты Таймера 1. Формат регистра режимов таймеров 0 и 1 TMOD (SFR адрес 89h) приведен в таблице 1. Таблица 1. Регистр режима таймеров TMOD.
Формат регистра управления таймерами 0 и 1 TCON (SFR адрес 88h) приведен в таблице 2. В таблице описаны только 4 старших бита, младшие в управлении таймером не участвуют. Таблица 2. Регистр управления таймерами TCON.
1.1.2. Режимы работы таймеров/счетчиков 0 и1. Режим 0 (13-битный Таймер/Счетчик) образует 8 битный таймер/счетчик с предварительным делителем на 32 на входе. Регистр таймера конфигурируется как 13 битный регистр. Когда регистр таймера переполняется (переходит из состояния все 1ко всем 0), то выставляется флаг переполнения таймера TFx, который может использоваться для организации запроса на прерывание. Счет разрешается при TRx=l и либо GATE=0 либо INTx=l. Установка GATE=1 приводит к тому, что работа таймера контролируется внешним входом INTx, что позволяет измерять длительность импульса. 13-битный регистр состоит из всех восьми бит ТНх и младших пяти регистра TLx. Старшие три бита TLx не определены и должны быть игнорированы. Установка бита запуска TRx не очищает регистр.
Рис. 1. Работа таймера в режиме 0. Работа таймера в этом режиме 1 (16-битный Таймер/Счетчик)аналогична работе в режиме 1, за исключением регистра таймера который теперь конфигурируется как 16-разрядный регистр. Рис. 2. Работа таймера в режиме 1. В режиме 2 таймер представляет собой 8-битный регистр с автоматической перезагрузкой. Когда TLx переполняется, не только устанавливается флаг TFx, но в TLx загружается значение ТНх, записанное туда ранее программно. Значение ТНх при перезагрузке сохраняется. Рис. 3. Работа таймера в режиме 2. Работа в режиме 3 (два независимых 8-битных Таймера/Счетчика) имеет отличия для таймеров 0 и 1. Таймер 1 в этом режиме просто останавливает свой счет. Тот же эффект даст установка TR1=0. Таймер 0 в режиме 3 устанавливает TL0 и ТН0 как два разных счетчика. Счетчик на базе TL0 использует биты управления таймера 0: С/Т, GATE, TR0, INT0, TF0. ТН0 зафиксирован в режиме таймера (считающего машинные циклы), и использует для управления биты TR1 и TF1 таймера 1. Таким образом, прерывание от переполнения регистра ТН0, будет обозначено флагом TF1. Рис. 4. Работа таймера в режиме 3. Режим 3 предназначен для приложений, которым нужен дополнительный 8-битный таймер или счетчик. Когда таймер 0 работает в режиме 3, таймер 1 может быть выключен установкой его в режим 3, или может быть оставлен включенным для использования в качестве генератора тактовых импульсов для последовательного интерфейса, или для любого приложения, которому не требуется прерывание именно от таймера 1. Таймер 2 Регистры данных Таймера 2 представлены регистрами: ТН2 и TL2 (SFR адреса CDh и CCh) – старший и младший бит данных. RCAP2H и RCAP2L (SFR адреса CBh и СAh). Режимы работы таймера 2 Работа Таймера 2 в 16 битный режиме с автоперезагрузкой зависит от значения бита EXEN2. Если EXEN2=0, Таймер 2 при переполнении устанавливает флаг TF2, и перезагружает свои регистры TL2 и ТН2 числами из регистров RCAP2L и RCAP2H, загруженными туда ранее программно. Если EXEN2=1, Таймер 2, кроме выше перечисленных функций, дополнительно производит автоперезагрузку и в случае появления отрицательного перехода 1→0 на внешнем входе Т2ЕХ.
Таблица 3. Регистр управления Таймером 2 T2CON (SFR адрес – С8h)
Таблица 4. Режимы работы таймера 2.
Рис. 5. Работа таймера 2 в режиме с автоперезагрузкой. Рис. 6. Работа таймера 2 в режиме захвата. Работа Таймера 2 в 16 битныйом режиме захвата также зависит от бита EXEN2 регистра TCON. Если EXEN2=0, то Таймер 2 работает как 16-битный таймер/счетчик, при переполнении которого устанавливается флаг TF2, который можно использовать для организации запроса на прерывание. Если EXEN2=1, то Таймер 2, кроме перечисленных функций, дополнительно в случае появления отрицательного перепада на внешнем входе Т2ЕХ, произведет захват содержимого регистров TL2 и ТН2 в регистры RACP2L и RACP2H, соответственно. Кроме этого установится флаг EXF2, который может сгенерировать прерывание. В этом режиме тактирования последовательного порта Таймер 2 используется для тактирования передачи последовательного порта, и флаг прерывания TF2 не устанавливается. Однако флаг EXF2 устанавливается, и может вызывать прерывания. В этом режиме его можно использовать в качестве еще одного источника внешних прерываний. Система прерываний Процессор AduC812 поддерживает 9 источников прерываний с 2 уровнями приоритета. Конфигурирование и контроль системы прерываний осуществляется через 3 регистра специальных функций.
Регистр IE (SFR адрес A8h) – регистр разрешения прерываний. Все биты регистра устанавливаются и сбрасываются пользователем. Таблица 7. Регистр разрешения прерываний IE.
Регистр IP (SFR адрес B8h) – регистр приоритета прерываний. Все биты регистра устанавливаются и сбрасываются пользователем. После включения питания по умолчанию содержит 00h. Назначение битов регистра приведены в таблице 8. Таблица 8. Регистр приоритета прерываний IР.
Регистр IE2 (SFR адрес A9h) – регистр разрешения вторичных прерываний (таблица 9). Таблица 9. Регистр разрешения вторичных прерываний IE2.
Регистры разрешения прерывания устанавливаются пользова-телем для разрешения прерываний от отдельных источников, в то время как регистры установки приоритета устанавливаются пользователем для выбора одного из двух уровней приоритета для каждого прерывания. Прерывание с высоким уровнем приоритета может прерывать обслужи-вание прерывания с низким уровнем приоритета, а если прерывания с разными уровнями придут одновременно, то прерывание с высоким при-оритетом будет обслужено первым. Обслуживание прерывание не мо-жет быть прервано прерыванием с таким же уровнем приоритета. Если два прерывания с одинаковым уровнем приоритета пришли одновремен-но, то порядок их обслуживания определяется с помощью таблицы 10. Таблицы 10. Приоритет источников прерываний.
Когда происходит прерывание, значение программного счетчика помещается в стек, а в сам счетчик загружается адрес соответствующего вектора прерывания. Адреса векторов указаны в таблице 11. Прерывания ADuC812 имеют вектора в диапазоне 0003h-0043h, которые попадают в область младших адресов памяти программ. Это пространство соответствует 8Кб (0000h-2000h) Flash-памяти. Следовательно, пользователь, не имеющий возможности записи во Flash-память, не может подставить свои процедуры обработки прерываний (точнее, команды перехода к процедурам) по адресам, соответствующим векторам прерываний.
Таблица 11. Вектора прерываний ADuC812.
Проблема использования прерываний в пользовательских программах решается следующим образом: 1. По адресам (0003h-0043h) векторов прерываний во Flash-памяти SDK-1.1 располагаются команды переходов на вектора пользовательской таблицы, размещенной в адресах 2003h-2043h. 2. По адресам векторов пользовательской таблицы пользователем указываются команды переходов на процедуры обработки прерываний. Переадресацию векторов прерываний иллюстрирует рис. 7. Следующая программа – пример помещения собственного вектора в пользовательскую таблицу. Пусть требуется осуществить обработку прерываний от таймера 0 (прерывание 0Bh). В программу на языке Си можно вставить следующий код: void T0_ISR(void) interrupt 1 // Обработчик прерывания от // таймера 0 { // Действия, выполняемые обработчиком } void SetVector(unsigned char xdata * Address, void * Vector) // Функция, устанавливающая вектор прерывания Vector по //адресу Address { unsigned short xdata * TmpVector;/ Временная переменная *Address = 0x02; //Первым байтом по указанному адресу за- //писывается код команды передачи управления ljmp,равный 02h TmpVector = (unsigned short xdata *) (Address+1); *TmpVector = (unsigned short) Vector; // Далее записывается адрес перехода Vector // Таким образом, по адресу Address теперь располагается // инструкция ljmp Vector }
void main(void) { /*…*/ SetVector(0x200В, (void *) TO_ISR); // Установка вектора в // пользовательской таблице ЕТ0=1; ЕА=1; // Разрешение прерываний от таймера 0 }
Рис. 7. Использование прерываний в SDK-1.1. Компилятор С51 предоставляет возможность вызова функций при возникновении прерываний. Это дает возможность написания на языке С собственных обработчиков прерываний. Однако следует соблюдать осторожность в выборе номера прерывания и банка регистров. Компилятор автоматически генерирует вектор прерывания, а также код входа в обработчик и выхода из него. Атрибут interrupt, включенный в объявление функции, указывает на то, что данная функция обрабатывает прерывание. Кроме того, можно указать банк регистров для данного прерывания с помощью атрибута using. unsigned int interruptcnt; unsigned char second; void timerO (void) interrupt 1 using 2 { if (++interruptcnt == 4000) { /* count to 4000 */ second++; /* second counter */ interruptcnt =0; /* clear int counter */ } } Порядок работы. В процессе работы необходимо изучить: 1. Архитектуру аппаратных блоков: · Таймеры микроконтроллера. · Систему прерываний микроконтроллера. 2. Принципы обработки прерываний. В процессе работы необходимо: 1. Разработать архитектуру драйвера системного таймера и системы тестирования. 2. Написать тесты драйвера. 3. Написать драйвер системного таймера. 4. Отладить и протестировать драйвер. Содержание отчета Отчет должен содержать: 1. Описание архитектуры · используемой аппаратной части, · драйверов, · системы тестирования, 2. Исходные тексты драйверов. 3. Исходные тексты тестов. 5. Результаты тестирования. Лабораторная работа 11 Цель работы: Изучить архитектуру клавиатуры в составе лабораторного стенда SDK-1.1. Разработать и написать драйвер клавиатуры для учебно-лабораторного стенда SDK-1.1. Написать тестовую программу для разработанного драйвера, которая выполняет определенную задачу.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2017-01-25; просмотров: 323; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.206.13.112 (0.108 с.) |