Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МПЗПК лаби / LR_PMZV-3.doc
Скачиваний:
5
Добавлен:
18.03.2016
Размер:
8.13 Mб
Скачать

Міністерство освіти і науки, молоді та спорту України

Вінницький національний технічний університет

Інститут автоматики, електроніки та комп‘ютерних систем управління

Кафедра метрології та промислової автоматики

Методичні вказівки

до лабораторної роботи №3

по курсу : "Проектування мікропроцесорних засобів вимірювання "

«Ініціалізація і GPIO»

Вінниця - 2012

Лабораторна робота №3

Ініціалізація і GPIO

Мета: навчитися створювати код ініціалізації і запуску пристрою (MSP430) за допомогою різних ресурсів таймера

Теоретичні відомості

Рисунок 3.1 – Скидання програмного забезпечення

Рисунок 3.2 – Ініціалізація програмного забезпечення

Рисунок 3.3 – Системний годинник

Рисунок 3.3 – Калібрування VLO

Рисунок 3.3 – Система MCLK &Vcc

Хід роботи

І. Створення нового проекту:

  1. Створіть новий проект (File New CCS Project) і назвіть його Lab3. Зніміть прапорець, "використовують розташування за замовчуванням". Використовуючи кнопку Browse...(Огляд) необхідно переміститися до: C:\MSP430_LaunchPad\Labs\Lab3\Project. Натисніть "OK" і потім натисніть Next. Наступні три вікна повинні прийняти значення за замовчуванням до опцій, які були обрані раніше. Використовуйте значення за замовчуванням, і в останньому вікні натисніть кнопку Finish.

ІІ. Створення вихідного файлу:

  1. Додати вихідний файл до проекту(File New Source File) і назвіть його Lab3.c і натисніть кнопку Finish.

  2. У порожньому вікні введіть наступний код у Lab3.c:

#include <msp430g2231.h>

void main(void)

{

//code goes here

}

ІІІ. Запуск процесора на VLO:

  1. Щоб зрозуміти наступні кроки, повинні мати наступні два ресурсу під рукою:• MSP430G2231.h header file - шукає хедер msp430g2231.h і відкриває його. Цей файл містить весь регістр і розрядні визначення для пристрою MSP430.• MSP430G2xx Users Guide - цей документ був завантажений в Lab1. Це керівництво користувача для MPS430 Value Line. Відкрийте .pdf файл для того, щоб його переглянути.

Для налагодження, було б зручно зупинити таймер:

WDTCTL = WDTPW + WDTHOLD;

WDTCTL є watchdog timer control register (регістр управління). Ця команда задає пароль (WDTPW), щоб зупинити таймер (WDTHOLD).

  1. Далі нам потрібно налаштувати світлодіод, який підключений до лінії GPIO. Зелений світлодіод розташований за адресою порт 1 Біт 6. Світлодіод включається, коли біт встановлено в рівень логічної "1". Потім у коді програми необхідно залишити відстань і ввести наступні два рядки коду:

P1DIR = 0x40;

P1OUT = 0;

  1. Тепер ми будемо налаштовувати системний годинник. Введіть нову лінію, а потім введіть:

BCSCTL3 |= LFXT1S_2;

  1. BCSCTL3 є одним з основних регістрів системи Clock Control. В наступному рядку введіть:

IFG1 &= ~OFIFG;

IFG1 є прапор переривання, прапор помилки - OFIFG (перша буква "O", а не нуль).

  1. Нам потрібно почекати близько 50 мкс для того, щоб система могла зреагувати. Зупинка DCO дозволить нам виграти цей час. В наступному рядку введіть:

_bis_SR_register(SCG1 + SCG0);

SR є регістр статусу.

  1. Введіть це твердження в наступному рядку:

BCSCTL2 |= SELM_3 + DIVM_3;

  1. На даний момент, ваш код повинен виглядати так як наведено нижче рисунку. Натисніть кнопку Save на панелі меню, щоб зберегти файл.

#include <msp430g2231.h>

void main(void)

{

WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer

P1DIR = 0x40; // P1.6 output (green LED)

P1OUT = 0; // LED off

BCSCTL3 |= LFXT1S_2; // LFXT1 = VLO

IFG1 &= ~OFIFG; // Clear OSCFault flag

__bis_SR_register(SCG1 + SCG0); // Stop DCO

BCSCTL2 |= SELM_3 + DIVM_3; // MCLK = VLO/8

}

  1. Для того, щоб перемикати світлодіод, необхідно додати наступний цикл:

{

P1OUT = 0x40; // LED on

_delay_cycles(100);

P1OUT = 0; // LED off

_delay_cycles(5000);

}

  1. Тепер, повний код повинен виглядати наступним чином:

#include <msp430g2231.h>

void main(void)

