iis.c
上传用户:zbk8730
上传日期:2017-08-10
资源大小:12168k
文件大小:16k
源码类别:

uCOS

开发平台:

C/C++

  1. /*============================================================
  2. File Name: Iis.c
  3. Description: S3C2440A IIS controller Function Test
  4.     Version: 0.2 
  5.     History:
  6.              0.0: 2002. 03. 06, Programming Start by SOP.
  7.              0.1: 2004. 02. 04, Modified by Y. H. Lee.
  8.   - IIS Master Tx: Play Sample Wave File.
  9.   - IIS Master Rx: Record Sound using MIC and Play it.
  10.   - IIS maser clock selection (PCLK or MPLLin) is supported.
  11.       0.2: 2004. 04. 26, Modified by Y. H. Lee.
  12.          - Recording Sound via Line-In is available in the SMDK2440 base board (Rev 0.19).
  13.             
  14. =============================================================*/
  15. #include "2440addr.h"
  16. #include "2440lib.h"
  17. #include "def.h"
  18. #include "iis.h"
  19. #define REC_LEN_IIS 0xfffff*2
  20. #define PLAY_IIS    0
  21. #define RECORD_MICIn  1
  22. #define RECORD_LineIn 2 
  23.  
  24. #define L3C (1<<4)   //GPB4 = L3CLOCK
  25. #define L3D (1<<3)   //GPB3 = L3DATA
  26. #define L3M (1<<2)   //GPB2 = L3MODE
  27. char mute = 1;
  28. char which_Buf = 1;
  29. char Rec_Done = 0;
  30. char IIS_MasterClk_Sel = 0; 
  31. unsigned char  *Buf,*_temp;
  32. unsigned char *rec_buf = (unsigned char *)0x31000000;
  33. unsigned int size, fs; 
  34. unsigned int save_B, save_E, save_PB, save_PE;
  35. extern U32 Hclk, Pclk;
  36. float IIS_Codec_CLK;
  37. void IIS_Port_Init(void);
  38. void IIS_Port_Return(void);
  39. void Download_Wave_File(void);
  40. void Select_IIS_Master_CLK(void);
  41. void IIS_RecSound_DMA1( int mode, U32 rec_size);
  42. void IIS_PlayWave_DMA2(unsigned char *start_addr, U32 play_size);
  43. void _WrL3Addr(U8 data);
  44. void _WrL3Data(U8 data,int halt);
  45. void __irq RxInt(void);
  46. void __irq Muting(void);
  47. void __irq DMA2_Done(void);
  48. void __irq DMA1_Rec_Done(void);
  49. void * func_iis_test[][2]=
  50. {
  51. //IIS Function Test Item
  52. (void *)Play_Wave_IIS, "Play Wave File. ",
  53.      (void *)RecordSound_ViaMICIn_IIS, "Record Sound via MIC-In and Play it. ",
  54.      (void *)RecordSound_ViaLineIn_IIS,  "Record Sound via Line-In and Play it. ",
  55.      0,0
  56. };
  57. void IIS_Test(void)
  58. {
  59. int i;
  60. while(1)
  61. {
  62. i=0;
  63. Uart_Printf("nn================== IIS Function Test =====================nn");
  64. while(1)
  65. {   //display menu
  66. Uart_Printf("%2d:%s",i,func_iis_test[i][1]);
  67. i++;
  68. if((int)(func_iis_test[i][0])==0)
  69. {
  70. Uart_Printf("n");
  71. break;
  72. }
  73. if((i%2)==0)
  74. Uart_Printf("n");
  75. }
  76. Uart_Printf("n==========================================================n");
  77. Uart_Printf("nPress Enter key to exit : ");
  78. i = Uart_GetIntNum();
  79. if(i==-1) break; // return.
  80. if(i>=0 && (i<((sizeof(func_iis_test)-1)/8)) ) // select and execute...
  81. ( (void (*)(void)) (func_iis_test[i][0]) )();
  82. }
  83. }
  84. //Play Wave File
  85. void Play_Wave_IIS(void)
  86. {
  87. Uart_Printf("nPlay Wave File.n");
  88.      IIS_Port_Init();
  89.      Select_IIS_Master_CLK();
  90. Download_Wave_File();
  91. Init1341(PLAY_IIS);
  92. IIS_PlayWave_DMA2(Buf+0x30, size);
  93. IIS_Port_Return();
  94.     
  95.      mute = 1;
  96. }
  97. //Record Sound via MIC-In
  98. void RecordSound_ViaMICIn_IIS(void)
  99. {
  100. Uart_Printf("nRecord Sound via MIC-In.n");
  101.      IIS_Port_Init(); 
  102. Select_IIS_Master_CLK();
  103. Init1341(RECORD_MICIn);
  104. IIS_RecSound_DMA1(RECORD_MICIn, REC_LEN_IIS);
  105. Init1341(PLAY_IIS);
  106. IIS_PlayWave_DMA2(rec_buf, REC_LEN_IIS);
  107. IIS_Port_Return();
  108. mute = 1;
  109. }
  110. //Record Sound via Line-In 
  111. void RecordSound_ViaLineIn_IIS(void)
  112. {
  113. Uart_Printf("nRecord Sound via Line-In.n");
  114.      IIS_Port_Init(); 
  115. Select_IIS_Master_CLK();
  116. Init1341(RECORD_LineIn);
  117. IIS_RecSound_DMA1(RECORD_LineIn, REC_LEN_IIS);
  118. Init1341(PLAY_IIS);
  119. IIS_PlayWave_DMA2(rec_buf, REC_LEN_IIS);
  120. IIS_Port_Return();
  121. mute = 1;
  122. }
  123. /* Sub-Routines */ 
  124. //Setting Port related to IIS  
  125. void IIS_Port_Init(void)
  126. {
  127. save_B  = rGPBCON;  
  128.      save_E  = rGPECON;  
  129.      save_PB = rGPBUP;
  130.      save_PE = rGPEUP;
  131.     
  132. //----------------------------------------------------------
  133. //   PORT B GROUP
  134. //Ports  :   GPB4    GPB3   GPB2  
  135. //Signal :  L3CLOCK L3DATA L3MODE
  136. //Setting:   OUTPUT OUTPUT OUTPUT 
  137. //      [9:8]   [7:6}  [5:4]
  138. //Binary :     01  ,   01    01 
  139. //----------------------------------------------------------    
  140.      rGPBUP  = rGPBUP  & ~(0x7<<2) | (0x7<<2);   //The pull up function is disabled GPB[4:2] 1 1100    
  141.      rGPBCON = rGPBCON & ~(0x3f<<4) | (0x15<<4); //GPB[4:2]=Output(L3CLOCK):Output(L3DATA):Output(L3MODE)
  142. //----------------------------------------------------------
  143. //   PORT E GROUP
  144. //Ports  :  GPE4    GPE3   GPE2  GPE1    GPE0 
  145. //Signal : I2SSDO  I2SSDI CDCLK I2SSCLK I2SLRCK 
  146. //Binary :   10  ,   10     10 ,  10 10    
  147. //----------------------------------------------------------
  148.      rGPEUP  = rGPEUP  & ~(0x1f)  | 0x1f;    //The pull up function is disabled GPE[4:0] 1 1111
  149.      rGPECON = rGPECON & ~(0x3ff) | 0x2aa;   //GPE[4:0]=I2SSDO:I2SSDI:CDCLK:I2SSCLK:I2SLRCK
  150.      rGPFUP   = ((rGPFUP   & ~(1<<0)) | (1<<0));     //GPF0
  151.      rGPFCON  = ((rGPFCON  & ~(3<<0)) | (1<<1));     //GPF0=EINT0    
  152.      rEXTINT0 = ((rEXTINT0 & ~(7<<0)) | (2<<0));     //EINT0=falling edge triggered  
  153. }
  154. void IIS_Port_Return(void)
  155. {
  156. rGPBCON = save_B;
  157.      rGPECON = save_E;
  158.      rGPBUP  = save_PB;
  159.      rGPEUP  = save_PE;
  160. }
  161. void Download_Wave_File(void)
  162. {
  163. unsigned int temp;
  164.      pISR_UART1 = (unsigned)RxInt;
  165.      rINTMSK    = ~(BIT_UART1);
  166.      rINTSUBMSK = ~(BIT_SUB_RXD1);
  167.      //Non-cacheable area = 0x31000000 ~ 0x33feffff
  168.      Buf   = (unsigned char *)0x31000000;
  169.      _temp = Buf;
  170.        Uart_Printf("nnDownload the PCM(no ADPCM) file by DNW serial port(With header)!!n");
  171.        Uart_Printf("Download Start Address: 0x%xn", Buf);
  172.        while(((unsigned int)_temp - (unsigned int)Buf) < 4)
  173.        {
  174.       Led_Display(0);
  175.        Delay(1500);
  176.        Led_Display(15);
  177.     Delay(1500);
  178.        }
  179.        
  180.        size = *(Buf) | *(Buf + 1)<<8 | *(Buf + 2)<<16 | *(Buf + 3)<<24;
  181.        Uart_Printf("nNow, Downloading... [ File Size : %7d       0]", size);
  182.       
  183.      while(((unsigned int)_temp - (unsigned int)Buf) < size) 
  184. Uart_Printf("bbbbbbbb%7d ",(unsigned int)_temp - (unsigned int)Buf);
  185.      Uart_Printf("bbbbbbbb%7d ]n",(unsigned int)_temp - (unsigned int)Buf);
  186. rINTSUBMSK |= BIT_SUB_RXD1;
  187.    
  188.        size = *(Buf + 0x2c) | *(Buf + 0x2d)<<8 | *(Buf + 0x2e)<<16 | *(Buf + 0x2f)<<24;
  189.        size = (size>>1)<<1;
  190.        fs   = *(Buf + 0x1c) | *(Buf + 0x1d)<<8 | *(Buf + 0x1e)<<16 | *(Buf + 0x1f)<<24;
  191.        Uart_Printf("Sample PCM Data Size = %dn", size);
  192.        Uart_Printf("Sampling Frequency = %d Hzn", fs);
  193. }
  194. void IIS_RecSound_DMA1(int mode, U32 rec_size)
  195. {
  196. pISR_DMA1  = (unsigned)DMA1_Rec_Done;
  197. if (IIS_MasterClk_Sel == 0) //IIS Master Clock Source = PCLK
  198.        {
  199.        rIISCON = (1<<4) + (1<<3) + (1<<1);    
  200.        rIISMOD = (0<<9)+(0<<8) + (1<<6) + (0<<5) + (0<<4) + (1<<3) + (1<<2) + (1<<0);
  201.      rIISFCON = (1<<14) + (1<<12);   
  202.     
  203. Uart_Printf("nIISLRCK = %d Hz", (int) IIS_Codec_CLK/384);
  204.        }
  205.        else    //IIS Master Clock Source = MPLLin
  206.        {
  207. rIISCON = (1<<4) + (1<<3) + (1<<1);    
  208.        rIISMOD = (1<<9)+(0<<8) + (1<<6) + (0<<5) + (0<<4) + (1<<3) + (1<<2) + (1<<0);
  209.      rIISFCON = (1<<14) + (1<<12);   
  210.     
  211. Uart_Printf("nIISLRCK = %d Hz", (int) IIS_Codec_CLK/384);
  212.        }
  213.   rINTMSK = ~(BIT_DMA1);
  214. //--- DMA1 Initialize
  215.        rDISRCC1 = (1<<1) + (1<<0);   
  216.        rDISRC1  = ((U32)IISFIFO);    
  217.        rDIDSTC1 = (0<<1) + (0<<0);     
  218.        rDIDST1  = (int)rec_buf;                            
  219.        rDCON1   = (1<<31)+(0<<30)+(1<<29)+(0<<28)+(0<<27)+(2<<24)+(1<<23)+(1<<22)+(1<<20)+(rec_size/2);
  220.        rDMASKTRIG1 = (0<<2) + (1<<1) + 0;    //No-stop, DMA1 channel on, No-sw trigger
  221. if(mode ==1)
  222. Uart_Printf("nnAre you ready to record sound via MIC-In on SMDK2440?");
  223. if(mode ==2)
  224. Uart_Printf("nnAre you ready to record sound via Line-In on SMDK2440?");
  225.        Uart_Printf("nPress any key to start record!n");
  226.        Uart_Getch();
  227.        Uart_Printf("Recording...n");
  228.    
  229.     //IIS Rx start
  230.        rIISCON |= 0x1;
  231.    
  232.        while(!Rec_Done)
  233. {
  234.          Uart_Printf(".");
  235.           Delay(2000);
  236.        }
  237.    
  238.        Rec_Done = 0;
  239. //IIS Rx stop
  240.        Delay(10); //For end of H/W Rx
  241.        rIISCON     = 0x0; //IIS stop
  242.        rDMASKTRIG1 = (1<<2); //DMA1 stop
  243. rIISFCON    = 0x0; //For FIFO flush
  244. rINTMSK  |= (BIT_DMA1);
  245.      Uart_Printf("nEnd of Record!n");
  246.     
  247. }
  248. void IIS_PlayWave_DMA2(unsigned char *start_addr, U32 play_size)
  249. {
  250. pISR_DMA2  = (unsigned)DMA2_Done;
  251.      pISR_EINT0 = (unsigned)Muting;
  252.      if (IIS_MasterClk_Sel == 0) //IIS Master Clock Source = PCLK
  253.        {
  254.        rIISCON = (1<<5) + (1<<2) + (1<<1);    
  255.        rIISMOD = (0<<9)+(0<<8) + (2<<6) + (0<<5) + (0<<4) + (1<<3) + (1<<2) + (1<<0);
  256.      rIISFCON = (1<<15) + (1<<13);   
  257.     
  258. Uart_Printf("nIISLRCK = %d Hz", (int) IIS_Codec_CLK/384);
  259.        }
  260.        else    //IIS Master Clock Source = MPLLin
  261.        {
  262. rIISCON = (1<<5) + (1<<2) + (0<<1);    
  263. rIISMOD = (1<<9)+(0<<8) + (2<<6) + (0<<5) + (0<<4) + (1<<3) + (1<<2) + (1<<0);
  264. rIISFCON = (1<<15) + (1<<13);
  265. Uart_Printf("nIISLRCK = %d Hz", (int) IIS_Codec_CLK/384);
  266.        }
  267. rINTMSK    = ~(BIT_EINT0 | BIT_DMA2);
  268. //DMA2 Register Setting 
  269. rDISRC2  = (int)(start_addr); 
  270.        rDISRCC2 = (0<<1) + (0<<0);    
  271.        rDIDST2  = ((U32)IISFIFO);
  272. rDIDSTC2 = (0<<2) + (1<<1) + (1<<0);
  273. rDCON2   = (1<<31)+(0<<30)+(1<<29)+(0<<28)+(0<<27)+(0<<24)+(1<<23)+(0<<22)+(1<<20)+(play_size/2);
  274.        rDMASKTRIG2 = (0<<2) + (1<<1) + (0<<0);     //No-stop, DMA2 channel On, and No-sw trigger 
  275.     
  276. Uart_Printf("nIf you want to mute or no mute, Push the 'EIN0' button repeatedly.n");
  277.      Uart_Printf("Press any key to exit!n");
  278. Uart_Printf("nPlay...n");
  279.   
  280. //IIS Tx Start
  281.      rIISCON |= 0x1;  //IIS Interface start
  282.      while(!Uart_GetKey());
  283.     
  284.      //IIS Tx Stop
  285.      Delay(10);  //For end of H/W Tx
  286.      rIISCON &= ~(1<<0);     //IIS Interface stop
  287.      rDMASKTRIG2  = (1<<2);  //DMA2 stop
  288. rIISFCON = 0x0;     //For FIFO flush
  289. rINTMSK |= (BIT_EINT0 | BIT_DMA2);
  290.  
  291. Uart_Printf("nEnd of Play!n");
  292. }
  293. void Select_IIS_Master_CLK(void)
  294. {
  295. int sel;
  296. //Uart_Printf("nIIS Master Clock Source => MPLLinn");
  297.        Uart_Printf("nSelect IIS Master Clock Sourcen");
  298. Uart_Printf("0:PCLK, 1:MPLLinn");
  299. sel = Uart_GetIntNum();
  300. switch(sel)
  301. {
  302. case 0 : 
  303. //IIS Pre-scaler Setting
  304.    rIISPSR = (5<<5) + 5;  
  305. rIISMOD = (0<<9);
  306. ChangeClockDivider(13,12); //FCLK:HCLK:PCLK =295MHz:98.33MHz:49.2MHz 
  307. ChangeMPllValue(97,1,2); //295Mhz
  308.               Delay(100);
  309. Calc_Clock(0);
  310. UPDATE_REFRESH(Hclk);
  311. Uart_Init(Pclk, 115200);
  312. Uart_Select(1);
  313. Uart_TxEmpty(1);
  314. Delay(0); //calibrate Delay()
  315. //In case PCLK = 50 MHz, IIS Codec CLK = 50/(5+1) = 8.34MHz
  316. Uart_Printf("nIIS Master CLK(PCLK) = %4.2f MHz", (float)Pclk/MEGA);
  317. IIS_Codec_CLK = (float)Pclk/6;
  318. Uart_Printf("nIIS Codec CLK = %4.2f MHz", IIS_Codec_CLK/MEGA);
  319. IIS_MasterClk_Sel = 0;
  320.        break;
  321. case 1 : 
  322. rIISMOD = (1<<9);
  323. Uart_Printf("nIIS Master CLK(MPLLin) = %4.2f MHz", (float)FIN/MEGA);
  324. IIS_Codec_CLK = (float)FIN;
  325. Uart_Printf("nIIS Codec CLK = %4.2f MHz", IIS_Codec_CLK/MEGA);
  326. IIS_MasterClk_Sel = 1;
  327. break;
  328. default : 
  329. rIISMOD = (1<<9);
  330. Uart_Printf("nIIS Master CLK(MPLLin) = %4.2f MHz", (float)FIN/MEGA);
  331. IIS_Codec_CLK = (float)FIN;
  332. Uart_Printf("nIIS Codec CLK = %4.2f MHz", IIS_Codec_CLK/MEGA);
  333. IIS_MasterClk_Sel = 1;
  334. break;
  335. }
  336. }
  337. //Initialization of UDA1341 Audio Codec using L3 Interface 
  338. void Init1341(int mode)
  339. {
  340.   //Port Initialize
  341. //----------------------------------------------------------
  342. //   PORT B GROUP
  343. //Ports  :   GPB4    GPB3   GPB2  
  344. //Signal :  L3CLOCK L3DATA   L3MODE
  345. //Setting:  OUTPUT   OUTPUT  OUTPUT 
  346. //           [9:8]       [7:6]      [5:4]
  347. //Binary :    01,          01,        01 
  348. //----------------------------------------------------------    
  349.        rGPBDAT = rGPBDAT & ~(L3M|L3C|L3D) |(L3M|L3C); //Start condition : L3M=H, L3C=H
  350.        rGPBUP  = rGPBUP  & ~(0x7<<2) |(0x7<<2);  //The pull up function is disabled GPB[4:2] 1 1100    
  351.      rGPBCON = rGPBCON & ~(0x3f<<4) |(0x15<<4);     //GPB[4:2]=Output(L3CLOCK):Output(L3DATA):Output(L3MODE)
  352. //L3 Interface
  353.      _WrL3Addr(0x14 + 2);     //STATUS (000101xx+10)
  354.   _WrL3Data(0x50,0);  //0,1,01, 000,0 : Status 0,Reset, 384fs,IIS-bus,no DC-filtering
  355.    _WrL3Addr(0x14 + 2);     //STATUS (000101xx+10)
  356.      _WrL3Data(0x81,0);  //bit[7:0] => 1,0,0,0, 0,0,01 
  357. //Record Sound via MIC In
  358.      if(mode == 1)
  359.      {
  360.    _WrL3Addr(0x14 + 2);    //STATUS (000101xx+10)
  361. _WrL3Data(0xa2,0); //bit[7:0] => 1,0,1,0,0,0,10
  362. _WrL3Addr(0x14 + 0);    //DATA0 (000101xx+00)
  363.         _WrL3Data(0xc2, 0); //1100 0,010  : Extended addr(3bits), 010 
  364.               _WrL3Data(0xf2, 0); //111,100,10 : DATA0, MIC Amplifier Gain 21dB, input channel 2 select (input channel 1 off)              
  365.       }
  366.     
  367. //Record Sound via Line In
  368.      if(mode == 2)
  369.      {
  370.    _WrL3Addr(0x14 + 2);    //STATUS (000101xx+10)
  371. _WrL3Data(0xa2,0); //bit[7:0] => 1,0,1,0, 0,0,10 
  372. _WrL3Addr(0x14 + 0);    //DATA0 (000101xx+00)
  373.         _WrL3Data(0xc2, 0); //1100 0,010  : Extended addr(3bits), 010 
  374.        _WrL3Data(0xf1, 0); //111,100,01 : DATA0, MIC Amplifier Gain 21dB, input channel 1 select (input channel 2 off)        
  375.       }     
  376. }
  377. void _WrL3Addr(U8 data)
  378. {  
  379.   S32 i,j;
  380.      rGPBDAT  = rGPBDAT & ~(L3D | L3M | L3C) | L3C; //L3D=L, L3M=L(in address mode), L3C=H
  381.      for(j=0;j<4;j++);  //tsu(L3) > 190ns
  382. //GPB[4:2]=L3C:L3D:L3M
  383.      for(i=0;i<8;i++) //LSB first
  384.      {
  385.    if(data & 0x1) //If data's LSB is 'H'
  386.    {
  387. rGPBDAT &= ~L3C;  //L3C=L
  388. rGPBDAT |= L3D;  //L3D=H  
  389. for(j=0;j<4;j++);         //tcy(L3) > 500ns
  390. rGPBDAT |= L3C;  //L3C=H
  391. rGPBDAT |= L3D;  //L3D=H
  392. for(j=0;j<4;j++);         //tcy(L3) > 500ns
  393.    }
  394.    else //If data's LSB is 'L'
  395.    {
  396. rGPBDAT &= ~L3C; //L3C=L
  397. rGPBDAT &= ~L3D; //L3D=L
  398. for(j=0;j<4;j++);        //tcy(L3) > 500ns
  399. rGPBDAT |= L3C;        //L3C=H
  400. rGPBDAT &= ~L3D; //L3D=L
  401. for(j=0;j<4;j++);        //tcy(L3) > 500ns
  402.    }
  403.    data >>= 1;
  404.      }
  405.      rGPBDAT  = rGPBDAT & ~(L3D | L3M | L3C) | (L3C | L3M);  //L3M=H,L3C=H   
  406. }
  407. void _WrL3Data(U8 data,int halt)
  408. {
  409.   S32 i,j;
  410.      if(halt)
  411.      {
  412.    rGPBDAT  = rGPBDAT & ~(L3D | L3M | L3C) | L3C;   //L3C=H(while tstp, L3 interface halt condition)   
  413.    for(j=0;j<4;j++); //tstp(L3) > 190ns
  414.      }
  415.      rGPBDAT  = rGPBDAT & ~(L3D | L3M | L3C) | (L3C | L3M);   //L3M=H(in data transfer mode)   
  416.      for(j=0;j<4;j++); //tsu(L3)D > 190ns
  417. //GPB[4:2]=L3C:L3D:L3M
  418.      for(i=0;i<8;i++)
  419.      {
  420.    if(data & 0x1) //if data's LSB is 'H'
  421.    {
  422.       rGPBDAT &= ~L3C; //L3C=L
  423.       rGPBDAT |= L3D; //L3D=H
  424.       for(j=0;j<4;j++); //tcy(L3) > 500ns
  425.       rGPBDAT |= (L3C | L3D); //L3C=H,L3D=H
  426.       for(j=0;j<4;j++);   //tcy(L3) > 500ns
  427.    }
  428.    else //If data's LSB is 'L'
  429.    {
  430.       rGPBDAT &= ~L3C; //L3C=L
  431.       rGPBDAT &= ~L3D; //L3D=L
  432.       for(j=0;j<4;j++); //tcy(L3) > 500ns
  433.       rGPBDAT |= L3C; //L3C=H
  434.       rGPBDAT &= ~L3D; //L3D=L
  435.       for(j=0;j<4;j++); //tcy(L3) > 500ns
  436.    }
  437. data >>= 1; //For check next bit
  438.      }
  439.      rGPBDAT  = rGPBDAT & ~(L3D | L3M | L3C) | (L3C | L3M);    //L3M=H,L3C=H
  440. }
  441. /* ISRs */
  442. void __irq DMA1_Rec_Done(void)
  443. {
  444.     ClearPending(BIT_DMA1);     //Clear pending bit
  445.     Rec_Done = 1;
  446. void __irq DMA2_Done(void)
  447. {
  448. rIISCON &= ~(1<<0);
  449. rIISCON |= 0x1;
  450.      ClearPending(BIT_DMA2); //Clear pending bit
  451. Uart_Printf("n~~~");
  452. //Uart_Printf("nrIISMOD=0x%xn",rIISMOD);
  453. }
  454. void __irq RxInt(void)
  455. {
  456.     rSUBSRCPND = BIT_SUB_RXD1;     //Clear pending bit (Requested)
  457.     rSUBSRCPND;
  458.     ClearPending(BIT_UART1);
  459.     *_temp ++= RdURXH1(); 
  460. }
  461. void __irq Muting(void)
  462. {
  463.     ClearPending(BIT_EINT0); //Clear pending bit
  464.     if(mute)    //Mute
  465.     {
  466.   _WrL3Addr(0x14 + 0); //DATA0 (000101xx+00)
  467.   _WrL3Data(0xa4,0);   //10,1,00,1,00 : after, no de-emp, mute, flat 
  468.   mute = 0;
  469.   Uart_Printf("nMute on...n");
  470.     }
  471.     else   //No mute
  472.     {
  473.   _WrL3Addr(0x14 + 0); //DATA0 (000101xx+00)
  474.   _WrL3Data(0xa0,0);   //10,1,00,0,00 : after, no de-emp, no mute, flat 
  475.   mute = 1;
  476.   Uart_Printf("nMute off...n");
  477.     }
  478. }