ã¯ããã«
ãµã€ãã¬ã¹PSoCã³ã³ãããŒã©ãŒã§UDBãããã¯ãããã°ã©ãã³ã°ããæè¡ãé·å¹ŽåŠã³ããã£ãã®ã§ãããã©ããããããç§ã®æãå±ããŸããã§ããã ãã®ããããããå®è¡ã§ããåé¡ããããŸããã ãããã¯ãŒã¯ã®è³æãç解ãããšãUDBã䜿çšããããã®å®éçãªæšå¥šäºé
ã¯ãããŸããŸãªçš®é¡ã®ã«ãŠã³ã¿ãŒãšPWMã«éå®ãããããšã«æ°ä»ããŸããã äœããã®çç±ã§ããã¹ãŠã®èè
ããããã®2ã€ã®æšæºçãªäŸã®ããªãšãŒã·ã§ã³ãäœæããŠãããããä»ã®äœãã®èª¬æã¯èªè
ã«ãšã£ãŠèå³æ·±ããã®ã«ãªãã§ãããã
ã ããã RGB LED WS2812Bã®é·ãåãåçã«å¶åŸ¡ããåé¡ããããŸããã ãã®åé¡ã«å¯Ÿããå€å
žçãªã¢ãããŒãã¯ç¥ãããŠããŸãã ç°¡åãªArduinoã䜿çšã§ããŸãããåºåã¯ããã°ã©ã ã§è¡ããããããããŒã¿ãåºåãããŠããéãä»ã®ãã¹ãŠã¯ã¢ã€ãã«ç¶æ
ã«ãªããŸããããã§ãªãå Žåãã¿ã€ãã³ã°å³ã¯å€±æããŸãã STM32ã䜿çšããŠãPWMã®DMAãŸãã¯SPIã®DMAãä»ããŠããŒã¿ãåºåã§ããŸãã ãã¯ããã¯ã¯ç¥ãããŠããŸãã ç§ã¯ããã€ãŠå人çã«SPIãä»ããŠ16åã®ãã€ãªãŒãã®ã©ã€ã³ããã§ã«å¶åŸ¡ããŠããŸããã ãããããªãŒããŒãããã¯å€§ããã§ãã LEDã®1ããŒã¿ãããã¯ãPWMã®å Žåã¯ã¡ã¢ãªã®8ããããå æããSPIã®å Žåã¯3ã4ãããïŒã³ã³ãããŒã©ã®PLLã®å·åŽåºŠã«ããïŒãå æããŸãã LEDã¯ã»ãšãã©ãããŸããããããã¯æãããããšã§ã¯ãããŸããããããšãã°æ°çŸã200 * 24 = 4800ããã= 600ãã€ãã®æçšãªããŒã¿ããPWMãªãã·ã§ã³ã®å Žåã¯4ãããã€ã以äžãSPI-ã®å Žåã¯2ãããã€ã以äžã®ãããã¡ãŒã«ç©ççã«ä¿åããå¿
èŠããããŸããªãã·ã§ã³ã ãããã¡ã®åçãªè¡šç€ºã«ã¯ããã€ããããSTM32F103ã«ã¯20ãããã€ããã¹ãŠã®RAMããããŸãã å®çŸäžå¯èœãªã¿ã¹ã¯ã«ééããããã§ã¯ãããŸãããããããè¿œå ã®RAMãæ¶è²»ããããšãªãPSoCã«å®è£
ã§ãããã©ããã確èªããçç±ã¯éåžžã«éèŠã§ãã
çè«ãªãã¡ã¬ã³ã¹
æåã«ãåç©ã®UDBã®çš®é¡ãšããããã©ã®ããã«æ©èœããããç解ããŸãããã ããã«ã¯ãã³ã³ãããŒã©ãŒã®è£œé å
ããæäŸããããã°ããã説ææ ç»ã圹ç«ã¡ãŸãã
ããããèŠèŽãéå§ããå¿
èŠããããŸããåãããªã®æåŸã«ã次ã®ã·ãªãŒãºãžã®ãªã³ã¯ããããŸãã 段éçã«ãåºæ¬çãªç¥èãç¿åŸããæšæºçãªäŸãã«ãŠã³ã¿ãŒããæ€èšããŸãã ããŠã亀éä¿¡å·å¶åŸ¡ã·ã¹ãã ã
ã»ãŒåãã§ãããå°çã«ã«ããããŠã
ããã§èŠãããšãã§ã
ãŸã ã ãããªã¯åçãããŸããã§ããããããŠã³ããŒãããŠããŒã«ã«ã§è¡šç€ºã§ããŸãã ãšããããPWMã®å®è£
ã®æšæºçãªäŸããããŸãã
æ¢è£œã®ãœãªã¥ãŒã·ã§ã³ãèŠã€ãã
è»èŒªãåçºæããªãããã«ïŒãããŠãã®é-ä»ã®äººã®çµéšããæ¹æ³è«ãåŠã¶ããã«ïŒãRGB LEDãå¶åŸ¡ããæ¢è£œã®ãœãªã¥ãŒã·ã§ã³ãæ¢ããŠããããæ€çŽ¢ããŸããã æãäžè¬çãªãœãªã¥ãŒã·ã§ã³ã¯StripLightLib.cylibã§ãã ãããã圌ã¯é·å¹Žã«ããã£ãŠãAdd DMAãµããŒããè¿œå ããèšç»ãæã£ãŠããŸãã ããããäžå€®åŠçè£
眮ã«äŸåããªããœãªã¥ãŒã·ã§ã³ãè©ŠããŠã¿ãããšæããŸãã 次ã®ãã¬ãŒã ã®æºåã«çŠç¹ãåãããŠãããã»ã¹ãéå§ãããããå¿ãããã§ãã
ç§ã®åžæã«åã£ããœãªã¥ãŒã·ã§ã³ã¯
https://github.com/PolyVinalDistillate/PSoC_DMA_NeoPixelã§èŠã€ãããŸããã
ãã¹ãŠãUDBã«å®è£
ãããŠããŸãïŒLEDã¯åãªãèšãèš³ã§ããç®æšã¯UDBãåŠã¶ããšã§ãïŒã DMAããµããŒããããŠããŸãã ãããŠããã®ãããžã§ã¯ãã¯æããã«çŸããçµç¹ãããŠããŸãã
åºç€ãšããŠéžã°ãã解決çã®åé¡
ãããžã§ã¯ãPSoC_DMA_NeoPixelã®ããã¡ãŒã ãŠã§ã¢ãã¯ã©ãã§ããããã®èšäºãèªãã åŸã¯èª°ã§ãèŠãããšãã§ããŸãã ããã«ããçŽ æãä¿®æ£ãããŸãã ãããŸã§ã®ãšãããç§ã¯æåã«ãæ¶è²»ããããªãœãŒã¹ãæžããããšãªãå
ã®ãã¡ãŒã ãŠã§ã¢ã®ããžãã¯ãåçŽåãããšã ãèšããŸãïŒããããç解ãããããªããŸããïŒã ãã®åŸã圌ã¯ãªãŒãããã³ããžãã¯ã眮ãæããå®éšãéå§ããŸãããããã¯ãªãœãŒã¹ã®å¢å ãçŽæããŸããããæ·±å»ãªåé¡ã«ã¶ã€ãããŸããã ãããŠã圌ã¯æ±ºããŸãã-ããã¯æé€ãããŸããïŒ ãããŠæŒ ç¶ãšããç念ãç§ãèŠããå§ããŸãããè±èªã®èè
ãåãåé¡ãæ±ããŠããŸãããïŒ åœŒã®ãã¢ã¯LEDã§éåžžã«çŸããç¹æ»
ããŸãã ããããçŸããè©°ãç©ãããã¹ãŠã®ãŠããããã«çœ®ãæããŠãç®ã§ã¯ãªããªã·ãã¹ã³ãŒãã§åºåãå¶åŸ¡ãããšã©ããªããŸããïŒ
ãã®ãããå¯èœãªéã倧éæã«ïŒãæ®é
·ã«ããšèšãããšãã§ããŸãïŒããŒã¿ã圢æããŸãã
memset (pPixelArray,0xff,sizeof(pPixelArray));
ãããŠãããã«ãªã·ãã¹ã³ãŒãã§ãã®ãããªåçããããŸãïŒ
æåã®ãããã®å¹
ã¯ãä»ã®ããããšã¯ç°ãªããŸãã ç§ã¯ãã¹ãŠã®éšéãéãããã«é Œãã ãããã¹ãŠãæ®ãããã§ã¯ãªãã ãã®ãã¡ãŒãã«ãªããŸããïŒ ã¹ãã£ã³ãå€æŽããŸãã
å¹
ã¯8ãããããšã«ç°ãªããŸãã
äžè¬ã«ãç¬ç«ãããœãªã¥ãŒã·ã§ã³ãšããŠã®ãã®äŸã¯é©åã§ã¯ãããŸããããã€ã³ã¹ãã¬ãŒã·ã§ã³ã®æºãšããŠ-å®ç§ã§ãã 第äžã«ããã®åäœäžèœã¯ç®ã§ã¯èŠããŸããïŒLEDã¯ãŸã æãããç®ã¯ããããæ倧ã®ååã§èŒãããšãèŠãŸããïŒããã³ãŒãã¯ããæ§é åãããŠããã®ã§ããããåºç€ãšããŠåãã®ã¯è¯ãããšã§ãã 第äºã«ããã®äŸã¯åçŽåããæ¹æ³ãèŠã€ããããã®ã¹ããŒã¹ãæäŸãã第äžã«ãæ¬ é¥ãä¿®æ£ããæ¹æ³ãèããããŸãã ãŸãã«ç©äºãç解ããããšã§ãïŒ ããäžåºŠãèšäºãèªãã åŸãå
ã®äŸã解æãããã®ä»çµã¿ãç解ããããšããå§ãããŸãã
å®çšéš
ä»ãç§ãã¡ã¯ç·Žç¿ãå§ããŸãã UDBã®ãã¡ãŒã ãŠã§ã¢éçºã®äž»ãªåŽé¢ããã¹ãããŠããŸãã é¢ä¿ãšåºæ¬çãªãã¯ããã¯ãèæ
®ããŠãã ããã ãããè¡ãã«
ã¯ããããžã§ã¯ãã®ç§ã®ããŒãžã§ã³ãéããŸãã å·ŠåŽã®ãããã¯ã«ã¯ãäœæ¥ãã¡ã€ã«ã«é¢ããæ
å ±ãä¿åãããŸãã ããã©ã«ãã§ã¯ãã
ãœãŒã¹ãã¿ããéããŠããŸãã ãããžã§ã¯ãã®äž»ãªãœãŒã¹ã¯
main.cãã¡ã€ã«ã§ãã å®éã
ãœãŒã¹ãã¡ã€ã«ã°ã«ãŒãã«ã¯ä»ã®äœæ¥ãã¡ã€ã«ã¯ãããŸããã
çæããããœãŒã¹ã°ã«ãŒãã«ã¯ãã©ã€ãã©ãªé¢æ°ãå«ãŸããŠããŸãã ç·šéããªãæ¹ãããã§ãã UDBã®ããã¡ãŒã ãŠã§ã¢ããå€æŽããããã³ã«ããã®ã°ã«ãŒããåçæãããŸãã ã§ã¯ããã®ç°åå°åž¯ã®UDBã®ã³ãŒãã®èª¬æã¯ã©ãã«ãããŸããïŒ è¡šç€ºããã«ã¯ã[
ã³ã³ããŒãã³ã ]ã¿ãã«åãæ¿ããå¿
èŠããããŸãã
å
ã®ãããžã§ã¯ãã®äœæè
ã¯ã2ã¬ãã«ã®ã³ã³ããŒãã³ãã»ãããäœæããŸããã æäžäœã«ã¯
NeoPixel_v1_2.cyschåè·¯ããããŸãã ããã¯ã¡ã€ã³ã¹ããŒã ããèŠãããšãã§ããŸãïŒ
ã³ã³ããŒãã³ãã¯æ¬¡ã®ãšããã§ãã
ãã®ã¹ããŒã ã®ãœãããŠã§ã¢ãµããŒãã«ã€ããŠã¯ãåŸã§èª¬æããŸãã ãããŸã§ã®éãããèªäœãéåžžã®DMAãŠãããã§ãããç¹å®ã®ã·ã³ãã«
NeoPixDrv_v1ã§ããããšã
ããããŸãã ãã®ç¥ç§çãªãããã¯ã¯ãäžèšã®ããªãŒã§èª¬æãããŠããã次ã®ããŒã«ãããããç¶ããŸãã
ããã¡ãŒã ãŠã§ã¢ãUDB
ãã®ã³ã³ããŒãã³ãïŒæ¡åŒµå
.cyudbã®ãã¡ã€ã«ïŒãéããŸãã éããå³é¢ã¯åçŽã«å·šå€§ã§ãã äœãäœãªã®ãç解ãå§ããŸãã
å
ã®ãããžã§ã¯ãã®äœæè
ãšã¯ç°ãªãã3ã€ã®çããïŒæéçã«ïŒéšåã®åœ¢åŒã§ããŒã¿ã®åããããéä¿¡ããããšãæ€èšããŸãã
- éå§éšåïŒåžžã«1ïŒ
- ããŒã¿éš
- åæ¢éšåïŒåžžã«0ïŒ
ãã®ã¢ãããŒãã§ã¯ãå€æ°ã®ã«ãŠã³ã¿ãŒã¯å¿
èŠãããŸããïŒå
ã
ã¯3ã€ã®ããŒã¹ãããã倧éã®ãªãœãŒã¹ãæ¶è²»ããŠããŸããïŒã ãã¹ãŠã®éšåã®æç¶æéã¯åãã§ããã1ã€ã®ã¬ãžã¹ã¿ã䜿çšããŠèšå®ã§ããŸãã ãããã£ãŠããã¡ãŒã ãŠã§ã¢ã®é·ç§»ã°ã©ãã«ã¯æ¬¡ã®ç¶æ
ãå«ãŸããŸãã
ã¢ã€ãã«ç¶æ
ã æ°ããããŒã¿ãFIFOã«å°çãããŸã§ããã·ã³ã¯ãã®äžã«æ®ããŸãã
ãã¬ãŒãã³ã°ãããªããããã·ã³ã®ç¶æ
ãALUãšã©ã®ããã«é¢é£ããŠãããã¯å®å
šã«ã¯ããããŸããã§ããã èè
ã¯ãã¡ããã³ãã¥ãã±ãŒã·ã§ã³ã䜿çšããŠããŸãããç§ã¯åå¿è
ãšããŠããã«ãããèŠãããšãã§ããŸããã§ããã ããã詳ããèŠãŠã¿ãŸãããã äžã®å³ã¯ã
ã¢ã€ãã«ç¶æ
ãå€1'b0ã§ãšã³ã³ãŒããããŠããããšã瀺ããŠããŸãã 3'b000ã¯ããæ£ç¢ºã«ãªããŸããããšãã£ã¿ãŒã¯ãã¹ãŠåãããã«ããçŽããŸãã
Datapathãããã¯ã®å
¥å
ã¯æ¬¡ã®ããã«èšè¿°ãããŸãã
ããããããã«ã¯ãªãã¯ãããšããã詳现ãªããŒãžã§ã³ã衚瀺ãããŸãïŒ
ããã¯ãALUåœä»€ã®ã¢ãã¬ã¹ã®ãŒãããããããã·ã³ã®ç¶æ
ãèšå®ããå€æ°ã®ãŒããããã«å¯Ÿå¿ããããšãæå³ããŸãã æåã¯1çªç®ã2çªç®ã¯2çªç®ã§ãã å¿
èŠã«å¿ããŠãä»»æã®å€æ°ãšåŒãALUåœä»€ã®ã¢ãã¬ã¹ãããã«äžèŽãããããšãã§ããŸãïŒå
ã®ããŒãžã§ã³ã§ã¯ãALUåœä»€ã®ã¢ãã¬ã¹ã®2çªç®ã®ããããåŒãšäžèŽããçŸåšã®ããŒãžã§ã³ã§ã¯æ瀺çã«äœ¿çšãããŠããŸããããè³ãéã¶äŸãšããŠéåžžã«æ確ã§ãããããèŠãŠã¿ãããšãã§ããŸãïŒã
ã ããã ãã·ã³ã®ãã€ããªã¹ããŒã¿ã¹ã³ãŒãã§ããå
¥åã®çŸåšã®èšå®ã§ã¯ããã®ãããªALUåœä»€ã䜿çšãããŸãã ã³ãŒã000ã®
ã¢ã€ãã«ç¶æ
ã«ããå Žåããã«åœä»€ã䜿çšãããŸãã ããã«ãããŸãïŒ
ãã®ãšã³ããªããããããéåžžã®NOPã§ããããšãæ¢ã«ç¥ã£ãŠããŸãã ããããããªãã¯ãããããã«ã¯ãªãã¯ããŠãã«ããŒãžã§ã³ãèªãããšãã§ããŸãïŒ
NOPã¯ã©ãã«ã§ãå»ãŸããŠããŸãã ã¬ãžã¹ã¿ã«ã¯äœãå
¥åãããŠããŸããã
ããã§ãã©ã®ãããªç¥ç§çãªãã©ã°
ïŒNoDataãèŠã€ã㊠ããã·ã³ã匷å¶çã«
ã¢ã€ãã«ç¶æ
ããéåºãããŸãããã ããã¯ã
Datapathãããã¯ããã®åºå£ã§ãã åèšã§ãæ倧6ã€ã®åºå£ãèšè¿°ã§ããŸãã
Datapathã¯ããå€ãã®ãã©ã°ãçæã§ãããšããã ãã§ããããã¹ãŠã®äººã«ååãªãã¬ãŒã¹ãªãœãŒã¹ããªããããæ¬åœã«å¿
èŠãª6ã€ïŒãŸãã¯ãã以äžïŒãéžæããå¿
èŠããããŸãã å³ã®ãªã¹ãã¯æ¬¡ã®ãšããã§ãã
ãããããã«ã¯ãªãã¯ãããšã詳现ã衚瀺ãããŸãïŒ
衚瀺ã§ãããã©ã°ã®å®å
šãªãªã¹ãã¯æ¬¡ã®ãšããã§ãã
å¿
èŠãªãã©ã°ãéžæããããååãä»ããŠãã ããã ãã以éãã·ã¹ãã ã«ã¯ãã©ã°ããããŸãã ã芧ã®ãšããã
NoDataãã©ã°ã¯ãã§ãŒã³
F0ãããã¯ã¹ããŒã¿ã¹ïŒç©ºïŒã®ååã§ãã ã€ãŸããå
¥åãããã¡ãŒã«ããŒã¿ããªãããšã瀺ãèšå·ã§ãã Ah
ïŒNoData ãããããããã®å転ã ããŒã¿å¯çšæ§ã®å
åã ããŒã¿ãFIFOã«ïŒããã°ã©ã ãŸãã¯DMAã䜿çšããŠïŒå
¥åããããšããã«ããã©ã°ãã¯ãªã¢ããïŒå転ãã³ãã¯ããïŒã次ã®ã¯ããã¯ãµã€ã¯ã«ã§ããªãŒãããã³ã¯ã¢ã€ãã«ç¶æ
ãçµäºããŠ
GetDataç¶æ
ã«å
¥ããŸãã
ã芧ã®ãšããããªãŒãããã³ã¯ã¡ããã©1ã¯ããã¯ãµã€ã¯ã«å
¥ã£ãåŸãç¡æ¡ä»¶ã§ãã®ç¶æ
ããæãåºããŸãã ãã®ç¶æ
ã®é·ç§»ã°ã©ãã«ã¯ã¢ã¯ã·ã§ã³ã瀺ãããŠããŸããã ãã ããALUãäœãããããåžžã«ç¢ºèªããå¿
èŠããããŸãã ç¶æ³ã³ãŒãã¯1'b1ãã€ãŸã3'b001ã§ãã ALUã®å¯Ÿå¿ããã¢ãã¬ã¹ã確èªããŸãã
äœããããŸãã ããã«æžãããŠããããšãèªãã çµéšããªãã®ã§ã察å¿ããã»ã«ãããã«ã¯ãªãã¯ããŠéããŸãã
ãããã£ãŠãALUèªäœã¯ãŸã ã¢ã¯ã·ã§ã³ãå®è¡ããŸããã ãã ããFIFO0ã®å
容ãã€ãŸãããã°ã©ã ãŸãã¯DMAãããã¯ããã®ããŒã¿ã¯A0ã¬ãžã¹ã¿ã«é
眮ãããŸãã ä»åŸã¯ãA0ãã·ããã¬ãžã¹ã¿ãšããŠäœ¿çšããããããããã€ããã·ãªã¢ã«åœ¢åŒã§çµäºãããšèšããŸãã ã¬ãžã¹ã¿A1ã¯ãã¬ãžã¹ã¿D1ã®å€ãé
眮ããŸãã äžè¬ã«ãDã¬ãžã¹ã¿ã¯ãã¹ãŠãããŒããŠã§ã¢ãã¢ã¯ãã£ãã«ãªãåã«ãœãããŠã§ã¢ã§åããããŸãã 次ã«ãAPIã調ã¹ããšãã¯ããã¯ãã£ãã¯ã®æ°ããã®ã¬ãžã¹ã¿ã«é
眮ããã3çªç®ã®ãããã®æéãèšå®ãããŠããããšãããããŸãã ã ããã A0ã§ã¯ã·ãããããå€ãäžãããA1ã§ã¯ãããã®éå§éšåã®ç¶ç¶æéã®å€ãäžãããŸããã ãããŠã次ã®ããŒãã§ããã·ã³ã¯ç¢ºå®ã«
Constant1ç¶æ
ã«ãªããŸãã
ç¶æ
ã®ååã瀺ãããã«ãå®æ°1ãããã§çæãããŸãLEDã®ããã¥ã¡ã³ããèŠãŠã¿ãŸãããã ãŠãããã®è»¢éæ¹æ³ã¯æ¬¡ã®ãšããã§ãã
ãããŠãããã«ãããŸã-ãŒãïŒ
è¿œå ããèµ€ãç·ã 3åã®1ã®æç¶æéã¯çãããšä»®å®ãããšããã«ã¹ã®æç¶æéã®èŠä»¶ïŒåãææžã§äžããããïŒãæºããããŸãã ã€ãŸããã€ã³ãã«ã¹ã¯ãéå§åäœãããŒã¿ããããããã³åæ¢ãŒãã§æ§æãããŸãã å®éã«ã¯ããã·ã³ã
Constant1ç¶æ
ã«ãããšãã«éå§ãŠããããéä¿¡ãããŸãã
ãã®ç¶æ
ã§ã¯ããã·ã³ã¯å
éšããªã¬ãŒã§ãŠããããã©ããããŸãã ããªã¬ãŒã®ååã¯
CurrentBitã§ãã å
ã®ãããžã§ã¯ãã§ã¯ãéåžžãè£å©ãªãŒãããã³ã®ç¶æ
ãèšå®ããããªã¬ãŒã§ããã ç§ã¯ãã®ãã·ã³ããã¹ãŠã®äººãæ··ä¹±ãããã ãã ãšæ±ºããã®ã§ãããªã¬ãŒãéå§ããŸããã ã©ãã«ãèšèŒãããŠããŸããã ãã ããç¶æ
ããããã£ãå
¥åãããšã次ã®ã¬ã³ãŒããããŒãã«ã«è¡šç€ºãããŸãã
ãããŠãã°ã©ãã®ç¶æ
ã®äžã«ãã®ãããªããã¹ãããããŸãïŒ
çå·ã«é©ããªãã§ãã ããã ãããã¯ãšãã£ã¿ãŒã®æ©èœã§ãã çµæã®Verilogã³ãŒãïŒåãã·ã¹ãã ã§èªåçæïŒã«ã¯ç¢å°ããããŸãïŒ
Constant1 : begin CurrentBit <= (1); if (( CycleTimeout ) == 1'b1) begin MainState <= Setup1 ; end end
ãã®ããªã¬ãŒã§ã©ãããããå€ã¯ããããã¯å
šäœã®åºåã§ãã
ã€ãŸãããã·ã³ã
Constant1ã®ç¶æ
ã«ãªããšãéçºäžã®ãããã¯ã®åºåã¯1ã«ãªããŸãã 次ã«ãã¢ãã¬ã¹3'b010ã®ALUã®ããã°ã©ãã³ã°æ¹æ³ãèŠãŠã¿ãŸãããã
ãã®èŠçŽ ãæããã«ããŸãã
ãŠããã1ãã¬ãžã¹ã¿A1ããæžç®ãããŸãã ALUã®åºåå€ã¯ã¬ãžã¹ã¿A1ã«å
¥ããŸãã äžèšã§ã¯ãA1ã¯åºåãã«ã¹ã®æç¶æéãèšå®ããããã«äœ¿çšãããã¯ããã¯ã«ãŠã³ã¿ãŒã§ãããšèããŸããã æåŸã®ã¹ãããã§D1ããèµ·åããããšãæãåºãããŠãã ããã
ç¶æ
ãçµäºããããã®æ¡ä»¶ã¯äœã§ããïŒ
CycleTimeOut ã åºåã®äžã§æ¬¡ã®ããã«èª¬æãããŠããŸãã
ããã§ãããžãã¯ããŸãšããŸãã åã®ç¶æ
ã§ã¯ãããã°ã©ã ã«ãã£ãŠä»¥åã«å
¥åãããã¬ãžã¹ã¿ãŒD1ã®å
容ã¯ãã¬ãžã¹ã¿ãŒA1ã«èœã¡ãŸããã ãã®ã¹ãããã§ããã·ã³ã¯
CurrentBitããªã¬ãŒã1ã«å€æããALUã§ã¯ãã¯ããã¯ãµã€ã¯ã«ããšã«A1ã¬ãžã¹ã¿ãæžå°ããŸãã A1ããŒãã«ãªããšããã©ã°ãèªåçã«çºçããäœæè
ã
CycleTimeoutãšããååã
ä»ããçµæããã·ã³ã¯
Setup1ç¶æ
ã«åãæ¿ãããŸãã
ç¶æ
Setup1ã¯ãæçšãªãã«ã¹ãéä¿¡ããããã®ããŒã¿ãæºåããŸãã
3'b011ã®ALUåœä»€ãèŠãŠãã ããã ããã«éããŸãïŒ
ALUã«ã¯ã¢ã¯ã·ã§ã³ããªãããã«æãããŸãã æäœNOPã ãããŠãALUåºåã¯ã©ãã«ãå°éããŸããã ããããããã¯ããã§ã¯ãããŸããã éåžžã«éèŠãªã¢ã¯ã·ã§ã³ã¯ãALUã®ããŒã¿ã·ããã§ãã å®éã®ãšãããåºåéã®ãã£ãªãŒãããã¯
ShiftOutãã§ãŒã³ã«æ¥ç¶ãããŠããŸãã
ãããŠããã®ã·ããæäœã®çµæãšããŠãã·ãããããå€èªäœã¯ã©ãã«ãå°éããŸãããã
ShiftOutãã§ãŒã³ã¯ã¬ãžã¹ã¿A0ã®æäžäœãããã®å€ãåããŸãã ã€ãŸããéä¿¡ããå¿
èŠãããããŒã¿ã§ãã ã°ã©ãã®ç¶æ
ã§ã¯ã
ShiftOutãã§ãŒã³ã«ALUãæ®ãããã®å€ã
CurrentBitããªã¬ãŒã«ã©ãããããããšã
ããããŸãã èšäºãå·»ãæ»ããªãããã«ãããäžåºŠå³é¢ã衚瀺ããŸãã
ãããã®2çªç®ã®éšåã®éä¿¡ãéå§ãããŸã-å³å€ã¯0ãŸãã¯1ã§ãã
ALUã®æ瀺ã«æ»ããŸãã ãã§ã«è¿°ã¹ãããšã«å ããŠãåã³ãã«ã¹ã®2/3ã®æç¶æéã枬å®ããããã«ãã¬ãžã¹ã¿D1ã®å
容ãã¬ãžã¹ã¿A1ã«åã³æ ŒçŽãããããšãããããŸãã
DataStageç¶æ
ã¯ã
Constant1ç¶æ
ã«éåžžã«äŒŒãŠããŸãã ãªãŒãããã³ã¯åçŽã«A1ãã1ãåŒãããŒãã«éãããšæ¬¡ã®ç¶æ
ã«å
¥ããŸãã ãã®ããã«èŠããŠãã ããïŒ
ãããŠãã®ããã«ïŒ
次ã«ã
Setup2ã®ç¶æ
ã«
ãªããŸã ããã®æ¬è³ªã¯æ¢ã«ããã£ãŠããŸãã
ãã®ç¶æ
ã§ã¯ã
CurrentBitããªã¬ãŒ
ã¯ãŒãã«ãªã»ãããããŸãïŒãã«ã¹ã®3åã®3ãåæ¢éšåãšããŠéä¿¡ãããåžžã«ãŒãã§ããããïŒã ALUã¯D1ã®å
容ãA1ã«ããŒãããŸãã ããªãã¯èšç·Žãããç®ã§çãã¡ã¢ã§ãããèŠãããšãã§ããŸãïŒ
Constant0ã®ç¶æ
ã¯ã
Constant1ããã³
DataStageã®ç¶æ
ãšå®å
šã«åäžã§ãã A1ãããŠããããåŒããŸãã å€ããŒãã«éãããã
ShiftDataç¶æ
ã«
æ»ããŸãã
ShiftDataã®ç¶æ
ã¯ããè€éã§ãã ALUã®å¯Ÿå¿ããæé ã§ã¯ã次ã®ã¢ã¯ã·ã§ã³ãå®è¡ãããŸãã
ã¬ãžã¹ã¿A0ã¯1ãããã·ãããããçµæã¯A0ã«æ»ãããŸãã A1ã§ã¯ãD1ã®å
容ãåã³å
¥åããã次ã®ããŒã¿ãããã®éå§3çªç®ã®æž¬å®ãéå§ãããŸãã
ShiftDataã®ç¶æ
ãããã«ã¯ãªãã¯ããåªå
é äœãèæ
®ããŠãåºåç¢å°ãèæ
®ããããšãã
å§ãããŸãã
æåŸã®ããããéä¿¡ãããªãå ŽåïŒãã®ãã©ã°ãã©ã®ããã«åœ¢æããããã«ã€ããŠãå°ãäœãïŒãçŸåšã®ãã€ãã®æ¬¡ã®ãããã«1ã転éããŸãã
æåŸã®ããããéä¿¡ãããFIFOã«ããŒã¿ããªãå Žåãã¢ã€ãã«ç¶æ
ã«ãªããŸãã
æåŸã«ãæåŸã®ããããéä¿¡ãããŠãââãFIFOã«ããŒã¿ãããå Žåã次ã®ãã€ãã®éžæãšéä¿¡ã«é²ã¿ãŸãã
次ã«ããããã«ãŠã³ã¿ã«ã€ããŠèª¬æããŸãã ALUã«ã¯ãA0ãšA1ã®2ã€ã®ããããªãŒãããããŸããã ãããã¯ãããããã·ããã¬ãžã¹ã¿ãšé
延ã«ãŠã³ã¿ã«ãã£ãŠæ¢ã«å æãããŠããŸãã ãããã£ãŠããããã«ãŠã³ã¿ã¯å€éšã§äœ¿çšãããŸãã
ãããããã«ã¯ãªãã¯ããŸãïŒ
ããŒãæã®å€ã¯6ã§ãã å€æ°ã»ã¯ã·ã§ã³ã§èª¬æãããŠãã
LoadCounterãã©ã°ã䜿çšããŠããŒããããŸãã
ã€ãŸããããŒã¿ã®æ¬¡ã®ãã€ããååŸããããšããã®å®æ°ãéäžã§ããŒããããŸãã
ãã·ã³ã
ShiftDataç¶æ
ã«ãªããšãã«ãŠã³ã¿ãŒã¯å€ãæžãããŸãã ãŒãã«éãããšãåºå
TerminalCountãæ¥ç¶ããã
ã·ãŒãFinalBitã®åè·¯ã«æ¥ç¶ãããŸãã ãã®åè·¯ã¯ããã·ã³ãçŸåšã®ãã€ãã®æ¬¡ã®ãããã転éããããæ°ãããã€ãã転éããïŒãŸãããŸãã¯æ°ããããŒã¿ãã±ãããåŸ
ã€ïŒããèšå®ããŸãã
å®éããã¹ãŠã¯ããžãã¯ããã®ãã®ã§ãã
Hungryåºåã®ç¶æ
ãèšå®
ããSpaceForDataä¿¡å·ã®
çææ¹æ³ïŒæ¬¡ã®ããŒã¿ãéä¿¡ã§ããããšãDMAãŠãããã«éç¥ããïŒããªãŒããŒã¯åå¥ã«è¿œè·¡ããããæåŸ
ãããŸãã
ãœãããŠã§ã¢ãµããŒã
å
ã®ãããžã§ã¯ãã®äœæè
ã¯ãçµ±åãœãªã¥ãŒã·ã§ã³ã説æãããããã¯å
ã®ã·ã¹ãã å
šäœããœãããŠã§ã¢ã§ãµããŒãããããšãéžæããŸããã æãåºãããŠãã ãããç§ãã¡ã¯ãã®ãããã¯ã«ã€ããŠè©±ããŠããïŒ
ãã®ã¬ãã«ãããDMAã©ã€ãã©ãªãããã¯ãšUDBããŒãã«å«ãŸãããã¹ãŠã®ããŒãã®äž¡æ¹ãå¶åŸ¡ã§ããŸãã APIãå®è£
ããããã«ããªãªãžãã«ã®äœæè
ã¯ããããŒãã¡ã€ã«ãšããã°ã©ã ãã¡ã€ã«ãè¿œå ããŸããã
ãããã®ãã¡ã€ã«ã®æ¬æ圢åŒã¯æ²ãããªããŸãã ãã¹ãŠã®è²¬ä»»ã¯ããçŽç²ãªãã®ãã«å¯ŸããPSoC Designeréçºè
ã®æã§ãã ãããã£ãŠãã²ã©ããã¯ããšããã¡ãŒãã«ã®ååã ããã§ã¯ãC ++ã®ã¯ã©ã¹ç·šæã圹ç«ã¡ãŸãã å°ãªããšããRTOS MAXãå®è£
ãããšãã«ããã確èªããŸãããçŸãã䟿å©ã«ãªããŸããã ããããããã§ã¯å€ãã®ããšãè°è«ããããšãã§ããŸãããäžãã倱æããããã®ã䜿çšããå¿
èŠããããŸãã ãããã®ãã¯ããå«ãAPIé¢æ°ãã©ã®ããã«èŠããããç°¡åã«ç€ºããŸãã
volatile void* `$INSTANCE_NAME`_Start(unsigned int nNumberOfNeopixels, void* pBuffer, double fSpeedMHz) {
ã²ãŒã ã®ãããã®ã«ãŒã«ãåãå
¥ããå¿
èŠããããŸãã ããã§ãé¢æ°ãéçºãããšãã«ã©ãããã€ã³ã¹ãã¬ãŒã·ã§ã³ãåŒãåºãããããããŸããïŒããã¯å
ã®ãããžã§ã¯ãã§è¡ãã®ãæé©ã§ãïŒã ãããŠããžã§ãã¬ãŒã¿ãŒã«ãã£ãŠæ¢ã«åŠçããããªãã·ã§ã³ãåãäžããŠã詳现ã«ã€ããŠè©±ãããšã奜ã¿ãŸãã
ã³ãŒãã®çæåŸïŒä»¥äžã§èª¬æïŒããã®ãã¡ã€ã«ã¯ããã«ä¿åãããŸãã
ãŸãããã¥ãŒã¯ãã§ã«å®å
šã«èªã¿åãå¯èœã§ãã ãããŸã§ã«2ã€ã®æ©èœããããŸãã æåã¯ã·ã¹ãã ãåæåãã2çªç®ã¯ãããã¡ããLEDã©ã€ã³ãžã®ããŒã¿ã®è»¢éãéå§ããŸãã
åæåã¯ã·ã¹ãã ã®ãã¹ãŠã®éšåã«åœ±é¿ããŸãã UDBã·ã¹ãã ã®äžéšã§ãã7ãããã«ãŠã³ã¿ãŒã®åæåããããŸãã
NP_Neo_BITCNT_Start();
D1ã¬ãžã¹ã¿ã«ããŒãããå¿
èŠãããå®æ°èšç®ããããŸãïŒ3çªç®ã®åãããã®æéãèšå®ããããšãæãåºããŸãïŒã
unsigned char fCyclesOn = (unsigned char)(0.35/(1.0/(fSpeedMHz))); CY_SET_REG8(NP_Neo_DPTH_D1_PTR, fCyclesOn+1);
DMAãããã¯ãã»ããã¢ãããããšããã®æ©èœã®ã»ãšãã©ã䜿çšãããŸãã ãããã¡ãŒã¯ãœãŒã¹ãšããŠäœ¿çšãããUDBãããã¯ã®FIFO0ã¯ã¬ã·ãŒããŒãšããŠäœ¿çšãããŸãïŒããã¡ãŒãã«ã¬ã³ãŒãã®NP_Neo_DPTH_F0_PTRïŒã äœæè
ã¯ãã®èšå®ã®äžéšãããŒã¿è»¢éæ©èœã«æã£ãŠããŸããã ããããç§ã®æèŠã§ã¯ãåéä¿¡ã®ããã«ãã¹ãŠã®èšç®ãè¡ãããšã¯ç¡é§ã§ãã ç¹ã«ãé¢æ°å
ã®ã¢ã¯ã·ã§ã³ã®1ã€ãéåžžã«å€§ããèŠãããšèããå Žåã
1ã€ç®ã®èæ¯ã«å¯Ÿãã2ã€ç®ã®é¢æ°ã¯ãç°¡æœæ§ã®é ç¹ã§ãã ããã©ãŒãã³ã¹èŠä»¶ããŸã£ãããªãåæå段éã§æåã®ãã®ãåŒã³åºãããã ãã§ãã æäœäžã¯ãäœåãªãã®ã«ããã»ããµãµã€ã¯ã«ãç¡é§ã«ããªãæ¹ãè¯ãã§ãã
void NP_Update() { if(NP_g_pFrameBuffer) { CyDmaChEnable(NP_g_nDMA_Chan, 1); } }
ïŒããã«ãããã¡ãªã³ã°ãæäŸããããã«ïŒè€æ°ã®ãããã¡ã§åäœããããã®æ©èœãæããã«ååã§ã¯ãããŸããããäžè¬ã«ãAPIæ©èœã®èª¬æã¯èšäºã®ç¯å²å€ã§ãã äž»ãªããšã¯ãéçºããããã¡ãŒã ãŠã§ã¢ã«ãœãããŠã§ã¢ãµããŒããè¿œå ããæ¹æ³ã瀺ãããšã§ãã ããã§æ¹æ³ãããããŸããã
ãããžã§ã¯ãçæ
ããã§ããã¡ãŒã ãŠã§ã¢éšåå
šäœã®æºåãæŽããAPIãè¿œå ãããŸããã次ã«äœããã¹ããïŒ ã¡ãã¥ãŒé
ç®
Build-> Generate ApplicationãéžæããŸãã
ãã¹ãŠããŸã
ããã° ã[
çµæ ]ã¿ããéããŠãæ¡åŒµåã
rptã®ãã¡ã€ã«ã
衚瀺ã§ããŸãã
ãã¡ãŒã ãŠã§ã¢ã®å®è£
ã«è²»ããããã·ã¹ãã ãªãœãŒã¹ã®éã瀺ããŠããŸãã
çµæãå
ã®ãããžã§ã¯ãã®çµæãšæ¯èŒãããšãç§ã®éã¯æãããªããŸãã
[
ãœãŒã¹ ]ã¿ãã«ç§»åããŠããœãããŠã§ã¢ããŒãã®æäœãéå§ããŸãã ããããããã¯ãã§ã«äºçŽ°ãªããšã§ãããç¹å¥ãªèª¬æã¯å¿
èŠãããŸããã
ãããã«
ãã®äŸãããèªè
ãUDBãããã¯ã䜿çšããå®è·µçãªäœæ¥ã«ã€ããŠãæ°ãããŠèå³æ·±ãäœããåŠãã ããšãé¡ã£ãŠããŸãã å°é家ã«ã¯æãããªããã€ãã®åŽé¢ãç解ããå¿
èŠããããããç¹å®ã®ã¿ã¹ã¯ïŒLEDå¶åŸ¡ïŒãšèšèšæ¹æ³è«ã«çŠç¹ãåœãŠãããšããŸããã ã¯ãšã¹ãã®æãåºãæ°é®®ãªãã¡ã«ããããããŒã¯ããããšããŸããã 解決ãããåé¡ã«é¢ããŠã¯ãç§ã«ãšã£ãŠã¿ã€ãã³ã°å³ã¯å
ã®éçºã®èè
ã»ã©çæ³çã§ã¯ãªãããšãããããŸããããLEDã®ããã¥ã¡ã³ãã§å®çŸ©ããã蚱容ç¯å²ã«å®å
šã«é©åããã·ã¹ãã ãªãœãŒã¹ã¯å€§å¹
ã«å°ãªããªããŸããã
å®éãããã¯èŠã€ãã£ãéæšæºæ
å ±ã®äžéšã«ãããŸããã ç¹ã«ãã»ãšãã©ã®è³æãããUDBã¯ã·ãªã¢ã«ããŒã¿ã§ã®ã¿ããŸãæ©èœããŠããããã«èŠãããããããŸããããããã§ã¯ãããŸããã ããŒã¿ãé§åããã³äžŠååããæ¹æ³ãç°¡åã«ç€ºãã¢ããªã±ãŒã·ã§ã³ããŒããèŠã€ããŸããã ãã®æ
å ±ã«åºã¥ããŠç¹å®ã®äŸãæ€èšããããšãã§ããŸãïŒãã ãããµã€ãã¬ã¹ã®å¥ã®ã³ã³ãããŒã©ãŒFX2LPã«åœ±ãèœãšãããšã¯ã§ããŸãããPSoCã®USBãã¹é床ã¯é
ããªããŸãïŒã
ç§ã®é ã¯ã3Dããªã³ã¿ãŒã®ããã©ãã·ã¥ãã®åé¡ã解決ããæ¹æ³ã«ã€ããŠã®ã¢ã€ãã¢ã玡ãã§ããŸãã ããã§ã¯ãã¹ãããã³ã°ã¢ãŒã¿ãŒã«ãµãŒãã¹ãæäŸããå²ã蟌ã¿ãCPUæéã®ããäžéšãé£ãå°œãããŸãã äžè¬ã«ã
RTOS MAXã«é¢ããèšäºã§ãå²ã蟌ã¿ãšããã»ããµæéã«ã€ããŠå€ãã®ããšã話ããŸããã ã¹ãããã³ã°ã¢ãŒã¿ãŒã®ä¿å®ã§ã¯ããã¹ãŠã®äžæçãªå°å±ãå®å
šã«UDBã«æã¡èŸŒã¿ãå°çšã®ã¿ã€ã ã¹ãããã§ãããè¡ãæéããªãããšãæããããšãªããããã»ããµã«çŽç²ã«èšç®ã¿ã¹ã¯ãä»»ããããšãã§ãããšæšå®ãããŠããŸãã
ãããããããã®ããšã¯ããããã¯ãèå³æ·±ãå Žåã«ã®ã¿æšè«ã§ããŸãã