
ã¯ããã«
ãµã€ãã¬ã¹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)); //Call NeoPixel update function (non blocking) to trigger DMA pixel update NP_Update();
ãããŠãããã«ãªã·ãã¹ã³ãŒãã§ãã®ãããªåçããããŸãïŒ

æåã®ãããã®å¹ ã¯ãä»ã®ããããšã¯ç°ãªããŸãã ç§ã¯ãã¹ãŠã®éšéãéãããã«é Œãã ãããã¹ãŠãæ®ãããã§ã¯ãªãã ãã®ãã¡ãŒãã«ãªããŸããïŒ ã¹ãã£ã³ãå€æŽããŸãã

å¹ ã¯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) { //work out cycles required at specified clock speed... `$INSTANCE_NAME`_g_pFrameBuffer = NULL; if((0.3/(1.0/(fSpeedMHz))) > 255) return NULL; unsigned char fCyclesOn = (unsigned char)(0.35/(1.0/(fSpeedMHz))); `$INSTANCE_NAME`_g_nFrameBufferSize = nNumberOfNeopixels*3; //Configure for 19.2 MHz operation `$INSTANCE_NAME`_Neo_BITCNT_Start(); //Counts bits in a byte //Sets bitrate frequency in number of clocks. Must be larger than largest of above two counter periods CY_SET_REG8(`$INSTANCE_NAME`_Neo_DPTH_D1_PTR, fCyclesOn+1); //Setup a DMA channel `$INSTANCE_NAME`_g_nDMA_Chan = `$INSTANCE_NAME`_DMA_DmaInitialize(`$INSTANCE_NAME`_DMA_BYTES_PER_BURST, `$INSTANCE_NAME`_DMA_REQUEST_PER_BURST, HI16(`$INSTANCE_NAME`_DMA_SRC_BASE), HI16(`$INSTANCE_NAME`_DMA_DST_BASE)); if(pBuffer == NULL) ...
ã²ãŒã ã®ãããã®ã«ãŒã«ãåãå ¥ããå¿ èŠããããŸãã ããã§ãé¢æ°ãéçºãããšãã«ã©ãããã€ã³ã¹ãã¬ãŒã·ã§ã³ãåŒãåºãããããããŸããïŒããã¯å ã®ãããžã§ã¯ãã§è¡ãã®ãæé©ã§ãïŒã ãããŠããžã§ãã¬ãŒã¿ãŒã«ãã£ãŠæ¢ã«åŠçããããªãã·ã§ã³ãåãäžããŠã詳现ã«ã€ããŠè©±ãããšã奜ã¿ãŸãã
ã³ãŒãã®çæåŸïŒä»¥äžã§èª¬æïŒããã®ãã¡ã€ã«ã¯ããã«ä¿åãããŸãã

ãŸãããã¥ãŒã¯ãã§ã«å®å šã«èªã¿åãå¯èœã§ãã ãããŸã§ã«2ã€ã®æ©èœããããŸãã æåã¯ã·ã¹ãã ãåæåãã2çªç®ã¯ãããã¡ããLEDã©ã€ã³ãžã®ããŒã¿ã®è»¢éãéå§ããŸãã
åæåã¯ã·ã¹ãã ã®ãã¹ãŠã®éšåã«åœ±é¿ããŸãã UDBã·ã¹ãã ã®äžéšã§ãã7ãããã«ãŠã³ã¿ãŒã®åæåããããŸãã
NP_Neo_BITCNT_Start(); //Counts bits in a byte
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ã€ãéåžžã«å€§ããèŠãããšèããå Žåã
//work out cycles required at specified clock speed... NP_g_pFrameBuffer = NULL; NP_g_nFrameBufferSize = nNumberOfNeopixels*3; //Setup a DMA channel NP_g_nDMA_Chan = NP_DMA_DmaInitialize(NP_DMA_BYTES_PER_BURST, NP_DMA_REQUEST_PER_BURST, HI16(NP_DMA_SRC_BASE), HI16(NP_DMA_DST_BASE)); ... NP_g_nDMA_TD = CyDmaTdAllocate(); CyDmaTdSetConfiguration(NP_g_nDMA_TD, NP_g_nFrameBufferSize, CY_DMA_DISABLE_TD, TD_INC_SRC_ADR | TD_AUTO_EXEC_NEXT); CyDmaTdSetAddress(NP_g_nDMA_TD, LO16((uint32)NP_g_pFrameBuffer), LO16((uint32)NP_Neo_DPTH_F0_PTR)); CyDmaChSetInitialTd(NP_g_nDMA_Chan, NP_g_nDMA_TD);
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ã«æã¡èŸŒã¿ãå°çšã®ã¿ã€ã ã¹ãããã§ãããè¡ãæéããªãããšãæããããšãªããããã»ããµã«çŽç²ã«èšç®ã¿ã¹ã¯ãä»»ããããšãã§ãããšæšå®ãããŠããŸãã
ãããããããã®ããšã¯ããããã¯ãèå³æ·±ãå Žåã«ã®ã¿æšè«ã§ããŸãã