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. Надо надеяться это никогда не случится!