на тему- ldquo;Перериванняrdquo; Виконав- студент групи СКСс11 Липовий Р
Работа добавлена на сайт samzan.net: 2016-06-20
Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Предоплата всего
от 25%
Подписываем
договор
Міністерство освіти і науки УКРАЇНИ
національний університет “Львівська політехніка”
КАФЕДРА СКС
Звіт
до лабораторної роботи №7
з дисципліни: “Програмне забезпечення спеціалізованих компютерних систем”
на тему: “Переривання”
Виконав:
студент групи СКСс-11
Липовий Р. Я.
Прийняв викладач:
Клим Г. І.
Львів - 2013р.
Мета роботи: ознайомитись з основними поняттями обробки переривань для процесора PSoC3.
Загальні відомості
Переривання (англ. interrupt) сигнал, що повідомляє процесор про настання якої-небудь події. При цьому виконання поточної послідовності команд призупиняється і керування передається обробнику переривання, який реагує на подію та обслуговує її, після чого повертає управління в перерваний код.
PSoC3 може обробляти наступне:
- 32 лінії переривань.
- Кілька джерел для кожного вектора .
- Кожен вектор переривання незалежно включений або виключений.
- Вісім рівнів вкладеними перериваннями.
- Кілька векторів переривань вводу / виводу.
- Програмне забезпечення може очистити відкладені переривання.
Lab 2A Клірингове очікування переривання
- Створив новий проект. Надав йому імя Lab 2A.
- У вікні Component Catalog, вкладці System вибрав компонент Sleep Timer і перетягнув його в область TopDesign.cysch.
- Двічі клацнув по даному компоненті і у вікні конфігурації задав потрібні мені параметри: перейменував модуль, змінив інтервал пробудження на 1024ms і встановив оновлення таймера.
- Двічі клацнув по isr_1 і у конфігураційному вікні змінив його імя на - ISR_SleepTimer.
- Додав до схеми цифровий двонаправлений pin з вікна - Component Catalog, вкладки Ports and Pins.
- Двічі клацнув по даному модулі і змінив його імя на LEDOut. Далі кількість контактів створив 4, а не 1. І після чого, на вкладці Загальні вибрав Strong Drive.
- Відкрив вкладку Lab2A.cydwr і підключив прапорці на Р0 [ 3:0 ] .
- Написав програму, відкривши файл main.c.
Lab 2B Очікування переривання
- Зробив копію Lab 2A, та надав імя їй Lab2B.
- Включив необхідну бібліотеку. Перейшов в Project -> Build Settings . І додав CYLIB_POWER_MANAGEMENT для визначення препроцесора .
- Відредагував програмний код. Провів включення глобальних переривань за допомогою директиви CYGlobalIntEnable до контуру управління.
- Замінив частину коду, що чекає цього переривання сну з командою директиви CySleep і сигналом на цей сон SleepTimer_GetStatus ().
Програмний код:
#include <device.h>
#include <CYDEVICE.H>
#include <CYLIB.H>
#include <intrins.h>
void main(CySleep)
{
uint8 bShadow = 0;
SleepTimer1_Init();
SleepTimer_SetInterval(255);
SleepTimer_Start();
while (1){
CySleep;
while(SleepTimer_GetStatus() && SleepTimer__CTW_1024_MS == 0){
LEDOut_Write(bShadow);
bShadow++;
} } }
void CySleep(void){
_nop_();
_nop_();}
Lab 2С Глобальне переривання та ISR виконання
- Зробив копію Lab 2B, та надав імя їй Lab2С.
- Всі параметри і налаштування залишив незмінними.
- Перед включенням глобального переривання додав ISR_SleepTimer_Start () в код.
- Провів компіляцію проекту.
Lab 2D Підпрограма обробки переривань ISR (Assembler)
- Зробив копію Lab 2C, та надав імя їй Lab2D.
- Всі параметри і налаштування залишив незмінними.
- У вікні Workspace Explorer, додав новий елемент і надав йому імя SleepTimerRoutines.a51. Після чого написав код програми.
Lab 2E Мова С. Підпрограма обробки переривань ISR.
- Зробив копію Lab 2D та надав імя їй Lab2E.
- Всі параметри і налаштування залишив незмінними.
- Написав програмний код і оголосив функцію SLEEPISR. Провів компіляцію проекту.
Lab 2F Примусове переривання
- Зробив копію Lab 2E та надав імя їй Lab2F.
- Всі параметри і налаштування залишив незмінними.
- Встановив для переривання відповідний біт в регістрі CLRPEND.
Lab 2G ISR вправа
- Зробив копію Lab 2E та надав імя їй Lab2F.
- Всі параметри і налаштування залишив незмінними.
- Видалив обробник переривань розташований в ISR_SleepTimer.c.
- Створив змінну та надав імя їй bCount.
- Видалив код, що використовується для примусового переривання.
- Написав код в CY_ISR (ISR_SleepTimer).
Висновок:
На даній лабораторній роботі я ознайомився з основними поняттями обробки переривань для процесора PSoC3.