¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
LEFT BIT=16 : CHANNEL=1 22050 44100 7424 0.00004535147392290250 1002 905 604 21 -728 -1427 -1854 -1888 -1518 °Ê²¼Î¬
¤Á¤ç¤í¤¤¤¸¤ã¤ó¡£Í£°ì¤ÎÌäÂê¤Ï Å۵¥Ç¡¼¥¿¤¬¡¢¸µ¥Ç¡¼¥¿¤Ï¤¤¤ï¤æ¤ëshort·¿¤Ç¡Ö-32768¡Á̵²»(0)¡Á32767¡×¤Ç ɽ¸½¤µ¤ì¤Æ¤¤¤ë¤Î¤ËÂФ·¡¢ 8bit¤ÇÊÒ¦¤Ë¤·¤«¥¹¥Ô¡¼¥«¡¼¤ò¶îư¤Ç¤¤Ê¤¤¥¢¥ó¥×¤Ç¤Ï¡Ö0¡Á̵²»(128)¡Á255¡× ¤Çɽ¸½¤¹¤ëɬÍפ¬¤¢¤ë¤³¤È¤Ç¤¹¡£ ¤½¤ó¤Ê¥Ä¡¼¥ë¤¬¤¢¤ë¤Î¤«¤â¤·¤ì¤Þ¤»¤ó¤·½ñ¤¯¤«¤âÃΤì¤Þ¤»¤ó¤¬¡¢¤³¤³¤Ç¤Ï¼ê¤Ç(^^;) /****** LEFT BIT=16 : CHANNEL=1 22050 44100 7424 0.00004535147392290250 *****/ #define Scale (40000/128) #define Offset (128) long soundCount =7424; unsigned char sound[] = { 1002/Scale +Offset, 905/Scale +Offset, 604/Scale +Offset, 21/Scale +Offset, -728/Scale +Offset, °Ê²¼Î¬}; ¤È¤Ç¤âC¥½¡¼¥¹¤Î·Á¤Ë½ñ¤´¹¤¨¤Æ¤·¤Þ¤¤¤Þ¤¹(awk¤«sed¤«perl¤¬»È¤¨¤ì¤Ð´Êñ¤Ç¤¹)¡£Scale¤Ï ¥Ç¡¼¥¿¤ÎÃæ¤ÇÀäÂÐÃͺÇÂç¤Î¤â¤Î¤Ç100¡Á110°Ì¿¶¤ë¤è¤¦¤Ë·è¤á¤Þ¤¹¡£(127¤á¤¤¤Ã¤Ñ¤¤¿¶¤é¤»¤ë¤È ľÀþÀ¤¬°¤¯ÏĤߤ½¤¦¤Êµ¤¤¬¤·¤Þ¤¹)¤³¤Î¥Ç¡¼¥¿¤Ç¤Ï-31000¡Á26000ÄøÅ٤Ǥ·¤¿¤Î¤Ç¡¢ ŬÅö¤Ë40000¤Ç¿¶¤êÀÚ¤ë¤è¤¦¤Ë¤·¤Æ¤ß¤Þ¤·¤¿¡£ ¤¤¤è¤¤¤è22kB/sec¤Î¥Ç¡¼¥¿¤¬¤Ç¤¤Þ¤·¤¿¡£½©·î¤µ¤ó¤Î3067F/3068F/3069F¥Ü¡¼¥É¤ÎÍͤËRAM¤ËŸ³« ¤Ç¤¤ëµ¡¼ï¤Ç¤Ï¡¢Ã±ÆÈ¤Ç¥³¥ó¥Ñ¥¤¥ëŽ¥¥ê¥ó¥¯¤·¤ÆRAM¾å¤Ë(¸å¤Î¥×¥ì¡¼¥ä¥ë¡¼¥Á¥ó¤ÈÅö ¤¿¤é¤Ê¤¤¥¢¥É¥ì¥¹¤Ë)ÇÛÃÖ¤·¤Æ¤ª¤¤Þ¤¹¡£¤µ¤é¤ËRAM¤Ë;͵¤Î¤¢¤ëÊý¤Ï¡¢ À¸¤Îshort·¿¤Î¤Þ¤ÞH8¤ËŸ³«¤·¡¢8bit·¿¤Ø¤ÎÊÑ´¹¤âH8¤Ç¤ä¤ë¡¢¤È¤¤¤¦¼ê¤â¤¢¤ê¤Þ¤¹¡£ ¡ÖÊÑ´¹¤·¤Ê¤¬¤éºÆÀ¸¡×¤Ï¡Ä¥®¥ê¥®¥ê´Ö¤Ë¹ç¤¦¤«¤Ê¤¡¡Ä ¥Ù¥¢¥Õ¥Ã¥È3048F/3052F¤ÊÊý¤ÇRAM¤ËŸ³«¤Ï¤¤Ó¤·¤¤¡Ä¤È¸À¤¦Êý¤Ï¥Ç¥Ð¥Ã¥¬¥â¥Ë¥¿¤È¥ê¥ó¥¯¤·¤ÆROM¤Ë ¾Æ¤¤¤Æ¤ª¤±¡¢¤È¤¤¤¦¤³¤È¤Ç¤¹¤Í¡£¥×¥ì¡¼¥ä¥ë¡¼¥Á¥ó¤ÏRAM¤Çºî¤Ã¤Æ¤¤¤¯¤è¤¦¤ª¤¹¤¹¤á¤·¤Þ¤¹¡£
/****** LEFT BIT=16 : CHANNEL=1 22050 44100 7424 0.00004535147392290250 *****/ #define Scale (40000/128) #define Offset (128) long soundCount =7424; unsigned char sound[] = { 1002/Scale +Offset, 905/Scale +Offset, 604/Scale +Offset, 21/Scale +Offset, -728/Scale +Offset, °Ê²¼Î¬};
³ä¹þ¤ß¤Ê¤ó¤â¤Ê¤·ÈÇ #define VECTOR ((void **)0xfffd30) speechNonIntr() { uchar *cp; long count; cp=sound; DA.CR.BIT.DAOE0=1; /*Enable DA CH0A */ itu1Init(0) ; ITU.TSTR.BIT.STR1=1; /*** Counter Starts */ for(count=0;count ¤È¤Þ¤¡¤Ê¤ó¤È¤âÌ£µ¤¤Ê¤¤(^^;)¡£¤Á¤ç¤Ã¤È¤¤É¤Ã¤Æ ITU¤Ï³ä¹þ¤ßÈÇ speechITUIntr() { uchar *cp; long count; cp=sound; DA.CR.BIT.DAOE0=1; /*Enable DA CH0A */ itu1Init(1) ; /*** 45usec¤´¤È¤Ëitu¤Ç³ä¤ê¹þ¤ó¤Ç¡¢¥Ï¥ó¥É¥é¥ë¡¼¥Á¥ó¤Ç1¥Ð¥¤¥ÈžÁ÷¡Ä ¤Î¤Ä¤â¤ê¤Ç¤·¤¿¤¬¡¢45usec¤´¤È¤Î³ä¤ê¹þ¤ß¤Ã¤ÆÆüΩ¥Ç¥Ð¥Ã¥¬¾å¤Ç¤Ï ¥®¥ê¥®¥ê¤¤Ó¤·¤¤¤ó¤Ç¤·¤¿¤Ã¤±¡Ä¤È¤¤¤¦¤³¤È¤Ç½ñ¤¤¤Æ¤¤¤Þ¤»¤ó(^^;)¡£**/ ¤È¤¤¤¦¤³¤È¤ÇDMACÍøÍÑÈÇ #define VECTOR ((void **)0xfffd30) speechDMAC() { uchar *cp; long count; cp=sound; DA.CR.BIT.DAOE0=1; /*Enable DA CH0A */ dmac0AInit(); itu1Init(1) ; ITU.TSTR.BIT.STR1=1; /*** Counter Starts */ while(DMAC0A.DTCR.BIT.DTE) ; /* She seems to be busy*/ DMAC0A.DTCR.BIT.DTE=1; /*startDMA*/ set_ccr(0); for(;;)sleep(); trapa(3); /*wont come*/ } dmac0AInit() { VECTOR[44]=(void *)dend0A; /*Only when completed*/ DMAC0A.MAR = (void *)sound; /*From*/ DMAC0A.IOAR = (uchar )&(DA.DR0); /*To*/ DMAC0A.ETCR = (ushort )soundCount; /*Counts*/ DMAC0A.DTCR.BIT.DTE=0; /*to read*/ DMAC0A.DTCR.BYTE=0x01; /*1byte at each ITU1AMatch*/ DMAC0A.DTCR.BIT.DTIE=1; /*IntrEnable*/ } itu1Init(int intrSW) { VECTOR[28]=(void *)itu1A; ITU1.TCR.BYTE = 0x20|0x00; /* 0:20MHz, 1:10MHz 2:5MHz 3:2.5Mhz */ ITU.TSTR.BIT.STR1=0; /*** Counter Stops */ ITU.TISRA.BIT.IMFA1 = 0; ITU.TISRA.BIT.IMIEA1 =intrSW; ITU1.GRA = 20000/22-1; /* 908**22kHz @20MHz*/ } void itu1A() { ITU.TISRA.BIT.IMFA1 = 0; return; } void dend0A { trapa(3); } DMAC0A¤òI/O¥â¡¼¥É¤Ç»È¤Ã¤Æ¤¤¤Þ¤¹¡£ITU1A¤Î¥³¥ó¥Ú¥¢¥Þ¥Ã¥Á¤¬È¯À¸¤¹¤ë¤¿¤Ó¤Ë £±¥Ð¥¤¥È¤ò(¥½¥Õ¥È¤ÎÃΤé¤Ê¤¤´Ö¤Ë)I/O¶õ´Ö¤Ë½ñ¤¹þ¤ó¤Ç¤¯¤ì¤Þ¤¹¡£¥½¡¼¥¹¥Ý¥¤¥ó¥¿¤ÏžÁ÷¤´¤È¤Ë¼¡¤Ë ¿Ê¤ß¤Þ¤¹¤¬¡¢¥Ç¥¹¥Æ¥Í¡¼¥·¥ç¥ó¥Ý¥¤¥ó¥¿¤Ïư¤¤Þ¤»¤ó¡£¥«¥¦¥ó¥¿¤¬16bit¤Ç¤¢¤ë¤³¤È ¤«¤é¤ï¤«¤ë¤è¤¦¤Ë¡¢64KB¤òͤ¨¤ëžÁ÷¤Ç¤Ï¤¤¤Ã¤¿¤ócpu¤¬²ðºß¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£ ¤Á¤Ê¤ß¤ËÁ°¡¹¤«¤é¡ÄputsRS232C()¤òDMA²½¤·¤¿¤¤¤È»×¤Ã¤Æ¤Ï¤¤¤ë¤Î¤Ç¤¹¤¬¡Ä sprintf(charBuf,"Hello World!"); putsRS232C(charBuf); return; charBuf[]¤ò¥í¡¼¥«¥ë¤Ë¼è¤ë¤È¡¢return¤Ç³«Êü¤µ¤ì¤Æ¤·¤Þ¤¤¡¢DMA¤ò¼õ¤±¤ëÁ°¤Ë Ç˲õ¤µ¤ì¤ë²ÄǽÀ¤¬¤¢¤ê¤Þ¤¹¡£¤Þ¤¿¡¢¥°¥í¡¼¥Ð¥ë¤Ë¼è¤ë¤È¡¢¤³¤³¤Îsprintf()¤¬DMAÂÔ¤Á¤Î¥Ç¡¼¥¿ ¤Ë¾å½ñ¤¤¹¤ë´í¸±À¤¬¤¢¤ê¤Þ¤¹¡£·ë¶É¡¢¥í¡¼¥«¥ë¤Ësprintf()¤·¤Æ¡¢¥°¥í¡¼¥Ð¥ë¤ÊÁ÷¿®¥Ð¥Ã¥Õ¥¡¤Ë ¤è¤¤¤·¤ç¤è¤¤¤·¤çžÁ÷¤¹¤ëɬÍפ¬¤¢¤ê¤½¤¦¤Ç¤¹¤¬¡¢¤á¤ó¤É¤¯¤µ¤¯¤Æ¤Û¤Ã¤Æ¤¢¤ê¤Þ¤¹(^^;)¡£
sprintf(charBuf,"Hello World!"); putsRS232C(charBuf); return;
dmac0AInit()¡¡¡Ä3052F(25MHz)+wavH·Á¼°ÂбþÈÇ extern unsigned char SndHere001[]; dmac0AInit(int sw) { if(sw) { DA.DACR.BIT.DAOE0=1; DA.DASTCR.BIT.DASTE = 1; /* VECTOR[44]=(void *)dend0A; */ DMAC0A.MAR = (void *)(SndHere001+16); DMAC0A.ETCR = *(short *)(SndHere001+14); switch(SndHere001[9]) { case 0x16 : ITU1.GRA = 566; break; /* 25MHz/44.1k=566.89*/ case 0x14 : ITU1.GRA =1133; break; /* 22050Hz*/ case 0x12 : ITU1.GRA =2262; break; /* 11025Hz*/ case 0x10 : ITU1.GRA =4535; break; /*5.5kHz?*/ } DMAC0A.IOAR = (uchar )&(DA.DADR0); DMAC0A.DTCR.BIT.DTE=0; /*to read*/ DMAC0A.DTCR.BYTE=0x01; /*ITU1A*/ DMAC0A.DTCR.BIT.DTIE=0; /*IntrEnable*/ DMAC0A.DTCR.BIT.RPE=0; /*Repeat*/ DMAC0A.DTCR.BIT.DTE=1; /*startDMA*/ } else { while(DMAC0A.DTCR.BIT.DTE) ; DA.DACR.BIT.DAOE0=0; DA.DASTCR.BIT.DASTE = 0; DA.DADR0=0; ITU.TSTR.BIT.STR1=0; /*** Counter Stop! */ ITU1.TIER.BIT.IMIEA =0; } }