EB1048590

Page 1


Programujeme dvoujádrové kontrolery

Ing. Vojtěch Skřivánek

// nastavi Master obvody pro GPIO

GPIO_setMasterCore(DEVICE_GPIO_PIN_LED2, GPIO_CORE_CPU2); cpu2Start();

// CPU1 musi inicializovat GPIO i pro CPU2

GPIO_setPadConfig(DEVICE_GPIO_PIN_LED2, GPIO_PIN_TYPE_STD);

GPIO_setDirectionMode(DEVICE_GPIO_PIN_LED2, GPIO_DIR_MODE_OUT);

nastavUart();

SCI_writeCharArray(SCIA_BASE, "Zapiste 1/0 pro zapnuti/vypnuti LED", for(;;)

{ SCI_readCharArray(SCIA_BASE, &IpcRegs.IPCSENDDATA, 1U); if((IpcRegs.IPCSENDDATA == '0') || (IpcRegs.IPCSENDDATA == '1')) {

Poděkování

Děkujifirmě

SIEMENS

zapodporupřipsanítétoknihy.

Vydání první 2025

© Ing. Vojtěch Skřivánek

© Mgr. Tomáš Zahradníček - TZ-one

ISBN: 978-80-7539-213-8 (PDF verze)

Obsah

1Úvod 1

1.1Motivaceknihy

2STM32WL55 3

2.1Vývojovádeska

2.2Vývojovéprostředí ...........................................4

2.3Založeníprojektu

2.4MeziprocesorovákomunikacekontroleruSTM32WL55

2.4.1SdílenápaměťaIPCCkanály

2.4.1.1ProgramjádraCPU1

2.4.1.2ProgramjádraCPU2

2.4.2Hardwarovýsemafor

2.4.2.1ProgramjádraCPU1

2.4.2.2ProgramjádraCPU2

2.4.2.3Úpravaprogramů

3LPC55S69

3.1Vývojovádeska

3.2Vývojovéprostředí

3.3Založeníprojektu

3.3.1Projektprovedlejšíjádro

3.3.2Projektprohlavníjádro

3.4MeziprocesorovákomunikacekontroleruLPC55S69

3.4.1Sdílenápaměť

3.4.2Datováschránka

4CY8C6245

4.3Založeníprojektu

4.3.0.1ProjektprojádroCM0

4.3.0.2ProjektprojádroCM4

4.4MeziprocesorovákomunikacekontroleruCY8C6245

4.4.1SdílenáRAM

4.4.2IPCPřerušení

4.4.2.1OvládáníLEDpomocípříznakuapřerušení

4.4.3IPCkomunikačníkanály

4.4.3.1Mutex

4.4.3.2Poloduplexnípřenosdatpomocíjednohokomunikačníhokanáluapřerušení ..62

5dsPIC33CH512MP508

5.1Vývojovádeska

5.2Vývojovéprostředí

5.3Založeníprojektu

5.3.1Projektprovedlejšíjádro

5.3.2Projekthlavníhojádra

5.4MeziprocesorovákomunikacekontrolerudsPIC33CH512MP508

5.4.1Virtuálnípiny

5.4.1.1Napojenídigitálníkomunikacepomocívirtuálníchpinů

5.4.2Přerušení

5.4.2.1OvládáníLEDpomocípříznakuapřerušení

5.4.2.2OvládáníLEDpomocígenerátoruspouštěníperiferií

5.4.3Datovéschránky

5.4.3.1Přenosdatpomocídatovýchschránek

5.4.4MSIzásobníkovápaměťFIFO

5.4.4.1PřenosdatpomocízásobníkovépamětiFIFO

6TMS320F28379D

6.1Vývojovádeska

6.2Vývojovéprostředí ...........................................99

6.3Založeníprojektu

6.3.1ProjektproCPU1

6.3.2ProjektproCPU2

6.3.3Nahráníprogramudokontroleru

6.4MeziprocesorovákomunikacekontroleruTMS320F28379D

6.4.1Časovačasemafory

6.4.1.1Časovač

6.4.1.2SemaforpřístupukpamětiFlashanastaveníhodinovéhosignálu

6.4.2SpuštěníCPU2 .........................................109

6.4.2.1ProgramCPU1

6.4.2.2ProgramCPU2

6.4.3Příznak .............................................111

6.4.3.1BlikáníLEDsynchronizovanépomocípříznaků

6.4.4Přerušení ............................................114

6.4.4.1OvládáníLEDpomocísériovékomunikaceapřerušení ..............114

6.4.4.2OvladáníLEDpomocísériovékomunikaceapřerušeníspříznakem .......118

6.4.5Sdílenédatovéregistry .....................................121

6.4.5.1OvládáníLEDpomocísériovékomunikaceapřerušenísdatovýmregistrem ..122

6.4.6KomunikačníRAM .......................................124

6.4.6.1Přenosdatpomocíkomunikačnídatovépaměti ..................125

6.4.7SdílenáRAM ..........................................127

6.4.7.1Přenosdatpomocísdílenédatovépamětiazměnamajiteleperiferie ......127

6.4.8Příkazovýregistr ........................................130

6.4.8.1SkokCPU2naprogram ...............................131

6.4.8.2SkokCPU2nafunkci ................................134

6.4.9PoužitíkoprocesoruCLA ...................................137

6.4.9.1BlikáníLEDpomocíCLA .............................138

Kapitola1 Úvod

Vdnešnímsvětětechnickéhorozmachujsoupožadavkynavýkonaenergetickoušetrnostelektronických zařízenístálevyšší.Důvodyjsounapříkladneustálesezvyšujícístandardyzákazníků,čiintegraceumělé inteligencetam,kdeještědonedávnanebyla.Ataksevpraxistává,žejednojádrovémikrokontroleryjiž nejsoudostatečněvýkonné.Ztohotodůvodusenatrhustálečastějiobjevujíkontrolery,kteréobsahujívíce nežjednuprocesorovoujednotku.

Výhodyvícejádrovýchkontrolerůjsouzřejmé.

• Prvnívýhodoujepoměrcenyavýkonu.Jedenvícejádrovýkontrolerjelevnějšívariantanežvícejednojádrových.Důvodemje,žejsouobějádranajednomčipu,nezabírajítedytolikmístanaplošnémspoji, kterýtedymůžebýtmenší.Komunikacemeziprocesoryjerychlejší.Jádrasdílejípamětiaperiferie, kterýchjezpravidladostnato,abypokrylynašepožadavky,takženeplýtvámezdrojijakovpřípadě víceplněvybavenýchjednojádrovýchkontrolerů.

• Druhouvýhodoujepoměrvýkonuaspotřebyenergie.Efektivitakontrolerusesnižuje,čímvícesejeho taktovacíkmitočetblížíjehomaximálníhranici.Řešenímjetedyvícejádrovýkontroler,jehožprocesorové jednotkypracujínanižšíchkmitočtech,kdejejejichefektivitavysoká.Totořešeníjeenergetickyvýhodnějšínežnáhradakontroleremsvyššímmaximálnímkmitočtem,nebovíceseparovanýmikontrolery.

• Dalšívýhodoujelepšíseparaceprogramu.Vícejaderposkytujemožnostrozdělitprogramnapříklad načasověkritickoučást,vyžadujícívyššívýkon,audržovací"pomalý"program.Takéjemožnépoužít kombinacivíceoperačníchsystémů.Programjemožnérozdělitnačásti,kterémusíčinemusísplňovat požadavkynabezpečnost.Vícejaderumožňujerychlejizpracovávatvětšímnožstvípřerušení.Víceseparovanýchprogramůjesnazšíladit.Všechnytytovýhodymajíioddělenémikrokontrolery,avšak,jak jižbylořečeno,vícejádrovýkontrolertotodokážeefektivněji.

Častýmvyužitímdruhéhojádrakontrolerujejehopoužitíkimplementacikomunikačníchprotokolů,jako jsounapříkladBluetooth,WifineboModbuskomunikace.

Abychomnebylijednostranní,prácesvícejádrovýmikontrolerymáisvéneduhy.

• Pokudnejsoujádradobřespravována,můžebýtjichenergetickáspotřebavyšší.

• Pokudnenípotenciáljadernaplnovyužit,jdeodražšířešení,nežjepoužitívýkonnéhojednojádrového kontroleru.

• Laděníprogramumůžebýtvpřípaděmeziprocesorovékomunikacenáročnější.

• Správapamětianávrhprogramumůžebýtkomplikovanější.

Jakjevidět,vícejádrovékontrolerynabízívýhodyinevýhody.Velmizáležínajejichpoužitíprodanýúčel. Jednojealejisté-vdnešnímsvětěkladoucímstálevětšídůraznavýkon,budoutytokontrolerystálečastěji používányvevestavěnýchsystémech.

1.1Motivaceknihy

Tatoknihasezabývádvoujádrovýmikontrolory,atopředevšímproto,žesevevestavěnýchsystémech, hnedpojednojádrových,vyskytujínejčastěji.

Knihasikladezacílčtenářeseznámitsběžnýmidvoujádrovýmimikrokontrolery,kteréjsoudostupnéna trhu.Knihazdalekanepokrývávšechnyvariantykontrolerů,alezaměřujesenacenovědostupnékontroleryk běžnémuvyužitídodávanénejvětšímivýrobcikontrolerů.

Čtenářseokaždémvtétoknizeuvedenémkontrolerudozví,jakoumáarchitekturu,jakémožnostimeziprocesorovékomunikacenabízí,jakjevyužívatajakézdrojemumohoupomocipřitvorběvlastníhoprogramu.

Knihasezabývápředevšímspecifickýminástrojimeziprocesorovékomunikacekaždéhokontroleru.Obecné radyapostupyprogramováníaplikacíprovícejádrovékontrolerynejsounáplnítétoknihy.

1.2Strukturaknihy

Knihaobsahujecelkempěthlavníchkapitol.

Každáznichsezabývájednímdvoujádrovýmkontrolerem.Každýkontrolerjevyráběnjinoufirmou,aby bylyvidětrozdílyvarchitektuřekontrolerů,vývojovýchprostředích,založeníprojektu,psaníprogramua hlavněmožnostechmeziprocesorovékomunikace.

Vkaždéztétokapitoljenejprvepopsánkontroleravývojovádeska,sekterousepracujevpříkladech. Všechnyvývojovédeskyjemožnéběžnězakoupitnainternetovýchobchodechprodávajícíelektrotechnické součástky.Bylyvybíránytak,abybylycenovědostupné.Kontrolerybylyvolenynazákladědostupnostia výbavymeziprocesorovékomunikace.

Dálejepopsánainstalaceapoužitívývojovéhoprostředí,kteréjevyužitoprotvorbupříkladů.

Samostatnápodkapitolajevěnovánazaloženíprojektuprodvoujádrovýkontrolervdanémvývojovém prostředí.Jakzjistíme,nevždyjetakovávěcjednoduchá.

Poslednínejobsáhlejšípodkapitolasejižzabývánástrojimeziprocesorovékomunikacedanéhokontroleru. Povýčtuvšechnástrojůjsoutytonástrojeblížepopsányaprácesnimijenásledněukázánanapříkladech. Všechnypříkladyaerratajemožnéstáhnoutnawebovéstránce www.ProgramujemeKontrolery.cz.

1.3Fontytextu

Anglickézkratky,názvynabídekapolíčekvývojovéhoprostředíanázvyregistrůjsouvždynapsánytučnou kurzívou-např. AutoReload registr.Ačbybylokonzistentnějšípoužívatvknizebuďpouzečeské,nebopouze anglickénázvosloví,existuje-ličeskýekvivalent(např.názvuregistru),jepoužit,jelikožlépezapadnedověty, kterájepaksrozumitelnější.

Odkazynapoužitézdrojejsouuvedenyčíslemvhranatýchzávorkách–např.[1].

Odkazynabodyvobrázcíchagrafechbudoupopsánytučnýmpísmemvzávorce-např. (3).

Kapitola2 STM32WL55

32bitovýmikrokontroler STM32WL55 odfirmy STMicroelectronics jekontrolersedvěmajádry ARM .Jádra Cortex-M4 (označovánojako CPU1 nebo M4 )a Cortex-M0+ (označovánojako CPU2 nebo M0P)pracujínamaximálnífrekvenci48MHz.

Obějádrasdílejíveškerouprogramovouadatovoupaměť.Sdílejísetedyivšechnyspeciálnífunkčníregistry, zčehožvyplývásdílenéužíváníperiferií.Obějádramohoubezjakéhokolivpřiřazenívyužívatjakoukoliv periferii.Tomůžebýtvněkterýchpřípadechvelicevýhodné,jindynaopak.

Periferietohotokontrolerunijaknevybočujízestandardnívýbavykontrolerůurčenýchproběžnépoužití. Jehospecialitoujezabudovanýmodulprobezdrátovoukomunikaci LoRa.Tentomodulumožňujesnadnýa energetickýúspornýbezdrátovýpřenosdat.Díkytétokombinaciperiferiíjekontrolervhodnýpropoužitív oblasti IoT .

2.1Vývojovádeska

Vtétokapitolebudemepoužívatvývojovoudesku NUCLEO-WL55JC1

Deskaobsahujeprogramátora debugger sintegrovanýmpřevodníkemsériovékomunikace UART na USB (1) (spodnístranavývojovédesky).

Mimokontroleru (2) avelkéhomnožstvíkonektorů(včetněmožnostipřipojeníantényproBluetooth komunikaci)senadescenacházítřiuživatelské LED (3),třiuživatelská (4) ajednoresetovacítlačítko (5)

2.2Vývojovéprostředí

Výrobcečipuposkytujezdarmavývojovéprostředí STM32CubeIDE,vekterémjsouvytvořenyvšechny příkladytétočásti.

Totoprostředízaloženénaprostředí Eclipse vsoběobsahujekonfigurátorperiferiíčipu,programovánía správuprojektu,nahráníprogramudomikrokontroleruamožnostjeholadění.

Sinstalacívývojovéhoprostředníseautomatickynainstalujeiovladačprogramátoru,kterýjeumístěnýna vývojovédescedesce,apřekladačzezdrojovéhokódunastrojový.

STM32CubeIDE jemožnéporegistracinawebovýchstránkáchfirmySTMicroelectronics www.st.com stáhnoutzcelazdarma.Nejsnazšímzpůsobemnalezeníodkazukestaženíjezadatdointernetovéhovyhledávače heslo„STM32CubeIDE“apravděpodobněhnedprvníodkazbudemířitnasprávnoustránku,kdenajdetetaké návodnainstalaciamanuálkpoužití.

Věřím,ženenínutnépopisovatinstalacivývojovéhoprostředí,kterájeplněautomatickáaintuitivnía nainstalujeivšechnynutnéovladače.

2.3Založeníprojektu

Pospuštěnívývojovéhoprostředívyberemezhornínabídkymožnost File->New->STM32project.Po chvíliseotevřeoknosnabídkouvšechkontrolerů,kteréfirma STM vyrábí.Mysevšakpřepnemedokarty svýčtemvšechvyráběnýchvývojovýchdesek.Vtétonabídcedovyhledávacíhofiltrunapíšemenázevnámi používanévývojovédeskyazvolímejivevýčtudesek.

Povýběrudeskyuvidímenovédialogovéokno,vněmžurčímenázevaumístěníprojektu.Nastavení nechámevevýchozímstavuastisknemetlačítko Finish

Popotvrzenínastaveníperiferiídojejichvýchozírežimusevytvoříprojekt,kterýnaleznemevlevéčásti prostředí.Hlavníprojektobsahujekonfiguračnísoubor(spříponou .ioc)advavnořenéprojektystotožnou strukturou.Každýzvnořenýchprojektůpatříjednomujádru.Vevnořenýchprojektechnaleznemeovladače, knihovny,alepředevšímsouborsuživatelskýmprogramem main.c.Takézdenaleznemespojovacíprogramy těchtoprojektů(spříponou .ld).

Kdyždospojovacíchprogramůnahlédneme,uvidíme,žekaždéjádrovyužívájinoučástprogramovéa datovépaměti.Díkytomusevpamětíchprogramyanidatajednotlivýchjadernepřekrývají.

SpojovacíprogramjádraCPU1

SpojovacíprogramjádraCPU2

Adresaprogramu,kamjádroporesetuskočí,jepředemdánahodnotouregistru FLASH_SRRVR (FLASHSecureSRAMstartaddressandCPU2ResetVectorRegister).Nižších16bitůtohoto registrunazvaných SBRV (CPU2BootResetVector)obsahujeadresovýposunprogramovépaměti.Hodnotajedánavpočtuslov(4bajtů).Výchozíhodnotaadresovéhoposunuporesetukontroleruje 0x8000. Vynásobeno4bajtyjdeoposun 0x20000,cožodpovídáhodnotěvespojovacímprogramujádra CPU20x08020000.Natétoadresesenacházífunkce,kterápoprovedenínezbytnýchinicializačníchoperacískočído hlavníhoprogramu.Tatofunkcesenacházívsouboru(spříponou .s)vesložce Startup.Programjepsánv jazyce assembler

Pokudotevřemesouborsnastavenímkontroleru(spříponou .ioc),spustísegrafickýkonfigurátor.Vněm naleznememimorozloženípinůkontrolerutakéseznamdostupnýchperiferií.

Vevýchozímnastaveníjevětšinapinůpřipravenapronastavení,ukteréhovýrobcepředpokládá,žejej budemechtít.Tosetýkánapříkladipinů,nakteréjsoupřipojenéuživatelské LED asériovákomunikace.

Abychommohlisériovoukomunikacipoužívatoběmajádry,jetřebavseznamuperiferiíaktivovat USART2 proobějádra.Inicializacipřenechámejádru CPU1 -tedy CM4 .Toznamená,ževevygenerovanémprogramu jádra CPU1 budevolánainicializačnífunkcetétoperiferie.

Piny(PA2 a PA3 )aparametrysériovékomunikaceužjsounastaveny,anemusímetedynicměnit. Rychlostpřenosujenastavenana115200bitůzasekundu.

Pinyprouživatelské LED (PB9 , PB11 a PB15 )jsoujižtaképřipraveny.Vnašichpříkladechbudeme využívatalevyužívatpouze LED1 připojenounapin PB15 .Využívatjibudejádro CPU1 .Abybylpinve vygenerovanémprogramujádra CPU1 inicializovánknihovnífunkcí,jetřebatentopindanémujádrupřiřadit. (Pinmůžebýtpoužívánoběmajádry,aleinicializaceproběhnepouzevjednomznich.)Toprovedemekliknutím pravéhotlačítkamyšinadanýpinavýběremjádra,kterésipinrezervuje.

Abychommohlivpřerušenípoužívatknihovnífunkciprozpoždění HAL_Delay(),musímenastavit vysokouprioritupřerušenísystémovéhočasovače(systick).Toudělámevnabídkách NVIC1 a NVIC2 tak, žeprioritutohotopřerušenínastavímenanulu.

Kdyžnyníkonfiguraciuložíme,dialogovéoknonámnabídnevygenerováníkódu,kterépřijmeme.Soubory main.c vobouprojektechnyníobsahujíinicializačnífunkce,kteréodpovídajínastavenívgrafickém konfigurátoru.

Pokudsepodívámedohlavníhoprogramujádra CPU1 ,uvidímevněmknihovnífunkcepronastavení hodinovéhosignáluaperiferií.Dálevnívidímefunkcinaspuštěnídruhéhojádra.Tuvnašemukázkovém projektu,kterýbudemepoužívatjakošablonu,zakomentujemeanahradímevlastnímpříkazemsestejnou funkcionalitou.

/*Initializeallconfiguredperipherals*/ MX_GPIO_Init();

MX_USART2_UART_Init(); /*USERCODEBEGIN2*/

/*USERCODEEND2*/

/*BootCPU2*/ //HAL_PWREx_ReleaseCore(PWR_CORE_CPU2);

/*Infiniteloop*/ /*USERCODEBEGINWHILE*/

//zapnejadroCPU2 PWR->CR4 |= PWR_CR4_C2BOOT; while (1) { /*USERCODEENDWHILE*/ /*USERCODEBEGIN3*/ } /*USERCODEEND3*/ }

Jedůležité,abychomuživatelskýkódvždyumisťovalimezikomentáře /*USERCODEBEGIN*/ a /*USERCODEEND*/ .Pokudtakneuděláme,změnímenastavenívgrafickémkonfigurátoruavygenerujemenovýkód,onášuživatelskýkódpřijdeme.

Nynísepodívejmedohlavníhoprogramujádra CPU2 (CM0 ).Vněmchybívolánívygenerovanéfunkce proinicializacisériovékomunikace.Inicializaceperiferiejeprovedenavjádru CPU1 ,anenítuprotonutná.

Periferiimůžemebezproblémůpoužívatpomocízápisůačteníregistrů.Pokudalechcemepoužívatknihovní funkcenajejíovládání,musímeizdemanuálněpřidatjejívolání.Kinicializaciperiferietedydojdedvakrát, alejelikožjdeostejnénastavení,nevadíto.

/*Initializeallconfiguredperipherals*/ MX_GPIO_Init(); /*USERCODEBEGIN2*/ /*USERCODEEND2*/

/*Infiniteloop*/ /*USERCODEBEGINWHILE*/ MX_USART2_UART_Init();

while (1)

{ /*USERCODEENDWHILE*/ /*USERCODEBEGIN3*/ }

/*USERCODEEND3*/ }

Šablonyobouprojektůjsouhotové.Nynínastavímeprojekttak,abypřeložilanahrálobaprogramy zároveň.

Vnabídceprojektůvlevéčástiobrazovkyvyberemeprojekt,kterýmápříponu CM4 .Tojeprojekt hlavníhojádrakontroleru(CPU1 ).Nahornílistěkliknemenatlačítkoladění,kterémáobrázekzeleného brouka.Tímseotevřenabídkavytvořenínovéhoprofiluladěníprogramu.(Pokudjižprofilexistuje,jemožné jejupravitkliknutímnadolusměřujícíšipkuvedletlačítkaladěníaotevřenímnastaveníprofilu.)

Vtétonabídceotevřemekartu Debugger,vekterénastavímechováníporesetu.Zvolíme Connectunder reset azaškrtnememožnost Haltallcores

Vespodníčástitétokartyověříme,žejezaškrtnutamožnost SharedST-LINK .

Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.