Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Ход работы. Задание: организовать переключение светодиодов по алгоритму заданному преподавателем





Задание: организовать переключение светодиодов по алгоритму заданному преподавателем.

Особенности проекта:

– инкремент переменной «counter» каждые 100 ms;

– использование программной задержки для получения интервала в 100 ms;

– отображение 4–х битов переменной на LED LD1(GPIO9), LD2(GPIO11), LD3(GPIO34) и LD4(GPIO49) периферийной платы.

Файлы проекта:

– C – исходный файл “Lab5_1.c”;

– стартовый ассемблерный файл: “DSP2833x_CodeStartBranch.asm”;

– файл определения регистров “DSP2833x_GlobalVariableDefs.c”;

– командные файлы редактора связей “28335_RAM_lnk.cmd” и “DSP2833x_Headers_nonBIOS.cmd”;

– библиотека реального времени “rts2800_fpu32.lib”.

Файл «DSP2833x_GlobalVariableDefs.c».

Определение глобальных переменных для всей памяти отображающей периферийные регистры, базирующееся на внутренней структуре.

Основной файл заголовка “DSP2833x_Device.h”.

Энергозависимая структура GPIO_DATA_REGS GpioDataRegs.

Эта структурная переменная объединяет все регистры, которые принадлежат этой периферийной группе, напримерGpioDataRegs.GPADAT.

Каждый регистр объявлен как union чтобы допустить 32–битный – («all») и побитный доступ («bit»), например:

 

GpioDataRegs.GPADAT.bit.GPIO9 = 1;

GpioDataRegs.GPADAT.all = 0x0000FFFF

 

Шаги, которые должны быть сделаны:

– добавить “DSP2833x_GlobalVariableDefs.c” в проект;

– включить “DSP2833x_Device.h” в Вашу C–программу.

Регистры лабораторной работы LAB 5_1:

– регистры ЦП:

1) управление сторожевым таймером – WDCR;

2) PLL тактовый регистр – PLLCR;

3) делитель для высокой тактовой частоты – HISPCP;

4) делитель для низкой тактовой частоты – LOSPCP;

5) регистр управления тактами периферии – PCLKCRx;

6) системный регистр управления и статуса – SCSR;

– доступ к LED‘s (GPIO9, GPIO11,GPIO34,GPIO49):

1) GPA и GPB Multiplex регистры:

а) GPAMUX1, GPAMUX2, GPBMUX1, GPBMUX2;

б) GPA и GPB управляющие регистры GPADIR и GPBDIR;

2) GPA и GPB Регистры данных:

а) GPASET, GPACLEAR, GPBSET, GPBCLEAR.

Выводы GPIO9, GPIO11, GPIO34 и GPIO49 подключаются к четырем светодиодам (LD1–4) в периферийной плате. Цифровая выходная величина «1» включит свет, а цифровой «0» выключит. Lab5_1 будет использовать регистры направлений GPAMUX1, GPBMUX1, GPADIR, GPBDIR и регистры данных GPADAT, GPBDAT, GPASET, GPACLEAR, GPBSET и GPBCLEAR.

Программа Lab5_1 непрерывно увеличивает целую переменную "counter " и отображает текущее значение четырех младших битов на LD1 – LD4. В этой лабораторной работе мы не будем использовать прерывания. Модуль сторожевого таймера и основные регистры для установки тактовой частоты в этом упражнении используются.

Порядок выполнения:

– создайте файл проекта;

– используя программу Code Composer Studio, создайте новый проект, названный Lab21.pjt в C:\DSP2833x_V4\Labs (или в другом каталоге, который доступен Вам);

– определите размер системного стека C, в окне проекта, кликните правой кнопкой мыши на проекте «Lab21» и выберите «Properties», На вкладках «C/C++ Build», «C2000 Linker», «Basic Options» установите размер стека C в 0x400;

– скопируйте предусмотренный файл исходной программы «Lab5_1.c» в папку проекта «C:\DSP2833x_V4\Labs\Lab21», этот шаг автоматически включит файл в проект «Lab21»;

– затем, мы воспользуемся некоторыми полезными файлами, которые предусмотрительно созданы инженерами фирмы «Техas Instrument» и уже доступны на вашем жестком диске С как часть так называемого «Файла Заголовков» в пакете (sprc530.zip);

– во вкладке C/C++, правый клик на проекте «Lab21» и выбор “Link Files to Project”;

