#include <stdio.h><br />#define IMR (volatile unsigned int *) 0x0000 <br />#define DMPREC (volatile unsigned int *) 0x0054 <br />#define SWWSR (volatile unsigned int *) 0x0028<br />#define BSCR (volatile unsigned int *) 0x0029<br />#define ST0 (volatile unsigned int *) 0x0006<br />#define ST1 (volatile unsigned int *) 0x0007<br />#define PMST (volatile unsigned int *) 0x001D<br />#define IFR (volatile unsigned int *) 0x0001<br />#define DRR11 (volatile unsigned int *) 0x0041<br />#define DXR11 (volatile unsigned int *) 0x0043<br /><br /><br />#define SPSA1 (volatile unsigned int *) 0x0048 //McBSP1<br />#define SPSD1 (volatile unsigned int *) 0x0049<br />//sub_address register<br />#define SPCR11 0x0000<br />#define SPCR21 0x0001<br />#define RCR11 0x0002<br />#define RCR21 0x0003<br />#define XCR11 0x0004<br />#define XCR21 0x0005<br />#define PCR1 0x000E<br /><br /><br />void inline disable(void);<br />void inline enable(void);<br />void interrupt essp_rx(void);<br />void init_core(void);<br />void init_bsp(void);<br />void init_codec(void);<br /><br />main()<br />{<br /> init_core();<br /> init_codec();<br /> enable(); <br /> while(1);<br />}<br /><br />void init_core()<br />{<br /> /*设置外部存储器的等待周期为0,I/O等待周期为2*/<br /> *SWWSR=0x2000;<br /> *BSCR=0x0000;<br /> *ST0=0x1800;<br /> *ST1=0x2900;<br /> /*设置中断向量表的首地址为0X0080*/<br /> *PMST=0x00A0;<br /> *IMR=0x0000;<br /> *IFR=0xffff;/*有的中断标志*/<br />}<br /><br />void init_bsp()<br />{<br /> *SPSA1=SPCR11;<br /> *SPSD1=0x0020;<br /> /*发送中断由帧同步信号产生,McBSP0 Tx=FREE*/<br /> *SPSA1=SPCR21;<br /> *SPSD1=0x0201;<br /><br /> *SPSA1=RCR11;<br /> *SPSD1=0x0040;<br /><br /> *SPSA1=RCR21;<br /> *SPSD1=0x0000;<br /><br /> *SPSA1=XCR11;<br /> *SPSD1=0x0040;<br /> <br /> *SPSA1=XCR21;<br /> *SPSD1=0x0000;<br /><br /> *SPSA1=PCR1;<br /> *SPSD1=0x000C;<br /><br /> asm("NOP");<br /> asm("NOP");<br />}<br /><br />/*初始化TLC320AD50*/<br />void init_codec()<br />{<br /> int i;<br /> disable();<br /> init_bsp(); /*初始化MBSP0*/<br /><br /> *DMPREC=*DMPREC&0xFF3F; /*设置中断为串口发出*/<br /> *DXR11=0x0000;<br /><br /> *SPSA1=SPCR11; /*接收数据*/<br /> *SPSD1=0x0001;<br /><br /> *SPSA1=SPCR21; /*发送数据*/<br /> *SPSD1=0x0001;<br /><br /> *DXR11=0x0003; /*用软件方式配置AD50寄存器*/<br /> *SPSA1=SPCR21;<br /> while(!(*SPSD1&0x0002));<br /><br /> *DXR11=0x0181; /*复位AD50*/<br /> while(!(*SPSD1&0x0002));<br /> for(i=0;i<4000;i++);<br /> *DXR11=0x0003;<br /> while(!(*SPSD1&0x0002));<br /><br /> *DXR11=0x0101; <br /> while(!(*SPSD1&0x0002));<br /><br /> *DXR11=0x0003;<br /> while(!(*SPSD1&0x0002));<br /> <br /> *DXR11=0x0210; <br /> while(!(*SPSD1&0x0002));<br /><br /> *DXR11=0x0003;<br /> while(!(*SPSD1&0x0002));<br /><br /> *DXR11=0x0300; <br /> while(!(*SPSD1&0x0002));<br /><br /> *DXR11=0x0003;<br /> while(!(*SPSD1&0x0002));<br /><br /> *DXR11=0x0450;<br /> while(!(*SPSD1&0x0002));<br /><br /> asm("NOP");<br /> asm("NOP");<br /> <br /> *IMR=0x0400;<br /> *IFR=0x0400;<br /> enable();<br /> *DXR11=*DRR11;<br />}<br /><br />void inline disable()<br />{<br /><br /> asm("SSBX INTM");<br /> <br /> <br /> <br />}<br /><br />void inline enable()<br />{<br /><br /> asm("RSBX INTM");<br /> <br /> <br />}<br /><br /><br />void interrupt essp_rx()<br />{<br /> int sample_in;<br /> /*读入采样数据*/<br /> sample_in=*DRR11;<br /> /*传回AD50*/<br /> *DXR11=sample_in;<br />} <br /><br /> |
|