?? initial.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 + -