Складання програми для ЦПОС TMS320F243.

Складання програми для ЦПОС TMS320F243.

Розрахунок керуючого слова АЦП.

Для того щоб АЦП належно працював необхідно розрахувати для нього керуюче слово і записати його в керуючий регістр, який знаходиться у пам’яті даних за адресом 7032h.
Керуючий регістр АЦП (рис.3) керує запуском перетворення, функцією дозволу/заборони модуля АЦП, дозволом переривання, і завершенням перетворення.


РИС.3. Керуючий регістр АЦП (ADCTRL1) – Адреса 7032h
Зауваження: R = доступ читання, W = запис, S = тіньовий, 0 = Значення після скидання

Біт 15 Suspend-soft. Застосуємо тільки при эмуляции.
0 = Негайний останов, якщо suspend-free (біт 14) = 0
1 = Завершення перетворення перед остановом эмулятора

Біт 14 Suspend-free. Застосуємо тільки при эмуляции.
0 = Дія визначається битому suspend-soft (біт 15)
1 = Підтримування в робочому стані при припиненні эмулятора

Біт 13 ADCIMSTART. АЦП запуск перетворення негайно.
0 = Немає дії.
1 = Негайний запуск перетворення.

Біт 12 ADC2EN. Біт дозволу/заборони для АЦП2. Може записуватися під час перетворення. Вплив запису в цей біт виявляється при наступному перетворенні.
0 = АЦП2 заборонений. (Не може мати місце ніяка операція вибірки/збереження/перетворення, регістр даних FIFO1 не змінюється.)
1 = АЦП2 дозволений.

Біт 11 ADC1EN. Біт дозволу/заборони для АЦП1. Може записуватися під час перетворення. Вплив запису в цей біт виявляється при наступному перетворенні.
0 = АЦП1 заборона. (Не може мати місце ніяка операція вибірки/збереження/перетворення, регістр даних FIFO1 не змінюється.)
1 = АЦП1 дозволений.

Біт 10 ADCCONRUN. Цей біт установлює модуль АЦП у режим безупинного перетворення. Може записуватися під час перетворення. Вплив запису в цей біт виявляється при наступному перетворенні.
0 = Немає дій.
1 = Безупинне перетворення.

Біт 9 ADCINTEN. Дозвіл переривань. Якщо біт ADCINTEN установлений, переривання запитується, коли встановлений біт ADCINTFLAG. Цей біт очищається при скиданні . Біт може бути записаний під час перетворення. Вплив запису в цей біт виявляється при наступному перетворенні.

Біт 8 ADCINTFLAG. АЦП біт прапора переривання. Цей біт указує, чи трапилося переривання. Запис 1 у ADCINTFLAG очищає цей біт. Біт не затінений.
0 = Ніякої події переривання не трапилося
1 = Подія переривання трапилася

Біт 7 ADCEOC. Цей біт указує стан АЦП перетворення. 0 = Кінець перетворення
1 = Перетворення відбувається
Біти 6-4 ADC2CHSEL. Вибирає канали для АЦП2 .Біт може бути записаний під час перетворення. Ефект запису в цей біт виявляється протягом наступного перетворення.
000 = Канал 9
001 = Канал 10
010 = Канал 11
011 = Канал 12
100 = Канал 13
101 = Канал 14
110 = Канал 15
111 = Канал 16

Біти 3-1 ADC1CHSEL. Вибір каналів АЦП1. Цей біт затінюється. Біт може бути записаний під час перетворення. Ефект запису в цей біт виявляється протягом наступного перетворення.
000 = Канал 1
001 = Канал 2
010 = Канал 3
011 = Канал 4
100 = Канал 5
101 = Канал 6
110 = Канал 7
111 = Канал 8

Біт 0 ADCSOC. Біт запуску перетворення (SOC) АЦП. Біт може бути записаний під час перетворення. Ефект запису в цей біт виявляється протягом наступного перетворення.
0 = Немає дій
1 = Запуск перетворення

Згідно з описом всіх бітів керуючого слова запишемо:

Керуюче слово (КС) = 0000 1100 0000 00112 чи 0С0316

Перша тетрада КС означає, що заборонено негайний запуск АЦП і заборону роботи АЦП2 (оскільки його немає в наявності в TMS320F243)
Друга тетрада КС означає, що вибрано АЦП1 він же АЦП; режим безперервного вимірювання; заборона переривань.
Четверта тетрада – вибір 2го каналу АЦП і запуск його

