Скачать 1.7 Mb.
|
Внимание! В представленной системе содержатся ошибки различного характера (как минимум 3), которые не позволяют применить разработанную систему для управления реальным лифтом с гарантией обеспечения безопасности доставки груза. В качестве задания для самостоятельной работы предлагается выявить эти ошибки и предложить способы по их устранению, а также установить в данную систему ПИ-регулятор тока. Рис.5 Разработка шаблона программного обеспечения Ниже будет показано, каким образом с «нуля» можно собрать готовый проект в CCS. Проект при компиляции будет создавать программу, которая заставляет мигать светодиод, подключенный к пину процессора IOPF14. При этом будет показано, как собирать проект для загрузки в ОЗУ и флеш, без использования операционной системы реального времени DSP/BIOS. Создано на основе материала spra928f.pdf и spra958f.zip (исходные файлы), с сайта www.ti.com. Необходимое оборудование – CCS версии 3.x c DSP/BIOS версии 5.20, плата eZdsp или другая с сигнальным процессором TMS320F2812. Файлы и подкаталоги будут размещены в каталоге D:\template\ , к данному документу прилагается файл с архивом использованных файлов (полученный в результате выполнения данной инструкции). Итак, создаем самый простой вариант шаблона – без использования операционной среды реального времени DSP|BIOS, с загрузкой в RAM. Для этого открываем CCS, создаем проект под названием RAM_nonBIOS. Предложенный CCS отдельный каталог для проекта следует удалить, так как большинство файлов для всех проектов будут едины: Рис.6 Создаем каталоги src (для с-файлов), include (для h-файлов), cmd (для командных файлов распределения памяти), DSP281x_headers (для h-файлов периферии и системных устройств процессора). Рис.7 Создаем новый исходный файл и сохраняем его в каталог src под именем main.c. Тип файла не выбирать, в названии сохраненного файла вводить имя с расширением. В файл вводим текст программы: void main() { while(1); } Особенностью программирования встроенных систем на микроконтроллерах является необходимость распределения памяти программистом. При программировании DSP принято проводить распределение памяти за счет добавления двух cmd-файлов :
Помещаем файл f2812_nonBIOS_ram.cmd в каталог cmd. Он состоит из двух частей MEMORY и SECTIONS. В разделе MEMORY показаны начальные адреса и емкость возможных для использования ресурсов памяти процессора. Карта памяти находится в файле sprs174n.pdf, глава 3.1. Memory map. В разделе SECTIONS назначается соответствие между указанными ранее блоками памяти и секциями, сгенерированными компилятором при компилировании проекта. Секции бывают следующие (согласно файлу spru514.pdf, глава 7): Инициализируемые (с присваиванием начальных значений при загрузке в память): .text – содержит исполняемый код и константы .cinit и .pinit – содержит таблицы, в которых находятся значения начальной инициализации переменных (например, инициализируемых в программе как int a=5;) .const - инициализация констант .econst – инициализация констант (для языка С) Рис.8 Неинициализируемые (без присваивания начальных значений при загрузке программы в память): .bss – глобальные и статические переменные; .ebss – глобальные и статические переменные (используются в языке C); .stack – системный стек (для сохранения контекста процессора при вызове процедур); .sysmem – для динамического выделения памяти, используется malloc-функцией; .esysmem – для динамического выделения памяти, используется malloc-функцией . Соответственно неинициализируемые секции нужно располагать в ОЗУ, а инициализируемые – в ОЗУ или ПЗУ. Помещаем файл DSP281x_Headers_nonBIOS.cmd в каталог cmd. Он также состоит из двух частей: MEMORY и SECTIONS. В этом файле расписано расположение системных регистров и регистров управления периферией. Физическое расположение адресов, а также назначение регистров управления периферией расписано в следующих файлах (расширения pdf), см.таблицу 1: Таблица 1
Периферийные регистры объединены в структуры по функциональному принципу (менеджер событий, АЦП, SCI и т.д.). Например, регистры управления аналого-цифровым преобразователем (согласно файлу DSP281x_Adc.h) объединены в структуру ADC_REGS (справа в комментариях подписаны назначения регистров): struct ADC_REGS { union ADCTRL1_REG ADCTRL1; // ADC Control 1 union ADCTRL2_REG ADCTRL2; // ADC Control 2 union ADCMAXCONV_REG ADCMAXCONV; // Max conversions union ADCCHSELSEQ1_REG ADCCHSELSEQ1; // Channel select sequencing control 1 union ADCCHSELSEQ2_REG ADCCHSELSEQ2; // Channel select sequencing control 2 union ADCCHSELSEQ3_REG ADCCHSELSEQ3; // Channel select sequencing control 3 union ADCCHSELSEQ4_REG ADCCHSELSEQ4; // Channel select sequencing control 4 union ADCASEQSR_REG ADCASEQSR; // Autosequence status register Uint16 ADCRESULT0; // Conversion Result Buffer 0 Uint16 ADCRESULT1; // Conversion Result Buffer 1 Uint16 ADCRESULT2; // Conversion Result Buffer 2 Uint16 ADCRESULT3; // Conversion Result Buffer 3 Uint16 ADCRESULT4; // Conversion Result Buffer 4 Uint16 ADCRESULT5; // Conversion Result Buffer 5 Uint16 ADCRESULT6; // Conversion Result Buffer 6 Uint16 ADCRESULT7; // Conversion Result Buffer 7 Uint16 ADCRESULT8; // Conversion Result Buffer 8 Uint16 ADCRESULT9; // Conversion Result Buffer 9 Uint16 ADCRESULT10; // Conversion Result Buffer 10 Uint16 ADCRESULT11; // Conversion Result Buffer 11 Uint16 ADCRESULT12; // Conversion Result Buffer 12 Uint16 ADCRESULT13; // Conversion Result Buffer 13 Uint16 ADCRESULT14; // Conversion Result Buffer 14 Uint16 ADCRESULT15; // Conversion Result Buffer 15 union ADCTRL3_REG ADCTRL3; // ADC Control 3 union ADCST_REG ADCST; // ADC Status Register }; Соответственно, каждый такой регистр структуры раскладывается в подструктуру, например: struct ADCTRL1_BITS { // bits description Uint16 rsvd1:4; // 3:0 reserved Uint16 SEQ_CASC:1; // 4 Cascaded sequencer mode Uint16 SEQ_OVRD:1; // 5 Sequencer override Uint16 CONT_RUN:1; // 6 Continuous run Uint16 CPS:1; // 7 ADC core clock pre-scalar Uint16 ACQ_PS:4; // 11:8 Acquisition window size Uint16 SUSMOD:2; // 13:12 Emulation suspend mode Uint16 RESET:1; // 14 ADC reset Uint16 rsvd2:1; // 15 reserved }; Таким образом, для возможности обращения к регистру либо целиком как к 16-разрядному значению, либо “побитно” вводится тип объединения union (один и тот же физический адрес расписывается либо как число, либо как отдельные биты): union ADCTRL1_REG { Uint16 all; struct ADCTRL1_BITS bit; }; К каждому периферийному устройству существует свой заголовочный файл, который необходимо скопировать в папку include (см.рис.9). Рис.9 Для того чтобы каждый раз не подключать все указанные заголовочные файлы, они все подключаются в файле DSP281x_Device.h. Реальные экземпляры таких типов объявлены в файле DSP281x_GlobalVariableDefs.c (в котором подключен файл DSP281x_Device.h), при этом файл обеспечивает стыковку между адресами, объявленными в командном файле периферийных регистров, и именами, по которым следует обращаться к этим адресам. Такая стыковка обеспечивается за счет директивы #pragma: #ifdef __cplusplus #pragma DATA_SECTION("AdcRegsFile") #else #pragma DATA_SECTION(AdcRegs,"AdcRegsFile"); #endif volatile struct ADC_REGS AdcRegs; Здесь: AdcRegsFile – имя секции в командном файле, которая располагается в области памяти ADC. Обращение к конкретному биту следует делать как: AdcRegs.ADCTRL1.bit.CONT_RUN = 1. CCS оснащен системой подсказки полей структур – при наборе имени переменной и постановки знака «.» происходит контекстное открытие меню с полями структуры. Раскрытие контекстного меню может происходить с задержкой 1-10 секунд (особенность CCS), иногда CCS не может найти поля структуры (даже если они реально объявлены), в таком случае он пишет в статусной строке (внизу окна) сообщение «No members found». Примечание: ключевое слов volatile указывает на то, что данная переменная по своему жестко заданному адресу может быть изменена извне. Это препятствует смещению адреса переменной при запуске режимов оптимизации работы компилятора. Копируем файл DSP281x_GlobalVariableDefs.c в каталог src. Добавляем в проект файлы DSP281x_GlobalVariableDefs.c, main.c. Добавляем в проект файлы DSP281x_Headers_nonBIOS.cmd и f2812_nonBIOS_ram.cmd. В опциях окна Build Options необходимо выставить параметры настройки компоновщика согласно рисунку (поля Output Module, Include Libraries, Stack Size, см.рис.10). В обязательном порядке необходимбо добавить путь “..\include” в Preprocessor (найти опцию в окне). Рис.10 Подключение библиотеки rts2800_ml.lib (см.рис.10, нижнее поле) необходимо для определения точки запуска программы – нулевого прерывания (прерывания после RESET или подачи питания) _c_int00 – специальной метки в программе. Для работы процессора необходимо сконфигурировать все системные и необходимые периферийные регистры. Для конфигурации системных регистров (частота деления кварца, подача частоты на периферийные устройства и т.д.) копируем SysCtrl.c в каталог src и подключаем его в проект. Добавляем вызов InitSysCtrl(); в код программы (самое начало), а также ссылку на внешнее объявление extern void InitSysCtrl(void); Существует возможность выполнять определенную часть кода не из флеш-памяти, а из ОЗУ для увеличения быстродействия выполнения критических процедур (быстродействие программы в ОЗУ может быть увеличено в 2 раза, так как максимальная тактовая частота при работе из флеш-памяти не превышает 75 Мгц). Для этого применяется секция secureRamFuncs, находящаяся во флеш, но при старте программы перегружающаяся в ОЗУ памяти программ, соответственно необходимо указать начальный загрузочный адрес, конечный, адрес точки входа в критическую процедуру. Добавляем в main.c ссылку на внешнее объявление //--------------------------------------------------------------------------- // Global symbols defined in the linker command file // extern Uint16 secureRamFuncs_loadstart; extern Uint16 secureRamFuncs_loadend; extern Uint16 secureRamFuncs_runstart; а в текст программы : // Section secureRamFuncs contains user defined code that runs from CSM secured RAM memcpy( &secureRamFuncs_runstart, &secureRamFuncs_loadstart, &secureRamFuncs_loadend – &secureRamFuncs_loadstart ); /*** Initialize the FLASH ***/ InitFlash(); // Initialize the //FLASH (FILE: SysCtrl.c) Процедура memcpy (memory copy) осуществляет копирование по адресу &secureRamFuncs_runstart кода с адреса &secureRamFuncs_loadstart длиной &secureRamFuncs_loadend - &secureRamFuncs_loadstart (значок & - признак адреса переменной ). Связь с реальными адресами находится в командном файле распределения памяти f2812_nonBIOS_ram.cmd: secureRamFuncs : LOAD = H0SARAM, PAGE = 0 /* Used by InitFlash() in SysCtrl.c */ RUN = L0SARAM, PAGE = 0 LOAD_START(_secureRamFuncs_loadstart), LOAD_END(_secureRamFuncs_loadend), RUN_START(_secureRamFuncs_runstart) Как видим, загрузка некоторой части кода происходит в H0SARAM, а выполнение в L0SARAM. В случае наличия внешней памяти необходимо сконфигурировать интерфейс внешней памяти. Для этого добавляем в код инициализации вызов InitXintf(). Сама процедура находится в файле Xintf.c – копируем этот файл в каталог src и добавляем его в проект. |
Учебно-методическое пособие Рекомендовано методической комиссией... Методы молекулярной диагностики: Учебно-методическое пособие. Авторы: А. Д. Перенков, Д. В. Новиков, С. Г. Фомина, Л. Б. Луковникова,... |
Учебно-методическое пособие Елабуга 2016 ббк 74. 58 Учебно-методическое... Методическое пособие предназначено для студентов 1 курса высших учебных заведений неязыковых специальностей |
||
Учебно-методическое пособие по клинической фармакологии Оренбург, 2007 Учебно-методическое пособие предназначено для самостоятельной работы студентов медицинских вузов, обучающихся по специальности «Лечебное... |
Методическое пособие Саратов 2008 г. Организация комплексной системы... Методическое пособие предназначено для руководителей и преподавателей- организаторов обж образовательных учреждений |
||
Учебно-методическое пособие ... |
Организация и технология документационного обеспечения управления учебно-методическое пособие ... |
||
Учебно-методическое пособие «Учебные игры и ситуационные задачи в... Учебные игры и ситуационные задачи в гинекологии: Учебно-методическое пособие / Под ред. А. А. Радионченко. – Томск: Сибгму,... |
Учебно-методическое пособие Казань 2010 Печатается по рекомендации... Учебно-методическое пособие по курсу «Организационное поведение» /Д. М. Сафина. – Казань: Казанский (Приволжский) федеральный университет;... |
||
Учебно-методическое пособие. Новосибирск, 2006 Учебно-методическое пособие предназначено инструкторам детско-юношеского и спортивного туризма с целью повышения уровня знаний и... |
Учебно-методическое пособие к лабораторным занятиям по курсу «Основы кристаллооптики» Практическое руководство по работе с поляризационным микроскопом для исследования петрографических объектов: Учебно-методическое... |
||
Учебно-методическое пособие организация инженерной защиты населения Учебно-методическое пособие разработано применительно к Программе обучения слушателей на курсах гражданской защиты Копейского городского... |
Учебно-методическое пособие Санкт-Петербург 2007 Автор: Черемисов... Учебно-методическое пособие предназначено для подготовки руководящего состава, специалистов гочс и пб, руководителей служб, аварийно-спасательных... |
||
Учебно-методическое пособие для студентов пм. 04.(07.) «Выполнение... Учебно-методическое пособие составлено в соответствии с требованиями Федерального Государственного образовательного стандарта по... |
Учебно-методическое пособие санкт-Петербург 2009г. Автор: Г. П. Подвигин... Учебно-методическое пособие предназначено для должностных лиц, специалистов го и рсчс организаций |
||
Учебно-методическое пособие Кемерово 2015 г. Согласовано: кроо «памск» Учебно-методическое пособие предназначено для студентов стоматологического факультета, гигиенистов стоматологических со средним медицинским... |
Федеральное государственное образовательное учреждение Высшего профессионального... Вакуумный практикум: Учебно-методическое пособие. Ростов-на-Дону, 2008. 55с |
Поиск |