– откройте папку C:\tidcs\c28\dsp2833x\v131\DSP2833x_headers\ sou –rce» и добавьте DSP2833x_GlobalVariableDefs.c, этот файл определяет все глобальные переменные, чтобы иметь доступ к памяти, отображающей периферийные регистры;

– повторите шаг «Link Files to Project». Из папки C:\tidcs\c28\dsp2833x\v131\DSP2833x_common\source добавьте DSP2833x_CodeStartBranch.asm, этот файл содержит единственную длинную сборочную инструкцию и должен устанавливаться в кодовый раздел «BEGIN» в программе, всё что будет делать Компоновщик базируется на файле, который будет добавлен на следующем шаге.

– из C:\tidcs\c28\dsp2833x\v131\DSP2833x_headers\cmd, добавить в «Lab21» – DSP2833x_Headers_nonBIOS.cmd. этот файл команд компоновщика соединит все глобальные переменные и регистры с их соответствующими физическими адресами.

Опции компиляции проекта.

Мы также должны указать маршрут поиска файлов include для C–Компилятора. Правый клик на проекте «Lab21» и выбор «Properties». Выберите «C/C++ Build», «C2000 Compiler», «Include Options». В окне "Add dir to #include search path”, добавляем следующую строку:

– C:\tidcs\C28\dsp2833x\v131\DSP2833x_headers\include

Примечание. Используйте Иконку «Add», чтобы добавить новый маршрут как показано на рисунке 2.47.

 

Рисунок 2.47 – Добавление нового маршрута

 

Закройте окно нажав <OK>.

Модифицируйте Исходную Программу.

После того, как мы подготовили наш проект, необходимо проверить и изменить предусмотренный C–исходный файл программы "Lab5_1.c".

Откройте Lab5_1.c и найдите локальную функцию «InitSystem()». Вы найдете различные вопросные маркеры в этом коде. Ваше задание – заменить все вопросные маркеры, чтобы завершить код.

Установка Сторожевого Таймера (WDCR). Дезактивируйте сторожевой таймер и очистите Разряд WD признака.

Установите SCSR, чтобы сгенерировать СБРОС по событию переполнения сторожевого таймера (WDENINT).

Установите модуль PLL тактового генератора (PLLCR) – множитель на 10/2. Предположим, мы используем внешний 30 MHz генератор это установит DSP на 150 MHz внутренней частоты. Установите битовую область DIV в PLLCR в 10 и области DIVSEL в регистре PLLSTS на 2.

Установите высокочастотный предделитель тактового генератора (HISPCP) на «divide 2», низкочастотный предделитель (LOSPCP) на «divide 4».

Разрешите тактирование GPIO битом GPIOINENCLK в регистре PCLKCR3. Запретите тактирование всех других периферийных устройств в регистрах: PCLKCR0, PCLKCR1 и PCLKCR3.

Найдите локальную функцию «Gpio_select()» и модифицируйте её код следующим образом:

– установите все мультиплексные регистры на цифровой I/O;

– установите GPADIR линии GPIO9 и GPIO11 на вывод, все другие линии на ввод;

– установите GPВDIR линии GPIO34 и GPIO49 на вывод, все другие линии на ввод;

– установите GPCDIR: все линии на цифровой ввод.

Установка управляющего цикла

В «Lab5_1.c» найдите бесконечный «while» (цикл 1). После инкремента переменной «counter» добавьте следующие инструкции, чтобы проанализировать текущую величину в «counter» (в примере последовательное включение четырех диодов)

 

If bit 0 of counter is 1, set GPIO9 to 1, otherwise clear GPIO9 to 0;

If bit 1 of counter is 1, set GPIO11 to 1, otherwise clear GPIO11 to 0;

If bit 2 of counter is 1, set GPIO34 to 1, otherwise clear GPIO34 to 0;

If bit 3 of counter is 1, set GPIO49 to 1, otherwise clear GPIO49 to 0.

 

Примечание. GPIO регистры данных являются доступным для использования комплектом 4 регистров («x» заменяется на A, B или C):

– GpioDataRegs.GPxDAT – доступ к регистрам данных;

– GpioDataRegs.GPxSET – установка в единицу линий, которые выделяются как «1»;

– GpioDataRegs.GPxCLEAR – установка в ноль линий, которые выделяются как «1»;

– GpioDataRegs.GPxTOGGLE – инвертирование линий, которые выделяются как «1»;

