Микропроцесорски системи/Теорија

Извор: SI Wiki
Пређи на навигацију Пређи на претрагу

Питалице долазе на теоријским деловима обе предиспитне обавезе и свих испита на предмету. Типови питања су јако слични између рокова, па су зато испод набројана типична питања која се могу појавити на теоријском делу испита, дати примери питања и набројани корисни ресурси одакле се може прочитати више о њима. Уколико објашњења дата овде нису довољно јасна, погледати примере задатака ради разјашњења.

Први блок

Улазак и излазак из прекидне рутине

Код овог типа питања битно је разумети како функционише неколико механизама у Cortex-M3 микропроцесору. Текст испод парафразиран је из Cortex-M3 Programming Manual са страница 37 и 38:

  • Stacking: операција чувања одређених регистара на стеку приликом уласка у прекидну рутину. На стеку се чувају следећи регистри (то се зове stack frame) у редоследу који је дат:
    • R0, R1, R2, R3 и R12
    • Повратна адреса прекидне рутине (односно PC регистар)
    • Програмски статусни регистар (PSR)
    • Link register (LR)
    Након stacking, SP показује на најнижу адресу у stack frame (односно на R0). У CCR регистру бит STKALIGN може бити постављен на 1, у ком случају се дешава поравнање стека на дуплу реч.
    За овај механизам углавном буде дат програм на асемблеру који са стека учита одређени податак, па се мора одредити која је вредност тог податка.
  • Late-arriving: Паралелно са stacking се дохвата адреса руковаоца у IVT, па ако се до учитавања прве инструкције у прекидној рутини појави изузетак вишег групног приоритета прелази се на његово извршавање.
  • Tail-chaining: ако након извршавања тренутне прекидне рутине постоји следећи прекид који испуњава услове извршавања, прелази се на његово извршавање без уклањања вредности из stack frame.
    За овај механизам питања углавном буду бројање колико пута се десио tail-chaining под одређеним условима.

Примери питања:

Почетна инструкција програма

Адреса адресе прве инструкције програма јесте 0x00000004, тако да је адреса прве инструкције програма штагод да пише у меморији на адреси 0x00000004. Ова једноставна питалица може често да се појави на различитим роковима и одговор на њу може се наћи на страни 15 од Cortex-M3 Programming Manual.

Примери питања:

Условно извршавање инструкција

Овај механизам објашњен је на страни 56 у Cortex-M3 Programming Manual, у одељку 3.3.7 Conditional execution. Питања из ове области обично садрже барем једну it инструкцију и неке комбинације add, sub, cmp и mov инструкција са суфиксом s (ажурира програмски статусни регистар!) или без њега (не ажурира програмски статусни регистар!), а на крају се тражи вредност у неком од коришћених регистара. Треба нагласити да cmp инструкција увек ажурира програмски статусни регистар.

Примери питања:

Bit-band alias

У овом типу задатка тражи се да се за неки бит у SRAM одреди bit-band alias адреса. На страни 27 Cortex-M3 Programming Manual објашњен је овај механизам и наведене следеће формуле:

  • bit_word_offset = (byte_offset x 32) + (bit_number x 4)
  • bit_word_addr = bit_band_base + bit_word_offset

где је:

  • byte_offset померај неког бајта од почетка SRAM (SRAM почиње на 0x20000000),
  • bit_number број бита који се тражи (дат у задатку)
  • bit_band_base почетак bit-band alias региона (почиње на 0x22000000)

Примери питања:

Режими рада

Иако нема примера овог питања, може да дође питање у ком режиму се налази процесор приликом извршавања прекидне рутине (handler mode), а у ком приликом главног програма (thread mode). Овај податак се може наћи на страни 13 у Cortex-M3 Programming Manual, у одељку 2.1.1 Processor mode and privilege levels for software execution.

Intel HEX формат

У оваквом задатку потребно је растумачити шта пише у једној Intel HEX датотеци за коју је дат садржај и истакнута синтакса. Опис овог формата може са наћи на Википедији, али такође и на ARM-овом и Intel-овом сајту.

Примери питања:

Иницијална вредност SP

Регистар SP своју иницијалну вредност добија са адресе 0x00000000. У овом типу задатка буде један асемблерски програм у коме се ради формирање IVT (чији је нулти улаз заправо вредност SP), а затим се у програму негде та вредност користи, и резултат извршавања зависи од те вредности. Главна идеја је прочитати вредност SP са прве локације у вектор табели из асемблерског програма.

Примери питања:

Тренутна прекидна рутина

Још један чест задатак јесте асемблерски програм у којем се изазове одређени прекид на неки начин, а затим се у прекидној рутини у одређени регистар упише вредност IPSR и пита која је вредност уписана. Овај тип задатка није превише шаблонски у делу где се изазива прекид, али када се сазна који је прекид изазван његов број се лако може сазнати из Cortex-M3 Programming Manual, страна 32, 2.3.2 Exception types.

Примери питања:

Одређивање изузетка на основу описа

У овом типу задатка дат је опис једног типа изузетка у Cortex-M3 процесору, практично преведен из Cortex-M3 Programming Manual, са стране 32, 2.3.2 Exception types, и дато је више назива изузетака за бирање.

Примери питања:

Други блок

Пинови за активацију тајмера

У овом типу питања траже се пинови чија одговарајућа промена окида односно стартује бројање на одређеном тајмеру микроконтролера. На фигурама са страна 294 и 367 из STM32F103 Reference Manual можемо видети да у сигналу TRGI учествују TIMx_ETR, TIMx_CH1 (преко TI1FP1) и TIMx_CH2 (преко TI2FP2), а на странама 178 и 179 можемо пронаћи одговарајућа мапирања пинова за те канале микроконтролера. У теорији, у том сигналу би могао да учествује и сигнал TIMx_CH3 (преко XOR кола које улази у TI1) али ово никада није означено као тачан одговор.

Примери питања:

Фреквенција HCLK

Постоји неколико варијанти овог питања где је дата фреквенција интерних или екстерних осцилатора а пита се за максималну радну фреквенцију (HCLK). Одговор на ово питање се увек може наћи на фигури 8 са стране 93 од STM32F103 Reference Manual, где ти сигнали такта обично пролазе кроз PLL и евентуално се одсецају на одговарајуће максимуме као што је прописано шемом. Обратити пажњу и на текст испод фигуре!

Примери питања:

Број догађаја пред UEV

Овај тип питања пита колико пута се којих догађаја мора десити како би се десио Update Event (UEV) неког тајмера. Одговор је суштински да треба да се деси за један више пута него што је вредност repetition counter, при бројању навише се дешава counter overflow, док се при бројању наниже дешава counter underflow.

Примери питања:

Начин бројања тајмера

Иако нема забележеног тачног текста овог питања, може да дође питање да се означи на који начин може да броји тајмер, и на то је потребно одговорити:

  1. навише,
  2. наниже, и
  3. комбиновано.

Активирање EXTI преко RTSR

Питање пита за вредност EXTI_RTSR регистра која мора бити уписана како би се омогућили прекиди на датим пиновима. На страни 212. од STM32F103 Reference Manual можемо видети да за сваку EXTI линију постоји по један бит у RTSR регистру, док на страни 210. можемо видети да пиновима са индексом 0 одговара линија 0, пиновима са индексом 1 одговара линија 1, и тако даље. На основу тога, поставимо одговарајуће битове броја на основу датих пинова, и то је тражени одговор.

Примери питања:

Auto-reload регистар

Често умеју да дођу питања где су фигуре 59, 60, 70 или 71 исечене на неком делу и студенти се питају за одговарајуће вредности након исеченог дела. За овакво питање је потребно пронаћи одговарајућу фигуру из документације и видети на који начин измена Auto-reload preload регистра утиче на shadow регистар.

Примери питања:

Магистрале за периферије

Могу да дођу питања која питају на којој се магистрали налази одређена периферија. Ова информација се може наћи на неколико места у STM32F103 Reference Manual, а најбоље на страни 50, 3.3 Memory map.

Примери питања:

Трећи блок

USART грешке

Као једино често теоријско питање из овог блока може се издвојити питање о грешкама приликом спровођења USART протокола. USART комуникација изгледа тако што се магистрала држи на вредности 1 док по њој нема комуникације, затим почетни бит поруке има вредност 0 (start bit), после њега долази одређен број битова података (дат у задатку) у који је (опционо) укључен и бит парности (последњи међу битовима података), и на крају долази stop bit који мора имати вредност 1. Овде су могуће две грешке протокола:

  • Parity error: у задатку је дато да ли се ради о парној парности или непарној парности, тако да ако је збир битова података (укључујући и бит парности) паран приликом непарне парности, или непаран приликом парне парности, дошло је до ове грешке.
  • Framing error: ова грешка се десила уколико на месту где треба да стоји stop bit не стоји вредност 1.

Примери питања:

Некатегорисана питања

Следећа питања не припадају ниједном року, али спадају у једну од категорија питања изнад.

Питање 1

Која вредност се налази у регистру R1 након извршавања дате секвенце асемблерских инструкција? Одговор унети према формату неозначених хексадецималних литерала у C програмском језику ширине 32 бита.

mov r0, 6
mov r1, 9
cmp r1, r0
itttt gt
subsgt r1, r1, r0
subsgt r1, r1, 5
addgt r1, r1, r0
subgt r1, r1, #4

Приказ очекиваног формата одговора за произвољно одабрану вредност 1 јесте:

0x00000001

Одговор: 0xFFFFFFFE

Питање 2

Која вредност се налази у регистру R1 након извршавања дате секвенце асемблерских инструкција? Одговор унети према формату неозначених хексадецималних литерала у C програмском језику ширине 32 бита.

mov r0, 5
mov r1, 7
cmp r1, r0
ittet gt
subsgt r1, r1, r0
subsgt r1, r1, 3
addle r1, r1, r0
subgt r1, r1, 2

Приказ очекиваног формата одговора за произвољно одабрану вредност 1 јесте:

0x00000001

Одговор: 0x00000004

Напомена: на страни 58 у Cortex-M3 Programming Manual, у одељку 3.3.7 Conditional execution, лоше је написан услов за LE суфикс, исправан услов је "Z = 1 or N != V" уместо "Z = 1 and N != V" како је написано у документацији.

Питање 3

Колика је максимална радна фреквенција (HCLK) микроконтролера STM32F103R6 уколико се користи HSE осцилатор који на свом излазу производи сигнал такта фреквенције 8MHz? Одговор унети у мегахерцима без навођења ознаке јединице.

Одговор: 72

Објашњење: Као што пише на фигури са стране 93 од STM32F103 Reference Manual, HSE такт може проћи кроз PLL који може да његову фреквенцију помножи до 16 пута, али је максимална фреквенција HCLK 72MHz, што је мање од 128MHz колико би иначе могло да буде.