求助:vs1003正弦测试
// VS1003正弦音测试void VS_SinTest(unsigned char x)
{
VS_WriteReg(0x00,0x0820);//启动测试,向0号寄存器写入0x0820 SM_SDINEW为1 SM_TEST为1
while(VS_DREQ==0); //等待DREQ变为高电平
//VS_XDCS=0; //打开数据片选 SDI有效
VS_SelectData() ;
VS_WriteByte(0x53); //写入以下8个字节,进入正弦测试
VS_WriteByte(0xef);
VS_WriteByte(0x6e);
VS_WriteByte(x); //参数x用来调整正弦测试中正弦波的频率 FsIdx (b7~b5):采样率表索引 S (b4~b0):正弦波的跃速 频率F=Fs X S / 128
VS_WriteByte(0); //比如x=126 (0b 011 11110) FsIdx=011=3 Fs=22050Hz S=11110=30 F=22050Hz X 30 /128 =5168 Hz
VS_WriteByte(0);
VS_WriteByte(0);
VS_WriteByte(0);
Delay_ms(500); //这里延时一段时间,为了听到“正弦音”
VS_WriteByte(0x45); //写入以下8个字节,退出正弦测试
VS_WriteByte(0x78);
VS_WriteByte(0x69);
VS_WriteByte(0x74);
VS_WriteByte(0);
VS_WriteByte(0);
VS_WriteByte(0);
VS_WriteByte(0);
//VS_XDCS=1; //关闭数据片选 ,SDI无效
VS_DeselectData();
} =====================================
问 1:这段代码执行耳机就能听到正弦声音? VS1003正弦波测试的两种模式,播放语音过程中是不可以利用vs1003自带的正弦测试模式来播放正弦波。
并且要注意是在使用从机模式还是standalone模式,主机模式不可以用spi总线,standalone可以用spi总线来传输音频数据流。楼主看下数据手册!
http://www.eechina.com/thread-35875-1-1.html参考下 本帖最后由 SCREA 于 2013-9-18 12:49 编辑
qq2355355257 发表于 2013-9-18 11:37 static/image/common/back.gif
VS1003正弦波测试的两种模式,播放语音过程中是不可以利用vs1003自带的正弦测试模式来播放正弦波。
并且要 ...
我昨天看了一天的英文datasheet。知道大概怎么操作。但是,怎么启动SPI传输。能说的具体点么。
主机模式?我不太懂,我把我的主控MCU设置为主机模式。你说的主机模式是? SCREA 发表于 2013-9-18 12:48 static/image/common/back.gif
我昨天看了一天的英文datasheet。知道大概怎么操作。但是,怎么启动SPI传输。能说的具体点么。
主机模式 ...
http://bbs.ednchina.com/BLOG_ARTICLE_260281.HTM参考下 本帖最后由 SCREA 于 2013-9-18 13:59 编辑
qq2355355257 发表于 2013-9-18 12:57 static/image/common/back.gif
http://bbs.ednchina.com/BLOG_ARTICLE_260281.HTM参考下
后来,查网上的资料,说VS1003的SPI时序需要注意,如果调不好数据是乱得。于是我试着在每次SPI发送8bit数据之间加了一点延时,其他的地方没变。再试验,果然成功了,读0x00单元内容为0x0800,和数据手册上说的一样了,又试了写寄存器也没有问题了。
===========================
我用的硬件SPI读取unsigned char SPIPutChar(unsigned char dat)//通过SPI发送一个字节的数据
{
SPDR = dat;
while((SPSR & (1 << SPIF)) == 0);
return (SPDR);
}这个读取 a=SPIPutChar(0x0);
a应该是0x0800对吧
但我还是0 本帖最后由 SCREA 于 2013-9-18 15:10 编辑
{:huffy:}{:huffy:}{:huffy:}{:huffy:}{:huffy:}{:huffy:}{:huffy:}{:huffy:} {:huffy:}{:huffy:}{:huffy:}{:huffy:}{:huffy:}{:huffy:}{:huffy:}{:huffy:}{:huffy:}
哪不对voidMSPI_Init(void)//SPI初始化
{
SPCR = 0;
SPCR = (1 << SPE) | (1 << MSTR) | _BV(SPR1) | _BV(SPR0); //使能SPI,主机方式,MSB在前,模式0,64分频.
}
voidInitPortVS1003(void)//ATmega16与vs1003的接口的初始化
{
DDRB |= _BV(PB1) | _BV(PB5) | _BV(PB7); //XRST,MOSI,SCK设置输出
DDRB &= ~_BV(PB6); //MISO设置输入
PORTB |= _BV(PB1) | _BV(PB5)| _BV(PB6) | _BV(PB7); //设置上拉
DDRD|= _BV(PD6) | _BV(PD7); //分别是:XCS,XDCS
DDRD &= ~_BV(PD5); //DREQ,设置输入
PORTD |= _BV(PD5) | _BV(PD6) | _BV(PD7);
MSPI_Init(); //SPI初始化
}
unsigned char SPIPutChar(unsigned char dat)//通过SPI发送一个字节的数据
{
SPDR = dat;
while(!(SPSR & _BV(SPIF)));
return (SPDR);
} qq2355355257 发表于 2013-9-18 12:57 static/image/common/back.gif
http://bbs.ednchina.com/BLOG_ARTICLE_260281.HTM参考下
大神,帮忙看看。拿错了 SCREA 发表于 2013-9-18 15:11 static/image/common/back.gif
大神,帮忙看看。拿错了
你在参考下Datasheet qq2355355257 发表于 2013-9-18 15:26 static/image/common/back.gif
你在参考下Datasheet
手册我看了不少回了。
有些细节可能看不到。
现在初步发现我SPI读取写入遇到了问题,就像这张图片,设计了标志打印。
正常1、2、X、3、X、4(x代表返回值)。现在打印出3后就卡住了。明显SPI出了问题。
以下是我的SPI代码voidMSPI_Init(void)//SPI初始化
{
SPCR = 0;
SPCR = (1 << SPE) | (1 << MSTR) | _BV(SPR1) | _BV(SPR0); //使能SPI,主机方式,MSB在前,模式0,64分频.
}
voidInitPortVS1003(void)//ATmega16与vs1003的接口的初始化
{
DDRB |= _BV(PB1) | _BV(PB5) | _BV(PB7); //XRST,MOSI,SCK设置输出
DDRB &= ~_BV(PB6); //MISO设置输入
PORTB |= _BV(PB1) | _BV(PB5)| _BV(PB6) | _BV(PB7); //设置上拉
DDRD|= _BV(PD6) | _BV(PD7); //分别是:XCS,XDCS
DDRD &= ~_BV(PD5); //DREQ,设置输入
PORTD |= _BV(PD5) | _BV(PD6) | _BV(PD7);
MSPI_Init(); //SPI初始化
}
unsigned char SPIPutChar(unsigned char dat)//通过SPI发送一个字节的数据
{
SPDR = dat;
while(!(SPSR & _BV(SPIF)));
return (SPDR);
}
页:
[1]