Например, чтобы установить линию GPIO5 в 1

GpioDataRegs.GPASET.bit.GPIO5 = 1;

 

Компиляция и загрузка.

Нажмите «Rebuild Active Project» кнопку или выполните Project → Rebuild All (Alt +B) и наблюдайте работу компилятора в окне build. Если Вы получаете ошибки или предупреждения, необходима коррекция программы.

Загрузите выходной файл для отладочной сессии Target → Debug Active Project и переключитесь на вкладку «Debug».

Отладка.

Проверьте в отладочном окне исходный код «Lab21» и, что синяя стрелка для текущего значения программного счетчика установлена под линией «void main(void)».

Запустите выполнение в реальном времени Target → Run.

Проверьте, включаются ли светодиоды как ожидается. Если включаются правильно, то Вы успешно завершили первую часть Lab21. Остановите устройство (Target → Halt).

Включение Watchdog таймера.

Теперь давайте приведем нашу Lab21 к более реалистичному сценарию. Хотя выключить сторожевой таймер было легко в первой части этого упражнения, это плохая практика для реального аппаратного проекта. Сторожевой таймер является аппаратными средствами устройства безопасности; это – внутренняя часть F2833x и она должна использоваться во всех проектах.

Модифицируем наш код.

Вернитесь назад в «C/C++»вкладку. В файле «Lab21.c» найдите функцию «InitSystem()» и измените WDCR – регистр. Теперь сторожевой таймер включен.

Результат – если сторожевой таймер разрешен, наша программа остановит операции после нескольких миллисекунд где–нибудь в while(1) – цикле. В зависимости от выбранного загрузочного режима, сторожевой таймер заставит контроллер прейти аппаратно на стартовую команду, обычно в точку входа во FLASH. Поскольку наша программа загружена в RAM а не во FLASH, он не начнется снова. В результате, наша программа не будет больше работать.

Примечание. Загрузочный режим F2833x выбирается четырьмя GPIOs (GPIO87, 86, 85 и 84), которые выбраны во время запуска. В случае F28335ControlCard все 4 вывода – подтянуты резисторами до 3.3 В, таким образом переход на начальный адрес FLASH выбран по умолчанию. На периферийном плате исследователя GPI084 может подключаться к GND перемычкой J3 («Boot–2») в модуле XDS100 («M1»); это выберет опцию «SCI– загрузчик». Все остальные комбинации загрузки не доступны для F28335ControlCard +.

Нажмите кнопку «Rebuild All» или выполните Project → Rebuild Active Project

Загрузите выходной файл для отладочной сессии Target → Debug Active Project и переключитесь на вкладку «Debug».

Запустите выполнение в реальном времени Target → Run.

Ваша программа не должна больше работать. Это – признак того, что F2833x сброшен переполнением сторожевого таймера.

Обслуживание сторожевого таймера.

Включение сторожевого таймера было только половиной задания, чтобы использовать его правильно. Теперь мы должны иметь дело с ним в нашем коде. Это означает, что если управляющий цикл работает как ожидается, сторожевой таймер, хотя он включен, никогда не должен запускать СБРОС. Мы должны, где–нибудь в управляющем цикле, сообщить сторожевому таймеру восстанавливающую ключевую последовательность. Ключевая последовательность состоит из двух инструкций записи в WDKEY–регистр, 0x55 и сопровождающей 0xAA.

Вернитесь во вкладку «C/C++», просмотрите файл «Lab21.c». Найдите функцию «delay_loop()» и снимите знак «комментарий» с четырех строк:

 

EALLOW;

SysCtrlRegs.WDKEY = 0x55;

SysCtrlRegs.WDKEY = 0xAA;

EDIS;

 

Примечание. C–Макрос «EALLOW» откроет доступ к определенной группе регистров CPU, включая регистры сторожевого таймера. Макрос «EDIS» закроет этот доступ.

Нажмите кнопку «Rebuild All» или выполните roject → Rebuild Active Project.

Загрузите выходной файл для отладочной сессии Target → Debug Active Project и переключитесь на вкладку «Debug».

Запустите выполнение в реальном времени Target → Run.

Теперь наш управляющий код должен работать снова как ожидается. Сторожевой таймер активен, но из–за ключевой последовательности он запустит СБРОС только если случится авария кода F2833x.

Date: 2015-06-06; view: 1047; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.007 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию