æ¬ã·ãªãŒãºã§ã¯ãPart 1ïœPart 3ã«ããããDSPïŒDigital Signal ProcessorïŒã«é¢ãã以äžã®ãããªè©±é¡ã«ã€ããŠèª¬æããŠããŸããã
- ãPart 1ïŒvol. 31-1ïŒãDSPã®ã¢ãŒããã¯ãã£ãåŸæ¥ã®ã¢ããã° åè·¯ã«å¯ŸããDSPã®åªäœæ§
- ãPart 2ïŒvol. 31-2ïŒãããžã¿ã«ã»ãã£ã«ã¿ã«ããåŠçã®æŠå¿µã DSPã«ãããã£ã«ã¿åŠçã®ã¢ã«ãŽãªãºã
- ãPart 3ïŒvol. 31-3ïŒãFIRãã£ã«ã¿ã®ã¢ã«ãŽãªãºã ã®å®è£ ã ãã¢çšããŒããŠã§ã¢ã»ãã©ãããã©ãŒã ãADSP-2181 EZ-Kit Litesupâ¢supãã®æŠèŠ
ä»åïŒPart 4ïŒã¯ãDSPãããŒã¹ãšãããªã¢ã«ã¿ã€ã ã»ã·ã¹ãã ã«ç¹æã®ããã°ã©ãã³ã°äžã®èª²é¡ã«ã€ããŠè©³ãã解説ããŸãããªãã§ããæ§ã ãªIOã€ã³ã¿ãŒãã§ãŒã¹ãåããDSPã·ã¹ãã åãã®ã¢ã«ãŽãªãºã ãéçºããæ¹æ³ã«çŠç¹ãçµãããšã«ããŸãã
ããªã¢ã«ã¿ã€ã ããšã¯äœãæå³ããã®ãïŒ ã¢ããã°ã»ã·ã¹ãã ã§ã¯ãé£ç¶ããä¿¡å·ãšé£ç¶ããåŠçã«ãã£ãŠããããã¿ã¹ã¯ããªã¢ã«ã¿ã€ã ã«å®è¡ãããŸããããã«å¯ŸããDSPã·ã¹ãã ã§ã¯ãäžé£ã®ãµã³ãã«ãã€ãŸãæé軞äžã«é¢æ£çã«ååšããå€ïŒããŒã¿ïŒã«ãã£ãŠä¿¡å·ã衚çŸãããŸããDSPã·ã¹ãã ã§ç¹å®ã®æ°ã®ãµã³ãã«ãåŠçããå Žåãããã«ãããæéã¯ãµã³ããªã³ã°ã»ã¬ãŒãã®å€ã«ãã£ãŠæ±ºãŸããŸãããã®ãããDSPã·ã¹ãã ã®å Žåããªã¢ã«ã¿ã€ã ãšããèšèã¯ããµã³ããªã³ã°ã»ã¬ãŒãã«äŸåããä»»æã®å€ã§ãããšè§£éã§ããŸãããã¡ãããä»»æãšã¯ãããã©ã®ãããªå€ã§ãæ§ããªããšããããšã§ã¯ãããŸãããæ¬ã·ãªãŒãºã®Part 1ã§ã¯ããµã³ããªã³ã°ã®æŠå¿µãšãã€ãã¹ãåºæºã«ã€ããŠè§£èª¬ããŸããããã€ãã¹ãåºæºã«ããã°ããªã¢ã«ã¿ã€ã ã»ã¢ããªã±ãŒã·ã§ã³ã«ããããµã³ããªã³ã°åšæ³¢æ°ã¯ã察象ãšããã¢ããã°ä¿¡å·ã®æé«åšæ³¢æ°æåã®2å以äžã®å€ïŒãã€ãã¹ãã»ã¬ãŒãïŒã§ãªããã°ãªããŸããïŒã¡ãªã¿ã«ããµã³ãã«ãšãµã³ãã«ã®éã®æéã¯ããµã³ããªã³ã°ééãšåŒã°ããŸãïŒãã·ã¹ãã ããªã¢ã«ã¿ã€ã ã§åäœããŠãããšèŠãªãã«ã¯ãç¹å®ã®ããŒã¿ã»ã»ããïŒã¢ã«ãŽãªãºã ã«äŸåãã1ã€ä»¥äžã®ãµã³ãã«ïŒã«å¯Ÿãããã¹ãŠã®åŠçããæ°ããããŒã¿ãå°çããåã«å®äºããŠããªããã°ãªããŸããããã®ããã«èããã°ãDSPã·ã¹ãã ã«ããããªã¢ã«ã¿ã€ã ãšããèšèã®å®çŸ©ã¯ãã®ããšèŠããŠããã§ãããã
ç¹å®ã®ã¯ããã¯ã»ã¬ãŒãã§åäœããããã»ããµã«ãããŠãããŒã¿ã»ã¹ããªãŒã ã«å¯ŸããŠé ããããšãªãããŒã¿ã«é©çšã§ããåŠçã®éã¯ãå ¥åããŒã¿ã®é床ãšéã«ãã£ãŠæ±ºãŸããŸããåŠçã«è²»ãããæéãéãããŠãããšããã®ã¯ãã¢ããã°ã»ã·ã¹ãã ãšã¯èŠªåæ§ãäœãæŠå¿µã ãšèšããŸãããã®ãããã¢ããã°èšèšè ã«ãšã£ãŠã¯çè§£ãã«ãããã®ãããããŸãããããã§ãå³1ãã芧ãã ãããã¢ããã°ã»ã·ã¹ãã ã®å Žåãä¿¡å·ã¯é£ç¶çã«åŠçãããŸããã·ã¹ãã ãäœéã§ããå Žåã«åé¡ã«ãªãã®ã¯ãåšæ³¢æ°å¿çãå¶éãããããšã ãã§ããããã«å¯Ÿããããžã¿ã«ã»ã·ã¹ãã ã§ã¯ä¿¡å·ã®äžéšåãåãåºãããã®éšåã ãã察象ãšããŠåŠçãè¡ããŸãããã®åŠçãå®äºããããæ¬¡ã®äžéšåã察象ãšããŠåŠçãè¡ããšããããšãç¹°ãè¿ããŸãããã®ãããªæ¹æ³ã§ããååã«æ£ç¢ºãªè¿äŒŒãè¡ãããŸãããã ãå³1ã®ããã«ç¹å®ã®æéã1ã€ã®ãããã¯ãšããŠæ±ããé£ç¶ããåãããã¯ã察象ãšããŠäžé£ã®åŠçãè¡ããããšããç¹ã§ãã¢ããã°ã»ã·ã¹ãã ãšã¯ç°ãªããŸãããªã¢ã«ã¿ã€ã åäœã«å¯Ÿå¿ããªããã°ãªããªãDSPã®å Žåãã¢ã«ãŽãªãºã ã®å²ãåœãŠæéå ã«å¯Ÿå¿ã§ããããŒã¿ã®éãåŠçã®çš®é¡ã«å¿ããŠå¶éãå ããããšããããŸããé³å£°ä¿¡å·ãäŸã«ãšããšã48kHzã§ãµã³ããªã³ã°ãããããŒã¿ãæ±ãDSPã§ã¯ã8kHzã§ãµã³ããªã³ã°ãããããŒã¿ãæ±ãDSPãšæ¯ã¹ãŠããŒã¿ã®åŠçã«è²»ãããæéã¯çããªããŸãããã®æéã«ã¯ãå¿ èŠãªå šã¿ã¹ã¯ã®åŠçãå«ãŸããŸãã
æ¬ã·ãªãŒãºã®ä»¥åã®èšäºã§ã¯ãå ¥åãµã³ããªã³ã°ã»ã¬ãŒãã8kHzã®ãã£ã«ã¿ãäŸã«ãšããŸããããã®å ŽåãDSPããªã¢ã«ã¿ã€ã ã®ããŒã¿ã«é ãããšããªãããã«ããããã«ã¯ããã¹ãŠã®åŠçã125ãã€ã¯ãç§ïŒ1ç§8kHzïŒã®å²ãåœãŠæéå ã§å®è¡ããå¿ èŠããããŸãã33MHzã®åäœã«å¯Ÿå¿ããDSPïŒ1ãµã€ã¯ã«ã¯30ããç§ïŒã®å Žåãå¿ èŠãªãã¹ãŠã®åŠçãã¿ã¹ã¯ãå®äºããããã«äœ¿çšã§ããã®ã¯ã4166åœä»€ãµã€ã¯ã«ïŒ125ãã€ã¯ãç§ïŒ30ããç§ïŒãšãªããŸãã
ä»»æã®ã¢ã«ãŽãªãºã ãå®è¡ããããã«å²ãåœãŠãããšãå¯èœãªæéã¯æéã§ããæéã®ç®¡çã¯ãDSPã·ã¹ãã ã®ãœãããŠã§ã¢ãèšèšããéã®äžæ žçãªèŠçŽ ã«ãªããŸããæéã®ç®¡çã«é¢ããæŠç¥ã«å¿ããããã»ããµãã€ãã³ãã®éç¥ãåãåãæ¹æ³ã決ãŸããŸãããŸãããã®æŠç¥ã¯ããŒã¿ã®åŠçã«ã圱é¿ãåãŒããŸããèšãæããã°ãããããæŠç¥ãæ§ç¯ããããšã«ãã£ãŠãDSPã«ããéä¿¡ãå ·äœåããããšãå¯èœã«ãªããŸãã

ã€ãã³ãã®éç¥ãå²ã蟌ã¿ã®åŠç: DSPã䜿çšããå Žåãã€ãã³ãïŒããŒã¿ã®å°çïŒãæ±ãããã®ããã€ãã®æŠç¥ã®ãã¡1ã€ã䜿çšããããšã«ãã£ãŠãããŒã¿åŠçã®å 容ãããã°ã©ãã³ã°ããŸããäŸãã°ãã¹ããŒã¿ã¹ã»ããããŸãã¯ãã©ã°ã»ãã³ã®å€ã宿çã«èªã¿åãããšã§ãæ°ããããŒã¿ãå©çšã§ãããåŠãã倿ããããšã¯å¯èœã§ãããã ãããŒãªã³ã°ã¯ããã»ããµïŒDSPã«ãããŠåŠçïŒå¶åŸ¡ãæ ãããã»ããµåè·¯ïŒã®ãµã€ã¯ã«ã浪費ããŸããæåŸã®ããŒãªã³ã°ã®çŽåŸã«ããŒã¿ãå°çãããããããŸããããæ¬¡ã®ããŒãªã³ã°ãŸã§ãã®ååšãéç¥ããããšã¯ã§ããŸããããã®ããããªã¢ã«ã¿ã€ã ã»ã·ã¹ãã ãéçºããã®ã¯é£æåºŠã®é«ãäœæ¥ã«ãªããŸãã
ãã1ã€ã®æŠç¥ã¯ãããŒã¿ãå°çããéã«ããã»ããµã«å²ã蟌ã¿ãããããšãããã®ã§ããããã»ããµã«å¯ŸããŠã¯å²ã蟌ã¿ã䜿ã£ãŠéç¥ãè¡ãã®ãå¹ççã§ããäœãããã®ããã®ããã°ã©ãã³ã°ã¯å®¹æã ãšã¯èšããŸããããŸããå²ã蟌ã¿ãåŸ ã£ãŠããéã¯ã¯ããã¯ã»ãµã€ã¯ã«ã浪費ãããå¯èœæ§ããããŸãããšã¯ãããçŸå®ã®äžçã®ä¿¡å·ãè¿ éã«åŠçããæ¹æ³ãšããŠã¯ãã€ãã³ãé§ååã®å²ã蟌ã¿ã®ããã°ã©ãã³ã°ãé©ããŠããŸãããã®ãããã»ãšãã©ã®DSPã¯ãããããããã°ã©ã ãå¹ççã«åŠçã§ããããã«èšèšãããŠããŸããå®éãå€ãã®DSPã¯å²ã蟌ã¿ã«å¯ŸããŠéåžžã«è¿ éã«å¿çããŸããäŸãã°ããADSP-2181ãã®å Žåãå²ã蟌ã¿ã«å¯Ÿããå¿çæéã¯çŽ3ããã»ããµã»ãµã€ã¯ã«ã§ããã€ãŸããDSPãå®è¡ããŠããåŠçã75ããç§ä»¥å ã«åæ¢ããå²ã蟌ã¿ã®ã€ãã³ãïŒãã¯ãã«ïŒãåŠçããããšãã§ããŸãã
DSPããŒã¹ã®å€ãã®ã·ã¹ãã ã§ã¯ãå²ã蟌ã¿ã®ã¬ãŒãã¯å ¥åããŒã¿ã®ãµã³ããªã³ã°ã»ã¬ãŒãã«åºã¥ããŸããå€ãã®å ŽåãDSPã®ã¯ããã¯ã»ã¬ãŒããšã¯å šãé¢ä¿ããããŸãããæ¬ã·ãªãŒãºã®ä»¥åã®èšäºã§ã¯ãFIRïŒFinite Impulse ResponseïŒãã£ã«ã¿ã玹ä»ããŸããããã®äŸã§ã¯ãããã»ããµã«125ãã€ã¯ãç§ã®ééã§å²ã蟌ã¿ãããããæ°ããããŒã¿ãååŸããŠããŸããã
å²ã蟌ã¿åŠçãšå²ã蟌ã¿ãã¯ãã«: DSPã·ã¹ãã ã«ãããŠãå²ã蟌ã¿åŠçã¯éåžžã«éèŠãªèŠçŽ ã§ãããã®ãããã»ãšãã©ã®DSPã¯ãå²ã蟌ã¿ãå¹ççã«åŠçããããã®ããŒããŠã§ã¢ã»ããŒã¹ã®æ©æ§ãåããŠããŸãããã®çš®ã®æ©æ§ã¯ããœãããŠã§ã¢åç¬ã§å¹çãé«ããããšããããã广çã«æ©èœããŸããDSPã®å²ã蟌ã¿ãµãŒãã¹ã»ã«ãŒãã³ïŒISRïŒInterrupt Service RoutineïŒã¯ã以äžã®ãã¹ãŠã®èŠæ±ãæºãããªããã°ãªããªãã±ãŒã¹ãããããã§ãã
- ã³ã³ããã¹ãã®é«éãªã¹ã€ããã³ã°ïŒããã³ã³ããã¹ãïŒäœããã®ã¿ã¹ã¯ãšããã«äœ¿çšãããããŒã¿ïŒããå¥ã®ã³ã³ããã¹ããžåãæ¿ããéãã¬ãžã¹ã¿ã®å 容ãšãããã®ã¹ããŒã¿ã¹æ å ±ãä¿åããããã®ããã°ã©ãã³ã°ã«äŒŽãæéã®æå€±ãè€éããåé¿ããããšãæ±ããããŸãã
- ãã¹ãåã®å²ã蟌ã¿åŠçïŒæ§ã ãªåªå 床ã®è€æ°ã®å²ã蟌ã¿ãåæã«åŠçããããšãæ±ããããŸããDSP ã¯ãäžåºŠã« 1 ã€ã®å²ã蟌ã¿ãåŠçããŸãããã ãåªå 床ãé«ãå²ã蟌ã¿ã¯ãåªå 床ãäœãå²ã蟌ã¿åŠçãããåªå ãããããšããããŸãã
- ããŒã¿ã®åãå ¥ãïŒã¹ããŒã¿ã¹ã®èšé²ã®ç¶ç¶ïŒDSP ãå²ã蟌ã¿ãåŠçããŠããéããçŸå®ã®äžçã§ã¯ã€ãã³ããçºçãç¶ããããŒã¿ãç¶ç¶çã«å°çããŸããããã«é ããªãããã«ããããã«ãDSP ã¯ãããã®ã€ãã³ããèšé²ããŠããŒã¿ãåãå ¥ããŸããå²ã蟌ã¿åŠçãå®äºããããããããåŠçããªããã°ãªããŸããã
ã¢ããã°ã»ããã€ã»ãºãæäŸããDSP補åã§ã¯ã2çµã®ããŒã¿çšã¬ãžã¹ã¿ã䜿çšããŠã³ã³ããã¹ãã®é«éã¹ã€ããã³ã°ãå®çŸããŠããŸãã2çµãåæã«ã¢ã¯ãã£ãã«ãªãããšã¯ãªããåã³ã³ããã¹ãã«ã¯åŠçäžã®ãã¹ãŠã®ããŒã¿ãå«ãŸããŸããå²ã蟌ã¿åŠçã®éãããã»ããµã¯ããŒã¿ãã¡ã¢ãªã«äžæçã«ä¿åããå¿ èŠã¯ãªããã¢ã¯ãã£ããªç¶æ ã®ã¬ãžã¹ã¿ããããäžæ¹ã®ã¬ãžã¹ã¿ãžãšåãæ¿ããè¡ãããšãã§ããŸããããã«ãããã¿ã¹ã¯éã®åãæ¿ããè¿ éãã€åæ»ã«å®æœã§ããŸãã
ãŸããã¢ããã°ã»ããã€ã»ãºã®DSP補åã¯ãè€æ°ã®å²ã蟌ã¿ãåŠçããããã«ããããã®ç¶æ ãèšé²ããŸããããã»ããµã®ç¶æ ã«é¢ããæ å ±ã¯ãDSPã®Program Sequencerã«é 眮ãããã¹ããŒã¿ã¹ã®ã»ããã§ããã¹ã¿ãã¯ã«ä¿æãããŸããã¹ã¿ãã¯ã¯ãããŒããŠã§ã¢ã»ããŒã¹ã®1çµã®ã¬ãžã¹ã¿ã§æ§æãããŠããŸããçŸåšã®ã¹ããŒã¿ã¹æ å ±ã¯ãã€ãã³ãã®çºçæã«ã¹ã¿ãã¯ã«ããã·ã¥ãããŸãããŸãããã®ã¹ã¿ãã¯ã®ä»çµã¿ã«ãã£ãŠå²ã蟌ã¿ããã¹ãããããšãå¯èœã§ããã€ãŸããåªå 床ã®é«ãæ¹ãåªå 床ã®äœãæ¹ã«å²ã蟌ãããšãã§ããŸãã
ã¢ããã°ã»ããã€ã»ãºã®DSP補åã¯ãå²ã蟌ã¿ã©ãããšèªååIOãšãã2ã€ã®ããŒããŠã§ã¢æ©èœãåããŠããŸãããããã«ãã£ãŠãå²ã蟌ã¿åŠçã®æäžã§ãçŸå®äžçã«é ããªãããã«ããããšãã§ããŸããå²ã蟌ã¿ã©ããã¯ãDSPãå²ã蟌ã¿åŠçã®æäžã«éèŠãªã€ãã³ããèŠèœãšããªãããã«ããããã®ãã®ã§ããäžæ¹ãèªååIOïŒã·ãªã¢ã«ã»ããŒããDMAããªãŒããããã¡ãªã³ã°ãªã©ãå«ãïŒã®æ©èœãå©çšããããšã§ãå€éšããã€ã¹ã¯DSPãä»å ¥ããªããŠãDSPã®ã¡ã¢ãªã«ããŒã¿ãéåºã§ããããã«ãªããŸãããã®ãããDSPãããžãŒã®ç¶æ ã§ãã£ãŠããããŒã¿ã¯äžåæ¬ èœããããšã¯ãããŸããã
å€éšãœãŒã¹ãŸãã¯å éšãªãœãŒã¹ããå²ã蟌ã¿ã®èŠæ±ãçºçãããšãDSPã¯èªåçã«çŸåšã®åäœç¶æ ãä¿åããŠå²ã蟌ã¿ã«ãŒãã³ã®å®è¡ã«åããŸããå²ã蟌ã¿ã«ãŒãã³ã¯ãå²ã蟌ã¿ãã¯ãã«ã®ããŒãã«ãããã£ã¹ããããããŸããå²ã蟌ã¿ãã¯ãã«ã®ããŒãã«ã¯ãããã°ã©ã ã»ã¡ã¢ãªå ã®äžé åãšããŠååšããŸããåããŒãã«ã¯ãDSPã®ç¹å®ã®å²ãèŸŒã¿æ©èœã«å²ãåœãŠãããåœä»€ã¢ãã¬ã¹ãåããŠããŸãããã®ããŒãã«ã®äŸã以äžã«ç€ºããŸããããã®äŸã®å ŽåãADSP-2181ã®ã·ãªã¢ã«ã»ããŒã1ïŒSPORT1ïŒã«ãããéä¿¡ïŒTxïŒå²ã蟌ã¿ã«ãã£ãŠãããã°ã©ã ã»ã¡ã¢ãªïŒPMïŒã®0x0020ãšããäœçœ®ã§æ¬¡ã®åœä»€ãå®è¡ãããŸããããã«ç¶ããŠã0x0023ãŸã§ã®3ã€ã®äœçœ®ã®å 容ïŒå²ã蟌ã¿ã«ãŒãã³ïŒãå®è¡ãããŸãããã®ããŒãã«ã«èšè¿°ããã12åã®é ç®ãèŠããšãããããã«ãADSP-2181ã¯ã11ã®äœçœ®ïŒå€éšããŒããŠã§ã¢ãDMAããŒããã·ãªã¢ã«ã»ããŒãïŒãšããã»ããµã®ãªã»ããããã®å²ã蟌ã¿ãåŠçããããšãã§ããŸãããªãããã®ããŒãã«ã¯FIRãã£ã«ã¿çšã®ãã®ã§ããããã¯ã0x0000ãã0x002Fã®ã¡ã¢ãªäœçœ®ã«ããåå²ã蟌ã¿ãã¯ãã«ã®ãœãŒã¹ã«å²ãåœãŠãããããã°ã©ã æžã¿ã®åœä»€ã衚ããŠããŸãã
Jump start; nop; nop; nop; /* PM(0x0000-03): Reset vector */
rti; nop; nop; nop; /* PM(0x0004-07): IRQ2 vector */
rti; nop; nop; nop; /* PM(0x0008-0B): IRQL1 vector */
rti; nop; nop; nop; /* PM(0x000C-0F): IRQL0 vector */
ar = dm(stat_flag); ar = pass ar; if eq_rti; jump next_cmd;
/* PM(0x0010-13): SPORT0 Tx vector */
jump input_samples; nop; nop; nop;
/* PM(0x0014-17): SPORT0 Rx vector */
jump irqe; nop; nop; nop; /* PM(0x0018-1B): IRQE vector */
rti; nop; nop; nop; /* PM(0x001C-1F): BDMA vector */
rti; nop; nop; nop; /* PM(0x0020-23): SPORT1 Tx vector */
rti; nop; nop; nop; /* PM(0x0024-27): SPORT1 Rx vector */
rti; nop; nop; nop; /* PM(0x0028-2B): Timer vector */
rti; nop; nop; nop; /* PM(0x002C-2F): Powerdown vector */
åå²ã蟌ã¿ãã¯ãã«ã«ã¯4ã€ã®åœä»€äœçœ®ããããŸããéåžžããããã®åœä»€ã¯ãResetïŒ0x0000ïŒãSPORT0 RxïŒ0x0014ïŒãIRQEïŒ0x0018ïŒã®å²ã蟌ã¿ãã¯ãã«ã«ç€ºãããŠããããã«ãããŒã¿ãåŠçããããã«ããã»ããµã®åŠçãã¡ã¢ãªã®å¥ã®é åã«ãžã£ã³ããããŸãããŸããå€ã®èªã¿åããã¹ããŒã¿ã¹ã®ãã§ãã¯ãã¡ã¢ãªã®ããŒããªã©ã䜿çšå¯èœãª4ã€ã®åœä»€äœçœ®ã®ç¯å²å ã§å®è¡å¯èœãªãããæ°ã¹ãããã®åŠçããå¿ èŠãªãã±ãŒã¹ããããŸããããããå ŽåãSPORT0 Txã®ãã¯ãã«ïŒ0x0010ïœ13ïŒãšåæ§ã«çŽæ¥ããã°ã©ã ãèšè¿°ããããšãã§ããŸããæªäœ¿çšã®å²ã蟌ã¿ãã¯ãã«ã¯ãããããå²ã蟌ã¿ããã®åŸ©åž°ïŒrtiïŒåœä»€ãåŒã³åºããäžã§3ã€ã®nopïŒäœãè¡ããªãïŒåœä»€ãåŠçããŸãã
nopåœä»€ã¯ããã¬ãŒã¹ã»ãã«ããšããŠæ©èœããŸããããã¯ãããŒããŠã§ã¢ã§æå®ãããå²ã蟌ã¿ãã¯ãã«ãæ£ããå²ã蟌ã¿åäœã«é©åãããããã«äœ¿çšãããåœä»€ã¹ããŒã¹ã§ããæªäœ¿çšã®åãã¯ãã«äœçœ®ã®å é ã«ããrtiåœä»€ã¯ããã¬ãŒã¹ã»ãã«ããšâå®å šåŒâã®äž¡æ¹ã®åããããŸããæªäœ¿çšã®å²ã蟌ã¿ã誀ã£ãŠãã¹ã¯ãããŠããªãç¶æ ã«ãªã£ãããæå³ããããªã¬ãããŠããŸã£ããããå Žåã§ããrtiåœä»€ã«ãã£ãŠæ£åžžãªåäœã«åŸ©åž°ãããããšãã§ããŸãã
ããŒã¿ã®å ¥åºå
éåžžãDSPã·ã¹ãã ã«ãããŠã¯ãããŒã¿ãå°çãããããŸãã¯æ°ããªåºåããŒã¿ãæäŸããããšãèŠæ±ããããšå²ã蟌ã¿ãçºçããŸãããã®éãå²ã蟌ã¿ã¯ãµã³ãã«ããšã«çºçãããããŸãã¯ããŒã¿ã®ãã¬ãŒã ãåéãããåŸã«çºçããããšã«ãªããŸãããã®ãããªéãã¯ãDSPã®ã¢ã«ãŽãªãºã ã«ãããããŒã¿ã®åãæ±ãæ¹ã«å€§ããªåœ±é¿ãåãŒããŸãã
ãµã³ãã«ããšã«åäœããã¢ã«ãŽãªãºã ã䜿çšããå ŽåãDSPã®ãœãããŠã§ã¢ãšããŠã¯åä¿¡ããããŒã¿ã®å€ãšéä¿¡ããããŒã¿ã®å€ããšã«åŠçãè¡ããªããã°ãªããªãå¯èœæ§ããããŸããDSPã®åã·ãªã¢ã«ã»ããŒãã«ã¯ãããŒã¿ã®å ¥åºåïŒIOïŒã«äœ¿çšããã¬ãžã¹ã¿ãšããŠãåä¿¡ïŒRxïŒçšã®ã¬ãžã¹ã¿ãšéä¿¡ïŒTxïŒçšã®ã¬ãžã¹ã¿ãçµã¿èŸŒãŸããŠããŸããéåžžãã·ãªã¢ã«ã»ã¯ãŒããåä¿¡ããããããŒãã¯åä¿¡ïŒReceiveïŒå²ã蟌ã¿ãçºçãããŸãããããåããŠãããã»ããµã¯å®è¡äžã®åŠçã忢ããå²ã蟌ã¿ãã¯ãã«ã®äœçœ®ã§ã³ãŒãã®å®è¡ãéå§ããŸããæ¬¡ã«ãåä¿¡çšã®ã¬ãžã¹ã¿ã®ããŒã¿ãããã»ããµã®ããŒã¿çšã¬ãžã¹ã¿ã«èªã¿èŸŒã¿ãããã«å¯ŸããæŒç®ãè¡ãããããã¯ã°ã©ãŠã³ãã®ã¿ã¹ã¯ã«æ»ããŸããäžèšã®ããŒãã«ã®å Žåãã³ã³ãã¥ãŒã¿ã¯input_samplesãšããããã°ã©ã ã®ã»ã°ã¡ã³ãã«ãžã£ã³ãããŸããç¶ããŠããã®ã»ã°ã¡ã³ãã§ããã°ã©ã ãããŠããåœä»€ããã¹ãŠå®è¡ããçŽæ¥ãŸãã¯å²ã蟌ã¿ãã¯ãã«ã«æ»ãããšã«ãã£ãŠå²ã蟌ã¿ãã埩垰ããŸãã
ããŒã¿ãéä¿¡ããéã«ã¯ãã·ãªã¢ã«ã»ããŒãã¯éä¿¡ïŒTransmitïŒå²ã蟌ã¿ãçºçãããŸããããã«ãããSPORT Txã®ã¬ãžã¹ã¿ã«æ°ããããŒã¿ãæžã蟌ããããšã瀺ããŸããæ¬¡ã«ãDSPã¯SPORT Txã®å²ã蟌ã¿ãã¯ãã«ã«ãã£ãŠã³ãŒãã®å®è¡ãéå§ããŸãããã®éã«ã¯ãéåžžãããŒã¿çšã¬ãžã¹ã¿ããSPORT Txã®ã¬ãžã¹ã¿ãžããŒã¿ã転éããããšãã§ããŸããããŒã¿ã®å ¥åºåãåããµã³ãã«ã»ã¯ããã¯ã§å¶åŸ¡ãããå Žåãå¿ èŠãªå²ã蟌ã¿ã¯1ã€ã ãã§ããäŸãã°ãããã°ã©ã ã®ã»ã°ã¡ã³ããåä¿¡å²ã蟌ã¿ã®ã¿ã€ãã³ã°ã§éå§ããããšããŸãããã®å Žåãå²ã蟌ã¿ã«ãŒãã³ã®äžã«æ°ããããŒã¿ãèªã¿èŸŒãŸããŸãããã®åŸã以åã«èšç®ããçµæïŒã¬ãžã¹ã¿ã«ä¿æãããŠããŸãïŒãéä¿¡ããããããŸã㯠å²ã蟌ã¿ã«ãŒãã³ã®æåŸã®ã¹ããããšããŠæ°ããçµæãç®åºãããŠå³åº§ã«éä¿¡ãããŸãã
ãã®ãããªä»çµã¿ã«ãã£ãŠãDSPã¯ã¢ããã°ã»ã·ã¹ãã ãèªç¶ã«è¡ã£ãŠããããšïŒãªã¢ã«ã¿ã€ã ã§ä¿¡å·ãé£ç¶çã«åŠçããïŒãæš¡æ¬ããããšãã§ããŸããã¢ããã°ã»ã·ã¹ãã ã«è¿ãèœåãçºæ®ããã ãã§ãªããããžã¿ã«ãªãã§ã¯ã®æ£ç¢ºããšæè»æ§ãåŸãããŸããå ããŠãå¹ççã«ããã°ã©ã ãããããžã¿ã«ã»ã·ã¹ãã ã§ããã°ãããŒã¿ã»ã»ããã®åŠçãè¡ãéã«ãæ®ãã®ããã»ããµã»ãµã€ã¯ã«ã«ãã£ãŠä»ã®ã¿ã¹ã¯ãåŠçããããšãå¯èœã§ãã
ããã°ã©ãã³ã°ã«ã€ããŠèæ ®ãã¹ãäºæ
ãªã¢ã«ã¿ã€ã ã»ã·ã¹ãã ã§ã¯ãåŠçé床ãéåžžã«éèŠã§ããSPORTã®ãªãŒããããã¡ãªã³ã°ã䜿çšããããšã§ãããŒã¿ã®å ¥åºåã«ããæéã®ãã¹ã¯ãªããªããŸãããã®ä»£ãããããŒã¿ã®ç®¡çã«ã€ããŠã¯ãéžæãããã¢ãã¬ã¹ã確å®ã«æ°ããããŒã¿ãæã瀺ãããã«ããããšãéèŠã«ãªããŸãã
FIRãã£ã«ã¿ã®äŸïŒã¢ããã°ã»ãã€ã¢ãã° 31-3ãp.15ïŒã§ã¯ãå ¥åã®ãªãŒããããã¡ãæºæ¯ã«ãªããšãSPORTã®åä¿¡å²ã蟌ã¿ãçæãããŸããããã¯ãDSPã3ã€ã®ããŒã¿ã»ã¯ãŒãïŒã¹ããŒã¿ã¹ãå·Šãã£ã³ãã«ã®ããŒã¿ãå³ãã£ã³ãã«ã®ããŒã¿ïŒãåä¿¡ãããšããããšãæå³ããŸãããã®ç°¡åãªã¢ããªã±ãŒã·ã§ã³ã§ã¯ãã·ã³ã°ã«ãã£ã³ãã«ã®ããŒã¿ã䜿çšããŠããŸãããã®ãããrx_buf+1ã®äœçœ®ã«ããããŒã¿ã ããã¢ã«ãŽãªãºã ã§äœ¿çšãããŸãã
å®éã®ãã£ã«ã¿ã»ã¢ããªã±ãŒã·ã§ã³ã§ã¯ããã®äŸã®ã¢ã«ãŽãªãºã ãæ¡åŒµããå¿ èŠããããããããã¯ããŒã¿ã®åŠçããã£ãšè€éã«ãªãã§ãããããšã¯ããããã®äŸã®FIRãã£ã«ã¿ã2ãã£ã³ãã«ã®å®è£ ã«æ¡åŒµãããšãã£ãå Žåãäžæ žãšãªãã¢ã«ãŽãªãºã ã®ã³ãŒãã倿Žããå¿ èŠã¯ãããŸããããã ãããŒã¿ã®åŠçã«é¢é£ããã³ãŒãã¯ããã1ã€ã®ããŒã¿ã»ã¹ããªãŒã ãšãã1ã€ã®ä¿æ°ã®ã»ããã«å¯Ÿå¿ã§ããããä¿®æ£ããå¿ èŠããããŸãã
远å ãããããŒã¿ã»ã¹ããªãŒã ãšä¿æ°ã®ã»ããã®äž¡æ¹ãåŠçããããã«ã¯ããã£ã«ã¿ã®ã³ãŒãã«ãããŠã¡ã¢ãªå ã®2ã€ã®æ°ãããããã¡ã䜿çšããå¿ èŠããããŸããããã§ãã³ã¢ã»ãã£ã«ã¿ïŒäžæ žãšãªããã£ã«ã¿ïŒã®ã«ãŒãã¯ãåŒã³åºããå¯èœãªåå¥ã®é¢æ°ãšããŠåé¢ããããšãã§ããŸãããã®ææ³ã䜿ãããšã«ãããå ¥åãããããŒã¿ã®å€ã«ããããããåãã³ãŒããåå©çšããããšãå¯èœã«ãªããŸãããã®ããã°ã©ãã³ã°ã»ã¹ã¿ã€ã«ãæ¡çšããã°ãå¯èªæ§ã®é«ãã³ãŒããå®çŸã§ãããã¢ã«ãŽãªãºã ãåå©çšã§ãããã³ãŒãã®ãµã€ãºãåæžã§ãããšãã£ãã¡ãªãããåŸãããŸãããã®ãããªã¢ãžã¥ãŒã«æ¹åŒã®ã³ãŒããæ¡çšããªãå Žåã«ã¯ãDSPã®ã¡ã¢ãªç©ºéãæŽã«äœ¿çšããŠããã£ã«ã¿ã®ã«ãŒããç¹°ãè¿ããªããã°ãªããŸããã
SPORTã®åä¿¡å²ã蟌ã¿ã«ãŒãã³ã¯ããã€ã³ã¿ã®èšå®ãšãã£ã«ã¿ã®åŒã³åºãã§æ§æãããŸããä¿®æ£åŸã®ãã£ã«ã¿ã®ã«ãŒãã³ã¯ã以äžã®ããã«ãªããŸãã
Filter: cntr = taps - 1;
mr = 0, mx0 = dm(i2,m1), my0 = pm(i5,m5);
/* clear accumulator, get first data
and coefficient value */
do filt_loop until ce; /* set-up zero-overhead loop */
filt_loop: mr = mr + mx0*my0(ss), mx0 = dm(i2,m1),
my0 = pm(i5,m5); /* MAC and two data fetches */
mr = mr + mx0 * my0 (rnd); /* final multiply, round to 16-bit
result */
if mv sat mr; / * check for overflow*/
rts; /* return */
泚ç®ãã¹ãéèŠãªãã€ã³ãã¯ãã³ã¢ã»ãã£ã«ã¿ã®ã«ãŒãã®ä¿®æ£åæã¯æ¬¡ã®2ã€ã ãã ãšããããšã§ãã1ã€ã¯ãã«ãŒãã³ã®å é ã«ãFilterããšããã©ãã«ã远å ããããšã§ãããã1ã€ã¯ãæ«å°Ÿã«rtsïŒreturn from subroutineïŒãšããåœä»€ã远å ããããšã§ããããã ãã§ããã£ã«ã¿ã®ã³ãŒããç¬ç«åã®ã«ãŒãã³ãããµãã«ãŒãã³ãžãšå€æŽããããšãã§ããŸãããã®çµæããã®ã³ãŒããä»ã®ã«ãŒãã³ããåŒã³åºãããšãå¯èœã«ãªããŸããèšãæããã°ãåäžã®ç®çãæããã«ãŒãã³ã§ã¯ãªããåŒã³åºãïŒåå©çšãå¯èœãªãµãã«ãŒãã³ã«ãªã£ããšããããšã§ãã
ãããŸã§ã§ãã³ã¢ã»ãã£ã«ã¿ã®ã³ãŒãããåŒã³åºããå¯èœãªãµãã«ãŒãã³ã«å€æŽããããšãã§ããŸãããããã«ããã2ã€ã®ãã£ã³ãã«ã®ããŒã¿ãåŠçãããšããèŠä»¶ã«å¯Ÿå¿ã§ããããã«ãªããŸããããªããããã°ã©ãã³ã°äžã®ããã€ãã®åé¡ãã·ã³ãã«ã«ç€ºãããã«ããã®äŸã§ã¯ãå·Šå³ã®ãã£ã³ãã«ã§ã¯åããã£ã«ã¿ä¿æ°ã䜿çšãããšããããšãåæãšããŠããŸãã
æ¬ã·ãªãŒãºã®Part 3ã§ã¯ããã£ã«ã¿ã»ã¢ããªã±ãŒã·ã§ã³åãã®ã¢ã»ã³ããªã»ã³ãŒãã®å šäœã瀺ããŸããããã®ã³ãŒãã®å é éšåã«ã¯ãå¿ èŠãªã¡ã¢ãªã»ãããã¡ããã¹ãŠå®£èšãããŠããŸãããããã§ã¯ããã®ã³ãŒããæ¡åŒµããŠ2ãã£ã³ãã«ã®ããŒã¿ãåŠçã§ããããã«ããæ¹æ³ãèããŸãããã®ããã«ã¯ãæ°ãã«å¿ èŠã«ãªã倿°ãšãããã¡ã宣èšããªããã°ãªããŸãããåä¿¡ããŒã¿ã«ã€ããŠã¯ã以äžã®ããã«ãããã¡ã宣èšããŠããŸããã
.var/dm/circ_filt_data[taps]; /* input data buffer */
2ã€ã®ãããã¡ã«å¯Ÿå¿ããããã«ãäžèšã®å®£èšã以äžã®ããã«æžãæããŸãã
.var/dm/circ_filt1_data[taps]; /* left channel input data buffer */
.var/dm/circ_filt2_data[taps]; /* right channel input data buffer */
å è¿°ããããã«ãäž¡ãã£ã³ãã«ã«ã¯åããã£ã«ã¿ä¿æ°ãé©çšããŸãããã®ãããããŒã¿ã»ãããã¡ã®é·ãã¯çãããªããŸãã
ãã£ã«ã¿ã®ã«ãŒãã«å¯Ÿå¿ãããµãã«ãŒãã³ã§ã¯ãç¹å®ã®ã¢ãã¬ã¹ã«å¯Ÿå¿ããã¬ãžã¹ã¿ã䜿çšããŠç¹å®ã®ããŒã¿ãšä¿æ°ã®å€ã«ã¢ã¯ã»ã¹ããããšãæ³å®ããŠããŸãããã®ãããã¢ãã¬ã¹ã®ã¬ãžã¹ã¿I2ã¯æãå€ããµã³ãã«ãæã瀺ããŠããå¿ èŠããããŸãããŸããã¢ãã¬ã¹I5ã¯ãã£ã«ã¿ã®ã«ãŒãã³ã®åŒã³åºãã«å ç«ã£ãŠé©åãªä¿æ°å€ãæã瀺ããŠããªããã°ãªããŸããã
ãã®äŸã§ã¯ãäž¡ãã£ã³ãã«ã®ãã£ã«ã¿ãåãã¡ã¢ãªã»ãã€ã³ã¿ãå ±æããŸãããã®ããã2ã€ã®ããŒã¿ã»ã¹ããªãŒã ãåºå¥ããããã®ä»çµã¿ãçšæããªããã°ãªããŸãããã€ãŸããããŒã¿ã»ãã€ã³ã¿I2ã«ã¯ã2ã€ã®æ°ããªå€æ°filter1_ptrãfilter2_ptrãå®çŸ©ããå¿ èŠããããŸãã
ã¡ã¢ãªå ã®ãããã®äœçœ®ã¯ãåããŒã¿ã»ã¹ããªãŒã ã«é©åãªã¢ãã¬ã¹ã®å€ãæ ŒçŽããããã«äœ¿çšãããŸããADSP-2181ã®åŸªç°ãããã¡æ©èœã䜿çšããã°ããã£ã«ã¿åŠçãå®è¡ããããã³ã«ããŒã¿ã»ãã€ã³ã¿ãåžžã«ãããã¡å ã§é©åãªäœçœ®ã«ããããã«ããããšãã§ããŸãããã®ãµãã«ãŒãã³ã¯ã2ã€ã®ãããã¡ã«å¯Ÿå¿ããŠããŸãããã®ãããåãã£ã³ãã«ã®åŠçãå®äºããããåãã€ã³ã¿ã®äœçœ®ãä¿åããªããã°ãªããŸããã
ãã€ã³ã¿ãèšå®ããããã«ã¯ãããŒã¿ã»ã¡ã¢ãªå ã®2ã€ã®å€æ°ã次ã®ããã«å®£èšããŸãã
.var/dm filter1_ptr; /* data pointer for left channel data */
.var/dm filter2_ptr; /* data pointer for right channel data */
ãããã®å€æ°ã¯ãåããŒã¿ã»ãããã¡ã®éå§ã¢ãã¬ã¹ã§åæåããå¿ èŠããããŸãïŒä»¥äžåç §ïŒã
.init filter1_ptr: ^filt1_data; /* initialize starting point,
left channel */
.init filter2_ptr: ^filt2_data; /* initialize starting point,
right channel */
DSPçšã®ã¢ã»ã³ãã©ã»ãœãããŠã§ã¢ã¯ãã^ããšããèšå·ããïœã®ã¢ãã¬ã¹ããšããæå³ã§èªèããŸããããã«å¿ããŠãDSPã®ãªã³ã«ã»ãœãããŠã§ã¢ãé©åãªã¢ãã¬ã¹ã®å€ãæžã蟌ã¿ãŸãããã®ããã«ããããšã§ãå®è¡å¯èœãªããã°ã©ã ã®ãã€ã³ã¿å€æ°ããé©åãªã¡ã¢ãªã»ãããã¡ã®éå§ã¢ãã¬ã¹ã§åæåãããŸãã
以äžã®ãªã¹ãã¯ãFIRãã£ã«ã¿ã®å²ã蟌ã¿ã«ãŒãã³ããããã®æ°ããªã¡ã¢ãªé¢é£ã®èŠçŽ ãã©ã®ããã«äœ¿çšããã®ãã瀺ããŠããŸããæ¬ã·ãªãŒãºã®Part 3ã§ã¯ãFilterãšãããµãã«ãŒãã³ã瀺ããŸããããã®ãµãã«ãŒãã³ãä¿®æ£ããããšã§ã2ã€ã®ãã£ã³ãã«ã«å¯ŸããŠåå¥ã«ãã£ã«ã¿åŠçãé©çšã§ããããã«ãªããŸããããã®ã«ãŒãã³ã¯ããã£ã«ã¿ã®èšç®ãçŽæ¥éå§ããããã§ã¯ãããŸããããŸãã¯ãé©åãªããŒã¿ã»ãã€ã³ã¿ãããŒãããå¿ èŠããããŸããæ¬¡ã«ããã£ã«ã¿ã®ã«ãŒãã³ãåŒã³åºãããŸãããã®çµæã¯ãéä¿¡ãå®è¡ããããã«é©åãªäœçœ®ã«é 眮ãããŸãã
/*--------------------FIR Filter--------------------*/
input_samples:
ena sec_reg; /* use shadow register bank */
/* set up for filter 1 */
i2 = dm(filter1_ptr); /* set data pointer for filter 1 */
ax0 = dm(rx_buf + 1); /* read left channel data */
dm(i2,m1) = ax0; /* write new data into delay line,
pointer now pointing to oldest data */
call filter; /* perform the first filter for left
channel data */
dm(tx_buf+1) = mr1; /* write left-channel output data */
dm(filter1_ptr) = i2; /* save updated filter1 data pointer */
/* set up for filter 2 */
i2 = dm(filter2_ptr); /* set data pointer for filter 2 */
ax0 = dm(rx_buf + 2); /* read right channel data */
dm(i2,m1) = ax0; /* write new data into delay line,
pointer now pointing to oldest data */
call filter; /* perform the filter again for the
right channel data */
dm(tx_buf+2) = mr1; /* write right channel output data */
dm(filter2_ptr) = i2; /* save updated filter2 data pointer */
rti; /* return from interrupt */
ããã§ã³ã¢ã»ãã£ã«ã¿ã®ã¢ã«ãŽãªãºã ã§ã¯ãããŒã¿ã®å ¥åºåã®åŠçã¯è¡ãããªããªããŸããããã®ãµãã«ãŒãã³ã§ã¯ãåã«ãã€ã³ã¿å€æ°ã远å ããããå€ãã®ãããã¡ç©ºéã宣èšããŠããã ãã§ããåæ§ã®ä¿®æ£ãè¡ãããšã«ãããïŒã¡ã¢ãªãååã«ååšããéãïŒãã£ã«ã¿åŠçã®å¯Ÿè±¡ãšãããã£ã³ãã«æ°ãæ¡åŒµããããšãã§ããŸãããŸããä¿æ°çšã®ãããã¡ã®ãã€ã³ã¿æ å ±ãå«ã倿°ãèšå®ããã°ã2ã€ã®ãã£ã«ã¿ã«ãããŠç°ãªãä¿æ°ã䜿çšããããšãå¯èœã§ããã©ã¡ãã«ã€ããŠãããã£ã«ã¿ã®ã¢ã«ãŽãªãºã èªäœã¯å€æŽããå¿ èŠã¯ãããŸããããã®ãããªã¢ãžã¥ãŒã«æ¹åŒã®ããã°ã©ãã³ã°ã»ã¹ã¿ã€ã«ãæ¡çšããããšã§ãåŒã³åºããå¯èœãªDSPçšã®é¢æ°ã©ã€ãã©ãªãæ§ç¯ããããšãã§ããŸãããã®ããã«ããã°ãåã ã®ã·ã¹ãã éã®éãã«å¯ŸããŠã¯ãæ°ããªã¢ã«ãŽãªãºã ãéçºããã®ã§ã¯ãªããããŒã¿åŠçã®åé¡ã«éçŽããŠå¯ŸåŠã§ããããã«ãªããŸãããã¡ããããã®ãããªããã°ã©ãã³ã°ã»ã¹ã¿ã€ã«ãæ¡çšãããããšãã£ãŠãã¢ã«ãŽãªãºã ã䜿çšããã¿ã¹ã¯ãããé«éã«å®è¡ã§ããããã«ãªããšã¯éããŸãããããã§ããã·ã¹ãã å ã§ããŒã¿ãã©ã®ããã«äŒéããã®ããšããããšããããæè»ã«èšå®ããããšãã§ããŸãã
ãªã¢ã«ã¿ã€ã ã»ã€ã³ã¿ãŒãã§ãŒã¹ã®åé¡: ãããŸã§ãçµã¿èŸŒã¿ã·ã¹ãã ã«ããããªã¢ã«ã¿ã€ã 察å¿ã®ããã°ã©ãã³ã°ããè¿ éãªå²ã蟌ã¿å¿çãå¹ççãªããŒã¿åŠçãé«éãªããã°ã©ã ã®å®è¡ã«ã©ã®ããã«äŸåããã®ããšããããšã«ã€ããŠæ€èšããŠããŸããããã ãããã»ããµã«ç¶ç¶çã«å ¥åºåãããããŒã¿ã®äŒéæ¹åŒãããªã¢ã«ã¿ã€ã 察å¿ã®çµã¿èŸŒã¿ç°å¢ã§ã·ã¹ãã ãããã«ããŸãæ©èœããã®ããšããããšã«å¯ŸããŠåœ±é¿ãåãŒããŸãã
DSPã«å ¥åºåãããããŒã¿äŒéæ¹åŒãšããŠã¯ããã©ã¬ã«ã§ãã·ãªã¢ã«ã§ãæ§ããŸãããéåžžããã©ã¬ã«ã®ããŒã¿äŒéã§ã¯ãããã»ããµã®ã¢ãŒããã¯ãã£ã®ãã€ãã£ããªããŒã¿ã»ã¯ãŒããšåãå¹ ã䜿çšããŸãããã®å¹ ã¯ãADSP-2100ãã¡ããªã§ã¯16ããããSHARC®ãã¡ããªã§ã¯32ãããã§ãããã©ã¬ã«ã®ããŒã¿äŒéã¯ãããã»ããµã®å€éšã¡ã¢ãªã»ãã¹ãŸãã¯å€éšãã¹ãã»ã€ã³ã¿ãŒãã§ãŒã¹ã»ãã¹ãä»ããŠè¡ãããŸããäžæ¹ãã·ãªã¢ã«ã®ããŒã¿äŒéã§ã¯ãå¿ èŠãªã€ã³ã¿ãŒã³ãã¯ãã®æ°ãããªãå°ãªãæããããŸããã·ãªã¢ã«ã®ããŒã¿äŒéã¯ãADã³ã³ããŒã¿ãDAã³ã³ããŒã¿ãšéä¿¡ãè¡ãå Žåã«ãã䜿çšãããŸãã
ã·ãªã¢ã«ã»ã€ã³ã¿ãŒãã§ãŒã¹: ããŒããŠã§ã¢ã®ã€ã³ã¿ãŒãã§ãŒã¹ãæ±ãããããåŠãã¯ãDSPã·ã¹ãã ãå¹ççã«å®è£ ããäžã§éèŠãªèŠçŽ ã«ãªããŸãããADSP-2181 EZ-Kit Liteãã§ã¯ãã·ãªã¢ã«å¯Ÿå¿ã®ã³ãŒããã¯ïŒCoder-DecoderïŒãAD1847ãã䜿çšããŠããŸãããã®ãããªã³ãŒããã¯ãæ¡çšããã°ãDSPã®ã·ãªã¢ã«ã»ããŒãïŒSPORTïŒãä»ããŠããŒã¿äŒéãè¡ãããšãã§ããŸããããã§èšãã·ãªã¢ã«ã»ããŒãã¯ãPCãªã©ã§äœ¿ãããRS-232ã®ãããªéåæã®ã·ãªã¢ã«ã»ããŒããšã¯ç°ãªããã®ã§ãã5ç·åŒã®åæåŒã€ã³ã¿ãŒãã§ãŒã¹ã§ããããããã»ã¯ããã¯ãåä¿¡ããŒã¿ãéä¿¡ããŒã¿ããã¬ãŒã åæä¿¡å·ãäŒéããŸããã·ãªã¢ã«ã»ã€ã³ã¿ãŒãã§ãŒã¹ã®äž»ãªé·æãšããŠã¯ããã³æ°ãå°ãªããããŒããŠã§ã¢ã®æ¥ç¶ã容æã§ããããšãæããããŸããAD1847ã¯ãDSPãšã®ã€ã³ã¿ãŒãã§ãŒã¹ãšããŠ4ã€ã®ä¿¡å·ãã䜿çšããŸãããã·ãªã¢ã«ã»ã¯ããã¯ãåä¿¡ããŒã¿ãéä¿¡ããŒã¿ãåä¿¡ãã¬ãŒã åæä¿¡å·ã®4ã€ã§ããã·ãªã¢ã«ã®ããŒã¿ã»ã¹ããªãŒã ã«ã¯ãTDMïŒTime Division MultiplexingïŒæåå²å€éåïŒãé©çšãããŠããŸããã€ãŸããåãç©çåç·ã«ãã£ãŠè€æ°çš®ã®æ å ±ãé çªã«äŒéãããšããããšã§ããEZ-Kit LiteãåããAD1847ã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯ãã·ãªã¢ã«ã»ã©ã€ã³ã䜿çšããããšã§ãã³ãŒããã¯ã®å¶åŸ¡æ å ±ïŒã¹ããŒã¿ã¹æ å ±ãšå ±ã«å·Šå³ã®ãã£ã³ãã«ã®é³å£°æ å ±ãäŒéããŸãã
å è¿°ããããã«ãããã»ããµã¯ããããããŒã¿ãåŠçããããã®æ§ã ãªæ¹æ³ãåããŠããŸããåä¿¡ããŒã¿ãšéä¿¡ããŒã¿ã®ãã¡ããããããããã¯åäžã¯ãŒããŸãã¯1ãããã¯ã®ã¯ãŒãã«å¯ŸããŠã¯ãã·ãªã¢ã«ã»ããŒãã®ããŒããŠã§ã¢ã«ãã£ãŠãSPORTå²ã蟌ã¿ãèªåçã«çºçããŸãïŒå³2ïŒã

ãã©ã¬ã«ã»ã€ã³ã¿ãŒãã§ãŒã¹: ã·ãªã¢ã«ã»ã€ã³ã¿ãŒãã§ãŒã¹ã§ã¯ããããã»ã¯ããã¯ãDSPã®ããã»ããµãšåãé床ã§ããå Žåãé ç·ã®ç°¡äŸ¿ããšåŒãæãã«ããŒã¿äŒéé床ãç ç²ã«ãªããŸããã€ãŸããDSPã®ããã»ããµã®éåºŠã®æ°åã®äžçšåºŠã§ããŒã¿ã»ã¯ãŒãã転éããããšã«ãªããŸãããããã£ãŠãã·ã¹ãã æ§èœãåŸãããã«ãããé«ãããŒã¿ã»ã¬ãŒããå¿ èŠãªå Žåã«ã¯ããã©ã¬ã«ã»ã€ã³ã¿ãŒãã§ãŒã¹ã䜿çšãããšããã§ãããããã©ã¬ã«ã»ã€ã³ã¿ãŒãã§ãŒã¹ã®å ŽåãDSPã¯å€éšããŒã¿ã»ãã¹ãšã¢ãã¬ã¹ã»ãã¹ã䜿çšããããªãã§ã©ã«ã»ããã€ã¹ã«å¯ŸããŠããŒã¿ãèªã¿æžãããŸããADSP-2181ã®å Žåãåãã¹ã¯æå€§16ãããã®ãã©ã¬ã«ã»ããŒã¿ã«å¯Ÿå¿ã§ããŸãã
ãã©ã¬ã«ã»ã€ã³ã¿ãŒãã§ãŒã¹ã§ã¯ãã·ãªã¢ã«ã»ã€ã³ã¿ãŒãã§ãŒã¹ãããé«ãããŒã¿äŒéé床ãå®çŸããããšãå¯èœã§ããDSPã§ã¯ãããã»ããµã»ãµã€ã¯ã«ããšã«å€éšã«ã¢ã¯ã»ã¹ããããšãã§ããŸããããã®ããã«ã¯ãé«éãªSRAMããããªã©ãDSPã«è¿œåŸã§ããéåžžã«é«éãªãã©ã¬ã«å¯Ÿå¿ã®ããªãã§ã©ã«ãå¿ èŠã«ãªããŸããä»ã®ãšã³ãã£ãã£ãšã®éã®ãã©ã¬ã«ã»ããŒã¿äŒéã¯ãéåžžã¯ããã»ããµã»ãµã€ã¯ã«ãããçãæéã§å®çŸå¯èœã§ãã
ã·ãªã¢ã«ã»ã€ã³ã¿ãŒãã§ãŒã¹ã䜿çšããå Žåãšãã©ã¬ã«ã»ã€ã³ã¿ãŒãã§ãŒã¹ã䜿çšããå Žåãšã§ã¯ãå²ã蟌ã¿åŠçã«éãããããŸããDSPã®ããã»ããµã®å€éšããŒã¿ã»ãã¹ã¯ãããããçš®é¡ã®ããŒã¿ãæ±ããæ±çšã®ãšã³ãã£ãã£ã§ãããã®ãããå²ã蟌ã¿ãçºçããããå¶åŸ¡ãè¡ã£ããããããã®å°çšã®ä¿¡å·ç·ã¯åããŠããŸããããDSPã®ä»ã®ãªãœãŒã¹ã¯å©çšå¯èœã§ããäŸãã°ãADSP-2181ã§ã¯ãIOã¡ã¢ãªã®éžæçšã®ãã®ãªã©ãå€éšããŒããŠã§ã¢çšã®ããã€ãã®å²ã蟌ã¿ã©ã€ã³ãå©çšã§ããããã«ãªã£ãŠããŸãããããã䜿ãã°ãADã³ã³ããŒã¿ãã³ãŒããã¯ãªã©ã®å€éšããã€ã¹ããããªã¬ããããšãå¯èœã§ãããã©ã¬ã«ã»ããã€ã¹ãšADSP-2181ã®ã€ã³ã¿ãŒãã§ãŒã¹ã®äŸãå³3ã«ç€ºããŸããã

