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

 

10. В «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;

 

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

11. Нажмите “Rebuild Active Project ” кнопку или выполните:

Project» Rebuild All (Alt +B)

и наблюдайте работу компилятора в окне build. Если Вы получаете ошибки или предупреждения, необходима коррекция программы.

12. Загрузите выходной файл для отладочной сессии:

Target» Debug Active Project

и переключитесь на вкладку “Debug”.

Отладка

 

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

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

Target è Run

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

 

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

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

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

18. Что является результатом?

Ответ: Если сторожевой таймер разрешен, наша программа остановит операции после нескольких миллисекунд где-нибудь в 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 +.

19. Нажмите кнопку «Rebuild All» или выполните:

Project à Rebuild Active Project

20. Загрузите выходной файл для отладочной сессии:

Target» Debug Active Project

и переключитесь на вкладку “Debug”.

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

Target è Run

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

 

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

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

должны, где-нибудь в нашем управляющем цикле, сообщить сторожевому таймеру восстанавливающую ключевую последовательность. Ключевая последовательность состоит из двух инструкций записи в WDKEY-регистр, 0x55 и сопровождающей 0xAA.

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

EALLOW;

SysCtrlRegs.WDKEY = 0x55;

SysCtrlRegs.WDKEY = 0xAA;

EDIS;

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

23. Нажмите кнопку «Rebuild All» или выполните:

Project à Rebuild Active Project

24. Загрузите выходной файл для отладочной сессии:

Target» Debug Active Project

и переключитесь на вкладку “Debug”.

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

Target è Run

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

 

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: