27 сентября 2013 г.

Нататкі аб RL78: Прывітанне свет, альбо запальванне святлодыёда

Традыцыйна, вывучэнне новай мовы праграмавання пачынаецца з напісання самай простай праграмы, якая толькі і робіць, што друкуе прывітанне свету. Гэтак абстаяць справы на вялікіх кампутарах. На маленькіх жа ў нас няма дапаможнікаў у выглядзе АС і нам прыйдзецца рабіць усё самім. І сярод гэтага "усяго", вывад прывітання ня самая простая справа. Таму, для маленькіх кампутараў (мікрокантролераў) уводная праграмай з'яўляецца запальванне альбо мірганне святлодыёдам.

Зыходны код

#include <iodefine.h>
#include <iodefine_ext.h>

int main (void)
{
    PM1 &= ~(1 << 5);
    POM1 &= ~(1 << 5);
    P1 |= (1 << 5);
    for (;;);
}

Каб запаліць святлодыёд патрэбны ўсяго тры дзеі: запісаць некую магічную лічбу ў не менш магічны рэгістр, і так тры разы.

Разгледзім праграму па частках. Першае: каб кампілятара ведаў пра рэгістры трэба далучыць файлы з іх апісаннем. Гэтыя файлы ствараюцца для кожнага мікракантролера асабіста ў e2studio (пры стварэнні праекта). На жаль, e2studio працуе выключна пад АС Windows.

Парты ўвода-вывада здольны працаваць у розных рэжымах. Таму, каб пазначыць патрэбны рэжым, трэба запісать адпаведныя значэнні ў рэгістры. Гэта другое.

Апошнім ідзе бясконцы цыкл, бо мікракантролеры вельмі песімістычныя — у іх праграм няма выхаду.

Усё, што датычыцца работы мікракатролера, трэба шукаць на сайце вырабніка. З усяго шэрага дакументаў нас цікавіць "RL78/G14 User's Manual: Hardware" больш за ўсё. У гэтым кіраўніцтве карыстальніка ёсць апісанне ўсіх модуляў і электрычныя характарыстыкі мікракантролера.

Парты апісаны ў раздзелы "CHAPTER 4 PORT FUNCTIONS". Рэжымы працы парта P1 вызначаюць рэгістры P1, PM1, POM1, PMC1 ды PU1 (у некаторых выпадках яшчэ PMS, ADPC, PIORx ды GDIDIS). Кожны з іх вызначае адну з магчымасцяў парта. Кожны порт складаецца з 8 сігналаў, але не абавязкова што усе яны прысутнічаюць у мікракантролеры (напрыклад, у R5F104FEAFP з парта P0 ёсць толькі P00 ды P01).

Рэгістры

Рэгістры Px выкарыстоўваюцца для вываду, альбо ўводу значэнняў.
Рэгістры PMx вызначаюць як порт сябе паводзіць, як выхад або ўваход.
Рэгістры PMCx вызначаюць ці выкарыстоўваецца порт як лічбавы або для працы іншых модуляў.
Рэгістры POMx вызначаюць рэжым вываду: двухтактны або з адкрытым стокам.
Рэгістры PIMx вызначаюць якія узроўні напружання на ўваходзе вызначаюць 1 ды 0: КМАП або ТТЛ.
Рэгістры PUx вызначаюць ці падцягваецца порт да шыны харчавання.

Каб вызначыць рэжым працы парта не абавязкова наладжваць усе рэгістры. Напрыклад калі порт сканфігураваны як уваход, значэнне адпаведнага біта ў рэгістры POMx нас не клапаціць, бо ён ні на што не ўплывае.

Такім чынам, наша праграма наладжвае порт P15 як двухтактны (POM1 &= ~(1 << 5)) выхад (PM1 &= ~(1 << 5)), а потым выводзіць ў яго 1 (P1 |= (1 << 5)).

Больш наглядна, сэнс рэгістраў адлюстраваны на схемах партоў. Напрыклад, схема парта P15:

На схему чырвоным колерам я дадаў значэнні рэгістраў. Відавочна, што нулі ў бітах POM15 ды PM15 уключаюць выхадны буфер у двухтактным рэжыме, а значэнне біту P15 трапляе на ножку мікракантролера праз буфер.

Прыклады іншых наладак парта

Некалькі прыкладаў наладкі парта P15:
    /* уваход КМАП з падцяжкай */
    PM1 |= (1 << 5);
    PU1 |= (1 << 5);
    PIM1 &= ~(1 << 5);

    /* выхад з адкрытым стокам і падцяжкай */
    PM1 &= ~(1 << 5);
    POM1 |= (1 << 5);
    PU1 |= (1 << 5);

Праверка

Наступным крокам будзе будаванне прашыўкі. Каб збудаваць прашыўку, трэба ўвесці даволі доўгія загады ў тэрмінале. Таму, каб аблегчыць справы, я падрыхтаваў праект, каторы змяшчае ўсё патрэбнае і будуецца ў тэчцы 00-led простым загадам:
make

Праект: https://github.com/msalov/rl78-samples-R5F104FEAFP

Застаўся апошні крок — запраграмаваць мікракантролер і убачыць запалены святлодыёд:
make flash

Комментариев нет:

Отправить комментарий