⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 initial.h

📁 滤波器采样频率为600Hz
💻 H
字号:
typedef unsigned int u16;

#define PMST	*(volatile u16 *)0x001D
#define SWWSR	*(volatile u16 *)0x0028
#define SWCR	*(volatile u16 *)0x002B
#define BSCR	*(volatile u16 *)0x0029
#define	CLKMD	*(volatile u16 *)0x0058

#define IMR		*(volatile u16 *)0x0000
#define	IFR		*(volatile u16 *)0x0001

#define DMPREC	*(volatile u16 *)0x0054

// McBSP Memory Mapped Registers
#define SPSA0    *(volatile u16 *)0x38
#define SPSD0    *(volatile u16 *)0x39

#define DRR20    *(volatile u16 *)0x20
#define DRR10    *(volatile u16 *)0x21 // McBSP0 data receive register 1
#define DXR20    *(volatile u16 *)0x22
#define DXR10    *(volatile u16 *)0x23 // McBSP0 data transmit register 1
 
// McBSP Subaddresed Registers
#define SPCR1	0x00
#define SPCR2	0x01
#define RCR1	0x02
#define RCR2	0x03
#define XCR1	0x04
#define	XCR2	0x05
#define SRGR1	0x06
#define SRGR2	0x07
#define PCR		0x0E

void InitDSP()
{
	CLKMD = 0x0000;
	while(CLKMD & 0x0001);	
	CLKMD = 0x4007;   // 100MHz
	
	PMST = 0x00A0; 
	SWWSR = 0x7FFF;
	SWCR = 0x0000;
	BSCR = 0x8802;
}

void Delay(int k)
{
	while(k--);
}

void WriteSubReg0(u16 Addr, u16 Val)
{
	SPSA0 = Addr;
	SPSD0 = Val;
}

u16 ReadSubReg0(u16 Addr)
{
	SPSA0 = Addr;
	asm("\t nop");
	asm("\t nop");
	asm("\t nop");
	return SPSD0;
}

void InitMcBSP0()
{
    WriteSubReg0(SPCR1,0x0000);
    WriteSubReg0(SPCR2,0x0200); // XRST=RRST=FRST = 0; 
    
    WriteSubReg0(PCR,0x000C); // 采样率由DSP内部产生,帧同步信号为低,下降沿发送接收
    
    WriteSubReg0(SPCR1,0);
    WriteSubReg0(SPCR2,0); 
    
    WriteSubReg0(RCR1,0x0040); // 每帧一字,每字16位
    WriteSubReg0(RCR2,0x0004); // 先传MSB位, 每一帧后,忽略接收帧同步, 不延时
    
    WriteSubReg0(XCR1,0x0040); // The same as RCR1;
    WriteSubReg0(XCR2,0x0004); // The same as RCR2;
      
    Delay(10);
    
    // Set interrupts to come from serial port not DMA
    DMPREC &= 0xFF3F;  // Clear bit 6 and 7 in DMPREC
    
    DXR10 = 0;
     
    // Now enable McBSP transmit and receive
    WriteSubReg0(SPCR1,0x0000|1);
    WriteSubReg0(SPCR2,0x0200|1);
     
    Delay(10);
    
    IMR |= 0x0010;  //开接收0中断
    IFR = 0xFFFF;
} 

void WriteAD50Reg(unsigned Reg, unsigned RegData)
{
	DXR10 = 0x0001;
	while( (ReadSubReg0(SPCR1) & 0x0002)==0);
	DXR10 = (Reg<<8)|RegData;
	while( (ReadSubReg0(SPCR1) & 0x0002)==0);
}

void InitAD50()
{
	WriteAD50Reg(1, 0x80); // Reset AD50
	WriteAD50Reg(1, 0x00); // Retore default setting

	WriteAD50Reg(3, 0x01); // Write Register3
	WriteAD50Reg(4, 0x01); // Write Register4
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -