![ç»å](https://habrastorage.org/getpro/habr/post_images/e0e/da7/840/e0eda784041bb70778c67e0e99bfcf50.jpg)
ãã€ã¯ãã³ã³ãããŒã©ã®ããã°ã©ãã³ã°ã®åºæ¬ããã¹ã¿ãŒããããšãèããé »åºŠãèªããŸããïŒ æœåšçãªãããžã§ã¯ãã®ã¢ã€ãã¢ãé ã®äžã«ããã€ãæã£ãŠããŸãããããããå®è£ ããããšã¯ãããŸããã ã ããïŒä»ã ãã§ã¯èŠã€ããããšãã§ããªããããè¯ãéå§æéã
ãªããã®è³ªåãHabrã®èŽè¡ã«ãšã£ãŠèå³ããããšå€æããã®ã§ããïŒ ãæ°ã«å ¥ãã«ããã€ãã®æçš¿ãè¿œå ããéãåæããã ãã§ååã§ãããçµè«ã¯ããèªäœã瀺åããŠããŸãã
äžæ¹ãç§ã®çŸåšã®ç°å¢ã«ã¯å€ãã®ããã°ã©ããŒãããŸãããåã蟌ã¿æ©èœã¯ã»ãšãã©ãããŸããã ãã€ã¯ãã³ã³ãããŒã©ã«ã€ããŠåœŒããšè©±ããããšã10幎åã«å€ãã®äººããã€ã¯ãã³ã³ãããŒã©ã«ã€ããŠåãæèŠãæã£ãŠãããšããå°è±¡ãåããŸãã
ãã€ã¯ãã³ã³ãããŒã©çšã®asmã§ã®æžã蟌ã¿ã¯x86ã¢ãŒããã¯ãã£ã䜿çšãããããç°¡åã§ãããšããäºå®ã«ãããããããå€ãã®äººã¯ãããæããŠããããããçµã¿èŸŒã¿ã·ã¹ãã ãžã®éã®é害ãšãªã£ãŠããŸãã å人ãä»ãããã€ã¯ãã³ã³ãããŒã©ãèµ·åããããã«ããã®æ瀺ãç¥ã£ãŠããããšã¯èšããŸã§ããªããããŒã¿ã·ãŒããå®å šã«èªãå¿ èŠãããããŸããã ãã¡ããããããããªãã®è·æ¥ã§ããå Žåãæ²¡å ¥ã®ã¬ãã«ã¯ã¯ããã«é«ããªããŸããã補åãäœæããããšãããšãã«ãã«ãã»ã«åã®ååã«æåŸãŸã§éåããªãããã«ããŠãã ãã䜿çšãããŠãããœãŒã¹ã©ã€ãã©ãªãèŠãŠãã ããïŒ ä»ãããªãã¯ç§ãæå³ããããšãç解ããã§ãããã
ãã€ã¯ãã³ã³ãããŒã©ãããã°ã©ãã³ã°ããªãã£ããšãã®ããšãæŒ ç¶ãšèŠããŠããŸãã asmã§æžãå§ããã®ã¯ã誰ãããããè¡ã£ãããã ãã§ãªããéåžžã®ããŒã«ãäºå®äžãªãã£ãããã§ãã AVRã®8ãããã³ã³ãããŒã©ãŒã®äººæ°ã¯ãæ°ãããããžã§ã¯ããäœæããæ°åè¡ã®ã³ãŒããèšè¿°ããèªåçšã®äœæ¥ããã°ã©ã ãååŸã§ããéåžžã«äœ¿ããããã©ã€ãã©ãªãŒãäœæãããšããäºå®ã«ãã£ãŠèª¬æããŸãïŒåšèŸºæ©åšã¬ãžã¹ã¿ãŒãšå²ã蟌ã¿ãã¯ã¿ãŒã®ã¢ãã¬ã¹ã¯ãã©ã€ãã©ãªãŒäœæè ã«ãã£ãŠèŠªåã«èšå ¥ãããŸãïŒã ç§ã¯ç 究ãããŸããã§ãããããã¯ç§ã®å人çãªèšæ¶ããã§ã-ä»ã®ã³ã³ãããŒã©ãŒã®ããã®ããè³¢æãªã©ã€ãã©ãªãŒããã£ãšæ©ãååšãããšç¢ºä¿¡ããŠããŸãããããã«ã€ããŠã¯ç¥ããŸããã§ããã
æåã®çã«å€§èŠæš¡ãª32ããããã€ã¯ãã³ã³ãããŒã©ãŒã¯ããã©ã³ã¹ã®STMãªãã£ã¹ã«ãã£ãŠäœæãããŸããã ãã®ç¬éãå€ãã®æ奜家ãCortex-M3ã®ã¢ãŒããã¯ãã£ã«ç²Ÿéããåºã䜿çšãå§ããŸããã åæã«ã STM32F103ãšLPC1768ã®2ã€ã®ã³ã³ãããŒã©ãŒã䜿çšããããšãèŠããŠããŸãã å¯èœãªéãè¿ éã«ããã€ã¹ã®ãããã¿ã€ããäœæããå¿ èŠããããŸããã åœç¶ãç§ã®éžæã¯æåã®ãã®ã§ããïŒãã©ã³ã¹ã¯æšæºåšèŸºæ©åšã©ã€ãã©ãªãšåŒã°ããåšèŸºæ©åšçšã®ã©ã€ãã©ãªããªãªãŒã¹ãã FreeRTOSãèµ·åããå¿ èŠãªåšèŸºæ©åšãæ¥ç¶ãã次ã®æœè±¡åã¬ãã«ã§æ¢ã«ã¹ã±ã«ãã³ã«åºã¥ããŠãããžã§ã¯ããæ§ç¯ããã ãã§ããã以äžæ°ãæ£ããããšã¯ãããŸããã§ããã¬ãžã¹ã¿ãæäœããŸãã å°æ¥çã«ã¯ã¹ã±ã«ãã³ã䜿çšãã32ãããCortexãæ²ããŠãæå°ã®ATtinyã§ååãªå Žæã«è©°ããŸããããã»ãšãã©ã®å ŽåãäŸ¡æ Œã§ååã§ãïŒãããŠãèš±å¯ãããªãã£ãããŸãã¯äœæ¶è²»é»åãå¿ èŠãªå Žåã¯ãå®äŸ¡ãªMSP430ã䜿çšã§ããŸããïŒããã³STM8ããããããã¯ãã£ãã«èµ·ãããŸããã§ããïŒã
ãã¡ãããCortex-M3ã¢ãŒããã¯ãã£ãå®å šã«åŠç¿ããF103ããŒã¿ã·ãŒããåžãå¿ èŠã¯ãªããšèšããªããç§ã¯ã ãŸããŠããŸãããã¡ããã CMSISãšStdPeriph_Libã©ã€ãã©ãªã«å¯Ÿããç§ã®æ ç±ãå©ãã§ã¯ãªã劚ãã«ãªããŸããããç§ã¯å®¶æã«æéãåããŸããããããã§ãã³ã³ãããŒã©ãŒã®äžçã¯å€åããŠãããããã·ã³ãã«ã§è€éã«ãªã£ãŠããããšã«æ°ä»ããŸããã
ãããŠãç§ã¯ããªãã«äŒãããããšãã¹ã ãŒãºã«éæããŸããã å®éãããããçš®é¡ã®Arduinoã¢ã»ã³ããªã®äººæ°ããTexas Instrumentsã®äººã ã«é·ãéæ©ãŸãããŠãããšããããšã§ãã MSP430ããŒã¹ã®ã©ã³ãã£ãŒããªãªãŒã¹ããã³ã¹ããšéæç¡æãããå®ã販売ãããããžã§ã¯ããã¢ããããŒãã§ããã³ãã¥ããã£ãç«ã¡äžãã Energia fork ArduinoãäœæããStellarisã©ã³ãã£ãŒããªãªãŒã¹ããŠãååãTiva Cã«å€æŽããŸããïŒãã ããããã°ããŒãã«ãªãã©ã³ãå€æŽãšããã€ãã®æ°ããæ©èœã®è¿œå ã«é¢ãããã®ã§ãããæ¬è³ªã¯å€ãã£ãŠããŸããã åŸè ã«ã€ããŠã話ããããšæããŸãã
EK-TM4C123GXLã©ã³ãã£ãŒã¯ ã12.99ãã«ã§FedExé éãšäžç·ã«è³Œå ¥ã§ããŸãïŒã€ãŸããããã«å±ããŸãïŒã ããŒãã«ã¯ãDiscovery F4ïŒå é床èšããµãŠã³ãã»ã³ãµãŒãDACãLEDã®æã§ããããŒãïŒãªã©ã®ããŸããŸãªé»åæ©åšãè±å¯ã§ã¯ãããŸãã-Tiva C Launchpadã«ããã®ã¯RGBãã€ãªãŒããš2ã€ã®ãã¿ã³ã§ããããã®åŒ·åºŠã¯ããã§ã¯ãããŸããããŒãäžã®è¿œå ããã€ã¹ã§ã
![ç»å](https://habrastorage.org/getpro/habr/post_images/9cf/606/c50/9cf606c50ada215dbe7b809a6a6a26d6.png)
TivaWareãšåŒã°ããTI Webãµã€ãããããŠã³ããŒãã§ããã©ã€ãã©ãªã®EK-TM4C123GXLã®ãã¯ãŒã äºå®ãã©ã€ãã©ãªã¯çŸåšãã³ã³ãããŒã©ãŒçšã«ãã¹ãŠãèšè¿°ããŠããŸãããæ®å¿µãªããšã«ããããã®å€ãã¯å質ã«å€§ããªéãã¯ãªãããããžã§ã¯ãã§äœ¿çšããããšãæ¥ããŠããªãå®å šãªã©ã€ãã©ãªããããããäŒçµ±çãªäŸã§ãïŒåè¿°ã®LPC1768ãNXPã©ã€ãã©ãªãSTMãšã»ãŒåæã«äœæããŸããããå質ã¯ããã»ã©å€ãããŸããã§ããïŒã Tiva Cã®ã©ã€ãã©ãªã¯ããã®æšæºåãããã¥ã¡ã³ãåãå€æ§æ§ã«é©ããããŸãã
å°ãåŸã§TivaWareãããŠã³ããŒãããããã«ææ¡ããŸããããããªããæ ãè ã§ãªããã°ãã€ã³ã¹ããŒã«åŸã«æ¬¡ã®ãã£ã¬ã¯ããªãèŠãããšãã§ããŸãïŒ
- Driverlib-ããã§ã¯ãadcãgpioãªã©ã®åšèŸºæ©åšçšã®ãã©ã€ããŒãèŠã€ããããšãã§ããŸãïŒROMããé¢æ°ãåŒã³åºãããã®ãã¯ããå«ãããããŒãã¡ã€ã«ãå«ã-詳现ã¯åŸã»ã©ïŒ
- äŸ-ãŸãããã¡ãããäŸã§ãã ããŒããåšèŸºæ©åšããããžã§ã¯ãã«åãããŠããŸãã æåã®ããã¡ãããç¹å®ã®ãããã°ããŒãã®ãããžã§ã¯ããåšèŸºæ©åšã®äœ¿çšã®2çªç®ã®äŸãããã³ããŸããŸãªéçºç°å¢ïŒIARãKeilãCCSïŒã®ã¯ãªãŒã³ãããžã§ã¯ãã®3çªç®ã®äŸã§ã¯ããã¡ã€ã«ã¯BSDã©ã€ã»ã³ã¹ã®äžã§å©çšå¯èœã§ãã
- Inc-tm4c123gh6pmãã¡ã€ã«ãªã©ããã¯ããå«ãããŸããŸãªããããŒãã¡ã€ã«ãç°¡åãªãããžã§ã¯ãã®äœæã«åœ¹ç«ã¡ãŸãã
- ããã¥ã¡ã³ã-ãããTIã®ç¹åŸŽã§ã-ã·ã³ãã«ã§çŽæçãªããã¥ã¡ã³ãã å éšã«ã¯ãããã§èª¬æããŠããã³ã³ããŒãã³ãã«é¢é£ããããã€ãã®ãŠãŒã¶ãŒã¬ã€ãïŒDriverLibãExamplesãBootloaderãIQmathãªã©ïŒãšã䜿çšããã©ã³ãã£ãŒãžã®çŽæ¥ã®ãŠãŒã¶ãŒã¬ã€ãããããŸãã
- Sensorlib-ããã¯æ¬åœã«é©ããããšã§ããsht21ãlsm303dãMPU6050ãªã©ãããŸããŸãªãµãŒãããŒãã£ã»ã³ãµãŒçšã®ãã©ã€ããŒããããŸãã ç§ã¯åŸè ã䜿çšããã®ã奜ãã§ãïŒããã¯åãæ°Žæ¶ã®å é床èšãšãžã£ã€ãã¹ã³ãŒãã®MEMSã¢ã»ã³ããªã§ãïŒãInvensenseã®äŸããåŒãè£ãããã©ã€ãã©ãªãåžžã«æ¥ç¶ããåã«ãTIããã®ãã¡ããšæžããããœãŒã¹ã«éåžžã«æºè¶³ããŠããŸããéåã§ïŒã
- IQmathã¯ãStellarisïŒTiva CïŒããã€ã¹ã§æµ®åå°æ°ç¹æ°ãæ±ãããã«æé©åãããã¢ã«ãŽãªãºã ã®ã©ã€ãã©ãªã§ãã
- Utils-ã³ãã³ãã©ã€ã³ãã·ãªã¢ã«ããŒããã¹ã±ãžã¥ãŒã©ãªã©ãæäœããããã«é »ç¹ã«äœ¿çšããããŠãŒãã£ãªãã£ã
- æ®ãã®ãã£ã¬ã¯ããªã«ã¯ãããŒãããŒããŒããµãŒãããŒãã£ã®çã®è£œé å ïŒFreeRTOSãªã©ïŒãUSBãæäœããããã®ã©ã€ãã©ãªãWindowsçšã®ãã©ã€ããŒãªã©ãå«ãŸããŠããŸãã
ã©ã³ãã£ãŒã§ãµã³ãã«ãå®è¡ããã«ã¯ããæ°ã«å ¥ãã®IDEã®examples / boards / ek-tm4c123gxlãã©ã«ããŒãããããžã§ã¯ããéãã ãã§ã-ãã¹ãŠæºåãã§ããŠããŸãïŒIARã䜿çšããŠããã®ã§ãek-tm4c123gxl.ewwãéããŠããŠã³ããŒãããŸããæ§ææžã¿ã®ã¯ãŒã¯ã¹ããŒã¹ïŒã ãããããåç¥ã®ããã«ãã»ãšãã©ãã¹ãŠã®ãã€ã¯ãã³ã³ãããŒã©ãŒã«ãã®ãããªèª¿æŽãããäŸããããç§ãã¡ãç¬èªã®äœããäœæããããšãããšãæ¬åœã®å°é£ãå§ãŸããŸãã
ããããŸãããäŸã ãã§ãªããã«ã¹ã¿ãã€ãºããããããžã§ã¯ãã¹ã±ã«ãã³ããããããŸããã-ãã¹ãŠããŒãããéå§ããŸãïŒåœç¶ãã©ã€ãã©ãªã®ãã¡ã€ã«ã䜿çšããŸãïŒã ããã«å 責äºé ïŒã©ã³ãã£ãŒã®äœ¿çšãéå§ããã®ã¯ä»æ¥ã®ã¿ã§ãããããã©ã³ãã£ãŒã«ã€ããŠãããœãŒã¹ã³ãŒãã«ã€ããŠãã»ãšãã©äœãç¥ããŸããã ããã¯èšäºå šäœã®äž»èŠãªã©ã€ãã¢ããŒãã§ã-ãã人ãåããŠTiva CãèŠãŠãããã«äœæ¥ãè©Šã¿ãŸãã
ããã«è€éã§èå³æ·±ãã¢ããªã±ãŒã·ã§ã³ãäœæãããã£ãã®ã§ãããæéããããããšãããã£ããããèšäºãç·æ¥ã«å ¬éããå¿ èŠããã£ããããç°¡åãªäŸãäœæããããšã«ããŸãããããããã°ããã£ãšé¢çœãããšãããŸãã
ãããã£ãŠãæåã«å¿ èŠãªããšã¯ãã©ã€ãã©ãªãããŠã³ããŒãããŠã€ã³ã¹ããŒã«ããããšã§ãïŒãããŸã§è¡ã£ãŠããªãå ŽåïŒã ããã«ãIDEãšãã©ãã·ã£ãŒãã€ã³ã¹ããŒã«ããå¿ èŠããããŸãã
ã©ãããããŠã³ããŒãããŸããïŒ
ãã®ãªã³ã¯ããããŠã³ããŒãã§ããŸãããã©ãã£ãã¯ãèš±ãå Žå-DK-TM4C123Gããããã«ã€ã³ã¹ããŒã©ãŒãããŠã³ããŒã-TivaWareã©ã€ãã©ãªãããã¥ã¡ã³ããããã³IDEã€ã³ã¹ããŒã©ãŒïŒçŽ3.5GbïŒãå«ãŸããŠããŸãã
IDEãšFlash Programmerã¯Toolsãã©ã«ããŒã«ãããŸãã
ããã§ãªãå Žåã¯ãTiva Cã·ãªãŒãºãLM Flash Programmerãããã³IDEçšã®TivaWareãåå¥ã«ããŠã³ããŒãã§ããŸãã
IDEãšFlash Programmerã¯Toolsãã©ã«ããŒã«ãããŸãã
ããã§ãªãå Žåã¯ãTiva Cã·ãªãŒãºãLM Flash Programmerãããã³IDEçšã®TivaWareãåå¥ã«ããŠã³ããŒãã§ããŸãã
IARãIDEãšããŠäœ¿çšããŸãïŒãã®ãããäŸãäžç·ã«ãªããŸãïŒãããµããŒããããŠãããã®ã¯ã©ãã§ã䜿çšã§ããŸãã
誰ãç¥ããªããIARã«ã¯ç¡æã§äœ¿çšã§ãã2ã€ã®ãªãã·ã§ã³ããããŸã-æéå¶éãšã³ãŒããµã€ãºå¶éããããŸãã ãããŠããã¡ãããããã2ã€ãããªãã«åããªãå Žåãä»ã®ãªãã·ã§ã³ããããŸãïŒããªãã¯ããªãèªèº«ãã©ããç¥ã£ãŠããŸããïŒã IARã®ã€ã³ã¹ããŒã«ãšç»é²ã®æé ã«ã€ããŠã¯èª¬æããŸããããã¹ãŠã¯ç°¡åã§ãããåé¡ãããã°ã³ã¡ã³ãã§è³ªåããããšãheããªãã§ãã ããã
ãããã£ãŠããŸããæ°ãããããžã§ã¯ããäœæããŸãã ãããžã§ã¯ãã®ããããã£ã®èšå®ãããã€ãå€æŽããŸãã
ãããžã§ã¯ãèšå®
å®éãããã»ã©å€ãã®èšå®ã¯ãããŸããã ãããžã§ã¯ããªãã·ã§ã³ãéããé©åãªç³ãéžæããŸãã [äžè¬ãªãã·ã§ã³]-> [ã¿ãŒã²ãã]ã¿ãã
C / C ++ã³ã³ãã€ã©ã®[ããªããã»ããµ]ã¿ãã§ãTivaWareãã©ã«ããŒãžã®ãã¹ãæå®ããŸãã åãã¿ãã§ãå°ãåŸã§å®æ°ãè¿œå ããŸãã
ãããã¬ãŒã§ãTI StellarisãéžæããŸãã
ãã詳现ãªèšå®ïŒå¿ èŠãªå ŽåïŒã¯äŸã§èŠãããšãã§ããŸãïŒããšãã°ãIARã«ãã£ãŠææ¡ããããã®ã§ã¯ãªããå¥ã®ãªã³ã«ãŒæ§æãã¡ã€ã«ã䜿çšãããŸãïŒã
![ç»å](https://habrastorage.org/getpro/habr/post_images/627/603/0b6/6276030b6d03a6ce4458ea536882ca0b.jpg)
C / C ++ã³ã³ãã€ã©ã®[ããªããã»ããµ]ã¿ãã§ãTivaWareãã©ã«ããŒãžã®ãã¹ãæå®ããŸãã åãã¿ãã§ãå°ãåŸã§å®æ°ãè¿œå ããŸãã
![ç»å](https://habrastorage.org/getpro/habr/post_images/3f3/10e/63a/3f310e63a5f315170df53562dcf2d872.jpg)
ãããã¬ãŒã§ãTI StellarisãéžæããŸãã
![ç»å](https://habrastorage.org/getpro/habr/post_images/6ee/a6b/9a0/6eea6b9a0e50a0a6be2882bc19e34370.jpg)
ãã詳现ãªèšå®ïŒå¿ èŠãªå ŽåïŒã¯äŸã§èŠãããšãã§ããŸãïŒããšãã°ãIARã«ãã£ãŠææ¡ããããã®ã§ã¯ãªããå¥ã®ãªã³ã«ãŒæ§æãã¡ã€ã«ã䜿çšãããŸãïŒã
次ã«ããããžã§ã¯ãæ§é ãèšå®ããå¿ èŠããããŸãã TIãææ¡ããæ§é ïŒäŸã®ããã«ïŒã«åºå·ããããšããå§ãããŸãããããã€ãéãããããŸãã
ãã©ã«ããŒïŒå®éã«ã¯ãã°ã«ãŒãå ãã«ãããŸããããã©ã«ããŒã¯å€å°ãªãã¿ãããïŒSrcã«ã¯ãœãŒã¹ã³ãŒãããããŸãã äŸã§ã¯ãã©ã€ãã©ãªãã¡ã€ã«ã®ãœãŒã¹ãã¡ã€ã«ãããã«è¿œå ãããŸãããããã¯ãããžã§ã¯ããæ··ä¹±ãããã ãã ãšæããŸãã
Libraryãã©ã«ããŒã«ã¯ãDriverLibã®ãã¡ã€ã«ãå«ãŸããŠããŸãã TIã¯ããã«ãã§ã«ã³ã³ãã€ã«ããããã¡ã€ã«ãè¿œå ããŸãïŒIARã®å Žåãããã¯driverlib / ewarm / Exe / driverlib.aãã¡ã€ã«ã§ãïŒãããªãã¯åãããšãããããšãã§ããŸããã代ããã«ãœãŒã¹ãè¿œå ããããšããå§ãããŸããœãŒã¹ã³ãŒãã確èªããŠãããšäŸ¿å©ã§ãã ä»ã®ã©ã€ãã©ãªïŒUtilsãªã©ïŒã®ãã¡ã€ã«ãåããã©ã«ããŒã«è¿œå ããå Žåã¯ãå¥ã®éå±€ã¬ãã«ãäœæããããšããå§ãããŸãã
ãµã³ãã«ãèŠéããŸãããããããããŸããã§ããããããããŒãã¡ã€ã«ãäœæããå Žåã¯ãIncãã©ã«ããŒãäœæããŸãã
äž»ãªããšã¯ããããã®ãã©ã«ãããŠãŒã¶ãŒã®äŸ¿å®ã®ããã ãã®ãã®ã§ããããšãå¿ããªãããšã§ãããã£ã¹ã¯äžã®ãã¡ã€ã«ã®é 眮ãšã¯é¢ä¿ããªããã³ã³ãã€ã«ã«ã¯åœ±é¿ããŸããã
ãã®ãããSrcãã©ã«ããŒã«main.cãã¡ã€ã«ãäœæããŸã
startup_ewarm.cãLibraryãã©ã«ããŒã«è¿œå ããŸã-å²ã蟌ã¿ãã¯ã¿ãŒã®é©åãªåæåã«å¿ èŠã§ãã ããšãã°ããããžã§ã¯ãã®project_0ïŒããã¯äŸã«ãããŸãïŒããååŸã§ããŸãã
mainé¢æ°ã§ããã°ã©ã ãéå§ããŸãããã RGB LEDã¯ã©ã³ãã£ãŒã®ããŒãFã«æ¥ç¶ãããŠãããããç¹æ» ããŸãã
void main(void) { volatile uint32_t ui32Counter; // while(1) { // for(ui32Counter = 0; ui32Counter < 1000000; ui32Counter++) { } // for(ui32Counter = 0; ui32Counter < 1000000; ui32Counter++) { } } }
uint32_tã®ãããªåã䜿çšããã®ã¯è¯ãç¿æ £ã§ãããç°ãªãã³ã³ãããŒã©ãŒäžã®å€æ°ã®ãµã€ãºã®ãããŸããã解決ããã®ã«åœ¹ç«ã¡ãŸãïŒããã«ãMISRA-Cæšæºã«æºæ ããŠããŸãïŒã volatile-ãã®å€æ°ã¯æé©åãã¹ãã§ã¯ãªãããšãã³ã³ãã€ã©ãŒã«äŒããŸãïŒäžè¬ã«åœ¹ã«ç«ããªãæäœã«äœ¿çšããããïŒã 次ã¯ãç¡éã®ãµã€ã¯ã«ïŒåŠçãæããŠããããã«ããã€ã¯ãã³ã³ãããŒã©ãŒã®ããã°ã©ã ãçµäºããããšã¯ãããŸããïŒãšé 延ã®ããã®2ã€ã®ã«ãŠã³ã¿ãŒã§ãã
ãã®ã³ãŒããã³ã³ãã€ã«ããã«ã¯ããã¡ã€ã«ã®å é ã«è¿œå ããŸãã
#include <stdint.h>
次ã«ãç¹æ» ããLEDã«çŽæ¥é²ã¿ãŸãã
ã©ã³ãã£ãŒããŒãžããTiva Cã·ãªãŒãºTM4C123G LaunchPadè©äŸ¡ããããŠãŒã¶ãŒããã¥ã¢ã«ãããŠã³ããŒããããã€ãªãŒãããã³PF1ïŒèµ€ïŒãPF2ïŒéïŒãPF3ïŒç·ïŒã«æ¥ç¶ãããŠããããšããŠãŒã¶ãŒã¹ã€ãããšRGBãŠãŒã¶ãŒLEDã»ã¯ã·ã§ã³ã§èªã¿ãŸãã
ïŒTivaWareã®divaãã©ã«ããŒã«ããïŒSW-TM4C-DRL-UGãéããGPIOã»ã¯ã·ã§ã³ã確èªããŸãã å°å ¥ãããæåã«ãã³ãåºåã«æ§æããå¿ èŠãããããšãç解ããŠããŸãïŒãã¡ãããå€ãã®æ§æããããŸãïŒã ããã§ãæãæçšãªé¢æ°ã®1ã€ãGPIOPinReadïŒïŒããã³GPIOPinWriteïŒïŒã§ããããšãããããŸãã 圌ããããããšã¯ç解ã§ããŸããããã©ã¡ãŒã¿ã®ãªã¹ããæ確ã«ããããã«ãããã®èª¬æãèŠãããšãæ®ã£ãŠããŸãã ããã«ãé¢æ°GPIOPinTypeGPIOOutputïŒïŒããã³åºåã®ç»é²ã«äœ¿çšãããŠããããšãããããŸãã ãã®ãããã³ãŒãã®ã³ã¡ã³ãã次ã®ããã«å€æŽããŸãã
GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2); // // GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1, 0xFF); GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2, 0); // GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1, 0); GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2, 0xFF);
ãã€ãªãŒãããªã³ããã³ãªãã«ããŸãã
åœç¶ãdriverlib / gpio.cãã¡ã€ã«ãLibraryãã©ã«ããŒã«è¿œå ããããšãå¿ããªãã§ãã ããã
#include "driverlib/gpio.h"
èŠåºãã§ã
ããã«ãã³ã³ãã€ã«ããã»ã¹äžã«ãããã«2ã€ã®ããããŒãã¡ã€ã«ãè¿œå ããå¿ èŠãããããšã«æ°ä»ããŸãã
#include <stdbool.h> // bool, gpio #include "inc/hw_memmap.h" // .
ããã§ãããã°ã©ã ã¯æ¬¡ã®ããã«ãªããŸãã
#include <stdint.h> #include <stdbool.h> #include "driverlib/gpio.h" #include "inc/hw_memmap.h" void main(void) { volatile uint32_t ui32Counter; GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_1); while(1) { GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1, 0xFF); GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2, 0); for(ui32Counter = 0; ui32Counter < 2000000; ui32Counter++) { } GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1, 0); GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2, 0xFF); for(ui32Counter = 0; ui32Counter < 2000000; ui32Counter++) { } } }
ãããŠãã³ã³ãã€ã«ããŠå®è¡ãããšããã€ãªãŒãã®äº€äºã®è²ã®å€åã芳å¯ã§ããŸãã
ããããLEDã®ç¹æ» ã¯ç°¡åã§ãã ããã«é²ãã§ãI / OããŒãã®ãµããŒããè¿œå ããŸãããã
ã¢ã¯ã·ã§ã³ã¯åãã§ãã UARTãæ¥ç¶ãããŠããããŒããèŠã€ããUserGuideã§ã¢ãžã¥ãŒã«ã®æ§æãèªã¿åããæ§æããé¢æ°ã䜿çšããŠuartã«æžã蟌ã¿ããã³èªã¿åããè¡ããŸãã
ç§ã®uartåæåé¢æ°ã¯ãäŸã®é¢æ°ã«äŒŒãŠããŸãããèå³æ·±ãéãã1ã€ãããŸããã äŸããã®åæåã¯æ¬¡ã®ãšããã§ãã
void ConfigureUART(void) { // // Enable the GPIO Peripheral used by the UART. // ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); // // Enable UART0 // ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0); // // Configure GPIO Pins for UART mode. // ROM_GPIOPinConfigure(GPIO_PA0_U0RX); ROM_GPIOPinConfigure(GPIO_PA1_U0TX); ROM_GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1); // // Use the internal 16MHz oscillator as the UART clock source. // UARTClockSourceSet(UART0_BASE, UART_CLOCK_PIOSC); // // Initialize the UART for console I/O. // UARTStdioConfig(0, 115200, 16000000); }
ã芧ã®ãšãããããã§ã¯ROM_ãã¬ãã£ãã¯ã¹ãä»ããå¥åŠãªé¢æ°ã䜿çšãããŠããŸã-ãããã¯ãã©ã³ãã£ãŒãã€ã¯ãã³ã³ãããŒã©ãŒã®ROMã«æ¢ã«ä¿åãããŠããç¹å¥ãªé¢æ°ã§ãã ãããã«ã€ããŠã¯ãåãDRLã®UserGuideã§èªãããšãã§ããŸãã ãããã¯ããã©ãã·ã¥ã¡ã¢ãªå ã®ã³ãŒãã®ãµã€ãºãåæžããããã«äœæãããŸããã ããªãããããå¿ èŠãšãããã©ããã«ããããããç§ãã¢ã€ãã¢ã奜ããã©ããã決ããã®ã¯ããªã次第ã§ãïŒãšã«ããPeripheral Driver Libraryã䜿çšããã®ã§ïŒã ã¡ãªã¿ã«ãROMã«ã©ã€ãã©ãªã®äžéšãããããã€ã¹ã§ã³ãŒãã䜿çšããããã©ããããããªãå Žåã¯ãããããããROMã³ãŒã«ã䜿çšã§ããŸãã 次ã«ãROMããã®ã³ãŒããããã°ããã䜿çšããããªãå Žåã¯ã³ã³ãã€ã«ãããŸãã
ROMã䜿çšããã«ã¯ãããã€ãã®å®æ°ãèšå®ããå¿ èŠããããŸãããããžã§ã¯ããªãã·ã§ã³ã®C / C ++ã³ã³ãã€ã©ã®[ããªããã»ããµ]ã¿ãã§ãå®æ°TARGET_IS_BLIZZARD_RB1ã[å®çŸ©æžã¿ã·ã³ãã«]ãã£ãŒã«ãã«è¿œå ããŸãã PART_TM4C123GH6PMãšewarmãããã«è¿œå ããŸã-ã©ã€ãã©ãªãã¡ã€ã«ãæ£åžžã«ã³ã³ãã€ã«ããããã«å¿ èŠã§ãã
ã¹ã¯ãªãŒã³
![ç»å](http://habrastorage.org/storage3/362/f50/549/362f5054934cc2daf17ff597429595a6.jpg)
ããã«ãäžè¶³ããŠãããã¡ã€ã«ããããžã§ã¯ãããªãŒã«è¿œå ããå¿ èŠããããŸãã
![ç»å](http://habrastorage.org/storage3/2a5/824/f36/2a5824f36aa53201463b188253272a30.jpg)
ãããã£ãŠãæ®ã£ãŠããã®ã¯ããŒãã«äœããåºåããããšã ãã§ãïŒèªã¿åãã«ã¯ä»»æã®ã¿ãŒããã«ãšãã¥ã¬ãŒã¿ã䜿çšã§ããŸããããšãã°ãWindowsã§ã¯Real Termã䜿çšããŸããïŒã 次ã«ãããŒãããæåãèªã¿åããè²ïŒrãgãbïŒã®ããããã«å±ããŠãããã©ããã確èªãã察å¿ãããã³ã®ç¶æ ãå€æŽããããšãææ¡ããŸãã
UARTãåæåããããã®é¢æ°ã¯æ¢ã«ãããŸãã ããŒãã®åæåãå€æŽããŠã3çªç®ã®ãã³ãè¿œå ããŸãïŒä»¥åã¯åºåçšã«2ã€ã®ã¿ãæ§æããŸããïŒã UARTprintfïŒïŒé¢æ°ã䜿çšããŠãæååã端æ«ã«åºåã§ããŸãã utils / uartstdio.cã©ã€ãã©ãªããïŒåœç¶ãããããããžã§ã¯ãã«è¿œå ããããããŒãã¡ã€ã«ãå«ããå¿ èŠããããŸãïŒã
UARTCharGetïŒïŒé¢æ°ã§æåãèªã¿åããŸãã ã·ã³ãã«ãããŒã«å°çãããŸã§ã«ãŒãã«å ¥ããŸãã ãã®åŸããã³ã«å¯ŸããŠã¢ã¯ã·ã§ã³ãå®è¡ãããµã€ã¯ã«ã®æåã«æ»ããŸãã
#include <stdint.h> #include <stdbool.h> #include "inc/hw_memmap.h" #include "inc/hw_types.h" #include "driverlib/gpio.h" #include "driverlib/rom.h" #include "driverlib/sysctl.h" #include "driverlib/uart.h" #include "driverlib/pin_map.h" #include "utils/uartstdio.h" void ConfigureUART(void) { ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0); ROM_GPIOPinConfigure(GPIO_PA0_U0RX); ROM_GPIOPinConfigure(GPIO_PA1_U0TX); ROM_GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1); UARTClockSourceSet(UART0_BASE, UART_CLOCK_PIOSC); UARTStdioConfig(0, 115200, 16000000); } void main(void) { volatile uint32_t ui32Loop; uint32_t ui32Color; uint8_t ui8Red = 0xFF; uint8_t ui8Green = 0xFF; uint8_t ui8Blue = 0xFF; GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3); ConfigureUART(); UARTprintf("Hello HabraHabr!\n"); while (1) { UARTprintf("Please, enter color(r,g,b) \n"); ui32Color = UARTCharGet(UART0_BASE); switch (ui32Color) { case 'r': GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1, ui8Red); ui8Red = ~ui8Red; break; case 'b': GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2, ui8Blue); ui8Blue = ~ui8Blue; break; case 'g': GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_3, ui8Green); ui8Green = ~ui8Green; break; default: UARTprintf("Incorrect color! \n"); break; } } }
TivaWareã§ãèå³æ·±ãã©ã€ãã©ãª-utils / cmdlineãèŠã€ããŸããã ã³ãã³ãã©ã€ã³ããå ¥åãããã³ãã³ããäœæããã³åŠçã§ããŸãã ç§ã¯ãããšä»ã®ããã€ãã®èå³æ·±ãã©ã€ãã©ãªã䜿çšããŠèå³æ·±ããããžã§ã¯ããäœæãããã£ãã®ã§ãããæéããªããªã£ãŠããã®ã§ãèå³ãããå Žåã¯åŸã§ããã«ã€ããŠæžãããšãã§ããŸãïŒFreeRTOSã«ã€ããŠããã§èšåãããŠããªãäžæãåæ§ïŒã
ããŠãä»ãæéãäžè¶³ããŠãããšããäºå®ã«ã€ããŠäœåºŠãæžããçç±ãšãã³ã³ãããŒã©ãŒã®ç 究ãéå§ããããã®ãã¹ãŠã®æå©ãªæéã®äžã§ãæãæå©ãªã®ã¯ä»ã§ãïŒ1æ22æ¥ã çµã¿èŸŒã¿ã·ã¹ãã -Shape The Worldã³ãŒã¹ã¯edXã§å§ãŸããŸãã
ç»é²ã¯ç¡æã§ããã蚌ææžãåãåãããå Žåã¯ãæéïŒæäœ50ãã«ïŒãæ¯æãå¿ èŠããããŸãã å人çã«ãç§ã¯50ãã«ãæ¯æããŸãã-蚌ææžã®ããã§ã¯ãªããåã«ãã®ãããªã³ãŒã¹ãžã®ææ ãšãµããŒãã§ã
åå ããã«ã¯ãTiva Cã©ã³ãã£ãŒãšããŸããŸãªã«ãŒã¹ããŠããŒãè³Œå ¥ããå¿ èŠããããŸãã åŸè ã¯ã©ã®ã©ãžãªåžå Žã§ãè³Œå ¥ã§ããŸãããæ¥ãã§ã©ã³ãã£ãŒã䜿çšããå¿ èŠããããŸããéåžžãTIã¯FedExçµç±ã§éä¿¡ãããŸãããã³ãŒã¹éå§ãŸã§ã«1é±éãããããŸãããããã«ã¯æ倧10æ¥éããããŸãã
ããããå¿é ããå¿ èŠã¯ãããŸãããæåã®ã¬ãã¹ã³ã§ã¯ãããã«ããŒããŠã§ã¢ãæäœããå¿ èŠã¯ãªããšæããŸããããã°ã©ã ãã·ãã¥ã¬ãŒãã§ãããããããŸããã
ã ãããããã€ãã®çµè«ã ãã®ãããªã©ã€ãã©ãªã®äœ¿çšã¯ãäž¡åã®å£ã§ãã äžæ¹ã§ã¯ãéçºãç°¡çŽ åãããšã³ããªã®ãããå€ãäžããä»æ¹ã§ã¯ãåºæ¬ã®ç解ãè€éã«ããæœè±¡åã¬ãã«ãäœæããŸãïŒèšäºå šäœã§ããŒã¿ã·ãŒããžã®åäžã®åç §ã¯ãããŸããããããã¯ééã£ãŠããŸãïŒåžžã«ããŒã¿ã·ãŒããèŠãå¿ èŠããããããã¯åææ¡ä»¶ã§ãïŒå°é家ã§ïŒã ãããããã®ãããªã©ã€ãã©ãªãŒã¯ãarduinoïŒã¡ãªã¿ã«ãEnergiaã説æãããŠããã©ã³ãã£ãŒããµããŒãããŠããïŒãšã¯ç°ãªãã1ã€ã®å©ç¹ããããŸãïŒçŸå®ã®èª€ã£ãç解ãäœæããªãã ã©ã€ãã©ãªã䜿çšããå Žåãæœè±¡åã¯éåžžã«çŸå®çãªããã€ã¹ã§ãããé¢æ°ãšå®éã®ã¬ãžã¹ã¿ã®é¡äŒŒç¹ã¯ãã¬ãŒã¹ããã®ãé£ãããªãããšãç解ããŠããŸãã
ãã®è³æãããã®çŽ æŽãããããã€ã¹ãïŒéåžžã«è¡šé¢çã§ã¯ãããŸããïŒè³Œå ¥ããŠç 究ããããšã奚å±ããããšãé¡ã£ãŠããŸãã TM4C123Gã§å®è£ ã§ãããããžã§ã¯ãã®ã¢ã€ãã¢ã¯ããããå®è£ ã«åé¡ãããå Žåã¯ãã³ã¡ã³ãã§ããã«ã€ããŠæžãããšãheããªãã§ãã ãããäžç·ã«å¯ŸåŠããŸãã