Складання програми для перетворення аналогового сигналу у цифровий код.

Результат обробки АЦП знаходиться в регістрі FIFO за адресою 7036h в памяті даних в такому виді як показано на рис.4


РИС.4 Регістр FIFO

Біти 15-6 D9-D0. Фактичні 10 розрядні біти цифрового коду.

Біти 5-0 Резерв. Завжди читається як 0.

Оскільки біти D0 D1 містять у собі похибку (через нестабільність напруги ГСН) то ними можна знехтувати і цифровий результат записати у вигляді 8 старших біт D9 – D2 регістра FIFO. Загальна формула отримання цифрового результату є:

( I )
де UREFL0 – нульова напруга (=0В); UREFHI – опорна напруга (=5.14В).

.setsect “.text”, 0FE00h; адреса(початок) у програмній памяті першої команди

START:
LDP #224; вибір сторінки пам’яті даннях в якій знаходяться регістри
АЦП
SPLK #0903h,32h; загрузка КС
START1:
LAR AR0,#300h; загрузка регістру AR0 константою30016 (адреса пам’яті
даних куди буде записано першу із 100 вибірок.
LAR AR1,#100; кількість вибірок

LOOP1
BIT 32h,7; перевірка закінчення обробки АЦП
BCND LOOP1, NTC
SPLK #0903h,32h; початок нової вибірки (загрузка КС)
CALL ADC; визов подрограми розрахунку результату
MAR *,AR0; організація запису у памать
LDP #5
SACL 0h
SACL *+,0,AR1
BANZ LOOP1,*-
B START1
ADC: ; подрограма розрахунку результату
LACC 36h; загрузити у акумулятор результат обробки АЦП з
регістра FIFO за адресою
(пам’ять даних) 703616 та 8х здвиг праворуч.
ROR
ROR
ROR
ROR
ROR
ROR
ROR
ROR
RET ;повернення до основної програми
Розрахунок керуючого слова для портів вводу/виводу

Таблиця 1

Адреси регістрів в пам’яті даних:
OCRB – 709216
PCDATDIR- 709C16

Згідно з таблицею 1 запишемо керуюче слово:
КС1=XXXX XX01 0000 00112
Це слово записується у мультиплексорний регістр OCRB за адресою (память даних) 709216. Таким чином здійснюється вибір однієї із функцій (в данному випадку функції вводу/виводу).
КС2=1111 1111 ДДДД ДДДД2
Це слово записується у регістр PCDATDIRза адресою. (память даних) 709C16. Перші дві старші тетради КС означають що каналиС0-С7 будуть працювати на вивод. Байтом ДДДД ДДДД2 задаються дані які необхідно вивести (в даному випадку старші 8 біт з результату обробки АЦП

Складання програми для видачі цифрового коду на порти вводу/виводу.

LDP #5h; сторінка пам’яті даних
SACL 0h; зміст (2 молодших байти)ACC ® у пам’ять 8016
LACC #0ff00h; FF00 ®ACC
ADD 0h; зміст пам’яті даних +ACC
LDP #225; сторінка пам’яті даних
SPLK #0103h,12h; загрузка КС1 порта вводу/виводу
SACL 1Ch; загрузка КС2 порта вводу/виводу
LDP #5h; сторінка пам’яті даних
LACC 0h; пам’ять даних 28016 ® ACC
Об’єднуючи програму для перетворення аналогового сигналу у цифровий код та програму для видачі цифрового коду на порти вводу/виводу отримаємо:

START:
LDP #224
SPLK #0903h,32h
START1:
LAR AR0,#300h
LAR AR1,#100

LOOP1:
BIT 32h,7
BCND LOOP1, NTC
SPLK #0903h,32h
CALL ADC
LDP #5h
SACL 0h
LACC #0ff00h
ADD 0h
LDP #225
SPLK #0103h,12h
SACL 1Ch
LDP #5h
LACC 0h
LDP #224
MAR *,AR0
SACL *+,0,AR1
BANZ LOOP1,*-
B START1
ADC:
LACC 36h
ROR
ROR
ROR
ROR
ROR
ROR
ROR
ROR
RET