ãã©ã¬ã«ã»ã€ã³ã¿ãŒãã§ãŒã¹ã䜿çšããå Žåãå²ã蟌ã¿ã«å¿çããéã«ã¯ããã»ããµãé©åãªãœãŒã¹ãèªã¿åºããŸãããããŠéåžžã¯ã以äžã«ç€ºãã®ãšåæ§ã®åœä»€ãå®è¡ããããšã«ãã£ãŠãããŒã¿ãã¡ã¢ãªã«èªã¿èŸŒã¿ãŸãã
irq2_svc: ax0 = IO(ad_converter); dm(i2,m1) = ax0; rti;
ãã®ã³ãŒãã«ãããŠãad_converterã¯IO空éã§ãããããå®çŸ©ãããã¢ãã¬ã¹ã®ããšãæå³ããŸãã
ãŸãšã
æ¬çš¿ã§ã¯ãDSPãããŒã¹ãšãããªã¢ã«ã¿ã€ã ã»ã·ã¹ãã ã§ãããŒã¿ã®å ¥åºåïŒIOïŒããã®ä»ã®ã€ãã³ããåŠçããéã«çŽé¢ããããã°ã©ãã³ã°äžã®æžå¿µäºé ã«ã€ããŠè©³ãã説æããŸãããå ·äœçã«ã¯ããªã¢ã«ã¿ã€ã ã®ããŒã¿ïŒãµã³ãã«ãšãã¬ãŒã ïŒãšããèšèã®æå³ãå²ã蟌ã¿ãšå²ã蟌ã¿åŠçãèªååãããIOãåŒã³åºããå¯èœãªãµãã«ãŒãã³ãéçºããããã®ã«ãŒãã³ã®äžè¬åãªã©ã«ã€ããŠè§£èª¬ããŸãããåãããã¯ã«ã€ããŠãå®éã«ã¯ããå€ãã®äºæã«ã€ããŠæ€èšããå¿ èŠããããŸãã詳现ã«ã€ããŠã¯ãçš¿æ«ã«ç€ºããåèè³æãã芧ãã ãããä»åŸãæ¬ã·ãªãŒãºã§ã¯æ¬çš¿ã§ç€ºããã¢ããªã±ãŒã·ã§ã³ã«åºã¥ããŠè§£èª¬ãé²ããäºå®ã§ããæ¬¡åã¯ããµã³ãã«ã»ããã°ã©ã ã«æŽã«æ©èœã远å ããŸãããŸãããœãããŠã§ã¢ã®æ€èšŒæ¹æ³ïŒãããã°ïŒã«ã€ããŠèª¬æããŸãã
åèè³æ
ADSP-2100 Family Assembler Tools & Simulator Manual ïŒADSP-2100ãã¡ããªã®ã¢ã»ã³ãã©ã»ããŒã«ãšã·ãã¥ã¬ãŒã¿ã®ããã¥ã¢ã«ã詳现ã«ã€ããŠã¯ãã¢ããã°ã»ããã€ã»ãºã®è²©å£²ä»£çåºã«ãåãåãããã ããïŒ
ADSP-2100 Family User's ManualïŒADSP-2100ãã¡ããªã®ãŠãŒã¶ã»ããã¥ã¢ã«ãã¢ããã°ã»ããã€ã»ãºãç¡æïŒ
åœç€Ÿã®ãŠã§ããµã€ãã§ã¯ãå€ãã®æçšãªåºçç©ã玹ä»ããŠããŸãã詳现ã«ã€ããŠã¯ã補åããã¥ã¡ã³ãã®äžã«ç€ºããèšè𿝿Žã®ããŒãžãã芧ãã ããã
䜵ããŠãæ¬ã·ãªãŒãºã®Part 1ãPart 2ãPart 3ãã芧ãã ããã