{

WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer

P1DIR = 0x40; // P1.6 output (green LED)

P1OUT = 0; // LED off

BCSCTL3 |= LFXT1S_2; // LFXT1 = VLO

IFG1 &= ~OFIFG; // Clear OSCFault flag

__bis_SR_register(SCG1 + SCG0); // Stop DCO

BCSCTL2 |= SELM_3 + DIVM_3; // MCLK = VLO/8

while(1)

{

P1OUT = 0x40; // P1.6 on (green LED)

_delay_cycles(100);

P1OUT = 0; // green LED off

_delay_cycles(5000);

}

}

  1. Натисніть кнопку "Build" і дивіться як працює програма у вікні консолі. Перевірка на помилки у вікні Problems.

  2. Натисніть кнопку "Debug" (зелена помилка). "Debug Perspective" програма завантажуються автоматично, і Ви повинні тепер бути на початку main ().

  3. Далі потрібно запустити код програми. Якщо все працює правильно, зелений світлодіод повинен перемикатись приблизно раз в три секунди. Запуск процесора на інші джерела значно прискорить годинник. Це буде розглянуто в іншій частині лабораторної роботи.

  4. Натисніть на кнопку Save, щоб зупинити відладку і повернутися до

C / C + + . Збережіть роботу, натиснувши FileSave As і виберіть зберегти в папці C: \ MSP430_LaunchPad/Labs/Lab3/Files. Ім'я файлу Lab3a.c. Натисніть кнопку Save. Закрийте вкладку Lab3a і двічі клацніть на Lab3.c в панелі проекту.

  1. Натисніть кнопку Terminate all щоб припинити налагодження і повернутися до C/C++. Збережіть роботу натиснувши File Save As і виберіть Save в папці: C: MSP430_LaunchPad/Labs/Lab3/Files. Назвіть файл Lab3а.с, натисніть Save. Закрийте вкладку Lab3a і двічі клацніть на Lab3.c в області Projects.

Запуск процесора в схемі

Кварцевий резонатор частотою 32768 Гц, приблизно в три рази швидший, ніж VLO. Якщо ми запустимо код програми з використанням резонатору, зелений світлодіод повинен блимати приблизно один раз в секунду. Ви знаєте, чому кристал 32768 Гц є стандартним? Саме тому, що це число 215 робить простою у використанні цифрову схему підрахунку, для того щоб отримати зміну сигналу один раз в секунду, що є ідеальним для роботи годинника.

  1. Ця частина лабораторної роботи використовує попередній код програми в якості відправної точки. Ми почнемо у верхній частині коду і буде використовувати обидва світлодіода. Необхідно зробити обидва контакти світлодіода (Р1.0 і Р1.6) виходами.

Замінити: P1DIR = 0x40;

на: P1DIR = 0x41;

  1. Якщо розпочинати з червоного світлодіода Р1.0,то необхідно задати

Замінити: P1OUT = 0;

на: P1OUT = 0x01;

  1. Необхідно обрати зовнішній кристал з низькою вхідною тактовою частотою.

Замінити: BCSCTL3 │= LEXT1S_2;

на: BCSCTL3 │= LEXT1S_0;

  1. У попередньому коді програми ми очистили прапорець ОSCFault та продовжили роботу далі, за замовчуванням годинник системи буде так чи інакше VLO. Тепер необхідно переконатися, що прапорець залишився очищеним, це свідчить про те, що кристал дійсно працює. Для цього застосовується цикл з перевіркою.

Замінити: IFG1 &= OFIFG;

на: while (IFG1 & OFIFG)

{

IFG1 &= OFIFG;

_delay_cycles (100000);

}

У твердженні while (IFG1 & OFIFG)тестується OFIFG у регістрі IFG1. Якщо дана несправність є виявленою, то ми виходимо із циклу. Ми повинні зачекати 50 мкс після зникнення прапора, щоб перевірити його ще раз. За допомогою _delay_cycles (100000); цикл триває набагато довше. Нам потрібно, щоб даний цикл тривав так довго, щоб ми могли спостерігати червоне світло на початку коду. Інакше, цикл тривав би дуже малий проміжок часу, і людське око не могло б його зафіксувати.

  1. Тепер потрібно додати ще один рядок програми, який вимкне червоний світлодіод. Після циклу необхідно додати:

P1OUT = 0;

  1. Так як ми зробили багато змін в коді (і є можливість зробити кілька помилок), переконайтеся, що ваш код буде виглядати так:

#include <msp430g2231.h>

void main(void)

{

WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer

P1DIR = 0x41; // P1.0 and P1.6 output

P1OUT = 0x01; // red LED on

BCSCTL3 |= LFXT1S_0; // LFXT1 = 32768 crystal

while(IFG1 & OFIFG)

{

IFG1 &= ~OFIFG; // Clear OSCFault flag

_delay_cycles(100000); // delay for flag and visibility

}

P1OUT = 0; // red LED off

__bis_SR_register(SCG1 + SCG0); // Stop DCO

BCSCTL2 |= SELM_3 + DIVM_3; // MCLK = 32768/8

while(1)

{

P1OUT = 0x40; // green LED on

_delay_cycles(100);

P1OUT = 0; // green LED off

_delay_cycles(5000);

}

}

  1. Натиснувши кнопку Built, можна спостерігати вікно Console. Перевірку на помилки можна здійснити у вікні Problems.

  2. Натисніть кнопку Debug (зелені помилки). Має відкритися Debug Perspective, програма завантажиться автоматично, і курсор буде знаходитись на початку main ().

  3. Подивіться уважно на світлодіоди на LaunchPad і Run код. Якщо все працює правильно, червоний світлодіод буде блимати дуже швидко, а потім зелений світлодіод повинен блимати кожну секунду або в межах неї. Тобто з більшою частотою кристала кварцу, швидкість поблискування світлодіодів збільшилася принаймні в три рази. Коли це зроблено, потрібно зупинити виконання коду.

  4. Натисніть на кнопку Terminate All щоб зупинити налагодження і повернутися до С++ проекту. Збережіть роботу, натиснувши File Save As, і виберіть зберегти в папці C:\MSP430_LaunchPad/Labs/ Lab3/Files. Назвіть файл Lab3b.c і натисніть Save. Закрийте Lab3b.с і двічі клацніть на Lab3.c в області Projects.

Запуск процесора на DCO

Найменша частота, за допомогою якої можна керувати DCO складає 1МГц (це також є швидкістю по замовчуванні). Таким чином, ми почнемо перемикати MCLK на DCO. У більшості систем є вигідним, щоб ACLK керував на VLO. Також, майже всі системи ACLK працюють або на VLO або на кристалі з частотою 32768 Гц. ACLK в даному випадку виконаний на кристалі, тож його необхідно просто увімкнути.

  1. Можна просто залишити схему в такому вигляді, якому вона є, але ми будемо її калібрувати. Відразу після коду, який зупиняє watchdog timer, додайте наступний код:

if (CALBC1_1MHZ ==0xFF || CALDCO_1MHZ == 0xFF)

{

while(1); // If cal constants erased, trap CPU!!

}

BCSCTL1 = CALBC1_1MHZ; // Set range

DCOCTL = CALDCO_1MHZ; // Set DCO step + modulation

Зверніть увагу на деякі особливості саме на даному етапі. Можна стерти сегменти інформації з флеш-пам’яті.

  1. Ми повинні закоментувати рядок, який зупиняє DCO. Закоментуйте наступні рядки:

// __bis_SR_register(SCG1 + SCG0); // Stop DCO

  1. Нарешті, ми повинні впевнитися, що MCLK є джерелом DCO.

Замінити: BCSCTL2 |= SELM_3 + DIVM_3;

на: BCSCTL2 |= SELM_0 + DIVM_3;

  1. Код повинен виглядати так:

#include <msp430g2231.h>

void main(void)

{

WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer

if (CALBC1_1MHZ ==0xFF || CALDCO_1MHZ == 0xFF)

{

while(1); // If cal const erased, TRAP!

}

BCSCTL1 = CALBC1_1MHZ; // Set range

DCOCTL = CALDCO_1MHZ; // Set DCO step + modulation

P1DIR = 0x41; // P1.0 & 6 outputs(red/green LEDs)

P1OUT = 0x01; // red LED on

BCSCTL3 |= LFXT1S_0; // LFXT1 = 32768 crystal

while(IFG1 & OFIFG)

{

IFG1 &= ~OFIFG; // Clear OSCFault flag

_delay_cycles(100000); // delay for flag and visibility

}

P1OUT = 0; // red LED off

// __bis_SR_register(SCG1 + SCG0); // Stop DCO

BCSCTL2 |= SELM_0 + DIVM_3; // MCLK = DCO

while(1)

{

P1OUT = 0x40; // green LED on

_delay_cycles(100);

P1OUT = 0; // green LED off

_delay_cycles(5000);

}

}

Код може бути знайдений в разі необхідності в DCO_XT.txt.

  1. Натиснувши кнопку Built, можна спостерігати вікно Console. Перевірку на помилки можна здійснити у вікні Problems.

  2. Натисніть кнопку Debug. Має відкритися Debug Perspective, програма завантажиться автоматично, і курсор буде знаходитись на початку main ().

  3. Подивіться уважно на світлодіоди на LaunchPad і Run код. Якщо все працює правильно, червоний світлодіод буде блимати дуже швидко, а зелений світлодіод повинен блимати ще швидше. DCO працює на частоті 1 МГц, і це приблизно в 33 рази швидше, аніж кристал з частотою 32768 Гц . Таким чином, зелений світлодіод повинен мигати близько 30 разів на секунду.

  4. Натисніть на кнопку Terminate All щоб зупинити налагодження і повернутися до С++ проекту. Збережіть роботу, натиснувши File Save As, і виберіть зберегти в папці C:\MSP430_LaunchPad/Labs/ Lab3/Files. Назвіть файл Lab3с.c і натисніть Save. Закрийте Lab3с.с і двічі клацніть на Lab3.c в області Projects.

Соседние файлы в папке МПЗПК лаби