lpc2103操作vs1003正弦测试不正常
lpc2103操作vs1003正弦测试不正常,大家帮我看看程序是不是有问题?谢谢!# include "config.h"
# define REST 1 << 0 /*P0.00口作为VS1003 REST控制线 */
# define DREQ 1 << 1 /*P0.01口作为vs1003 DREQ控制线 */
# define XDCS 1 << 2 /*P0.02口作为vs1003 DCS控制线 */
# define XCS 1 << 3 /*P0.03口作为SSP从机的片选 */
# define LED1 1 << 17 /*P0.17控制LED1 */
# define LED2 1 << 18 /*P0.18控制LED2 */
# define LED3 1 << 19 /*P0.19控制LED3 */
# define LED4 1 << 20 /*P0.20控制LED4 */
# define COMMAND_READ 0x03 //读操作指令
# define COMMAND_WRITE0x02 //写操作指令
# defineSCI_MODE 0x0
# defineSCI_STATUS 0x1
# defineSCI_BASS 0x2
# defineSCI_CLOCKF 0x3
# defineSCI_DECODE_TIME 0x4
# defineSCI_AUDATA 0x5
# defineSCI_WRAM 0x6
# defineSCI_WRAMDDR 0x7
# defineSCI_HDAT0 0x8
# defineSCI_HDAT1 0x9
# defineSCI_AIADDR 0xA
# defineSCI_VOL 0xB
# defineSCI_AICTRL0 0xC
# defineSCI_AICTRL1 0xD
# defineSCI_AICTRL2 0xE
# defineSCI_AICTRL3 0xF
//uint8 const uiBuf = {/*0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07*/};
/*********************************************************************************************************
** Function name: DelayNS
** Descriptions: 长软件延时
** input parameters: uiDly延时控制值,值越大,延时越长
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
void DelayNS (uint32NDly)
{
uint32i;
for(; NDly > 0; NDly--){
for(i = 0; i < 500; i++);
}
}
void LDelayNS (uint32uiDly)
{
uint32i;
for(; uiDly > 0; uiDly--){
for(i = 0; i < 50000; i++);
}
}
/*********************************************************************************************************
** Function name: MSPIInit
** Descriptions: 初始化SPI接口,设置为主机,每次传输16位数据
** input parameters: 无
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
void MSPIInit(void)
{
PINSEL0 = (PINSEL0 & 0xFFFF00FF) | (0x15<<8); /*设置SPI引脚连接 */
SPI_SPCCR = 0x6C; /*设置SPI时钟分频 */
SPI_SPCR = 0 << 2 | /*设置SPI每次传输发送和接收8位数据*/
0 << 3 | /*CPHA = 0第一个时钟采样 */
0 << 4 | /*CPOL = 0,SCK有效 */
1 << 5 | /*MSTR = 1,设置为主模式 */
0 << 6 | /*LSBF = 0,SPI传输MSB在先 */
0 << 7 ; /*SPIE = 0,SPI中断禁止 */
// 8 << 8 ; /*设置8位传输 */
}
/*********************************************************************************************************
** Function name: MSPISendData
** Descriptions: SPI主模式发送数据
** input parameters: uiData: 将要发送的数据
** output parameters: 无
** Returned value: S0SPDR: 返回值为读取的数据
*********************************************************************************************************/
uint8 MSPISendData(uint8 uiData)
{
SPI_SPDR = uiData;
while ((SPI_SPSR & 0x80) == 0); /*等待数据发送完毕 */
return(SPI_SPDR);
}
/*********************************************************************************************************
** Function name: WRITE_VSCOMMAND
** Descriptions:
** input parameters: 无
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
uint8 WRITE_VSCOMMAND(uint8 VS_addr,uint8 VS_hdata,uint8 VS_ldata)
{
while((IOPIN&DREQ)==0);
IO0CLR = XCS;
//IO0SET = XDCS;
MSPISendData(0x02);
MSPISendData(VS_addr);
MSPISendData(VS_hdata);
MSPISendData(VS_ldata);
IO0SET = XCS;
while((IOPIN&DREQ)==0);
return(0);
}
/*********************************************************************************************************
** Function name: SEND_SDI
** Descriptions:
** input parameters: 无
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
uint8 SEND_SDI(uint8 SDATA)
{
while((IOPIN&DREQ)==0);
IO0CLR = XCS;
IO0SET = XDCS;
MSPISendData(SDATA);
IO0CLR =XDCS;
IO0SET = XCS;
return(0);
}
/*********************************************************************************************************
** Function name: restVS
** Descriptions:
** input parameters: 无
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
void restVS(void)
{
IO0CLR =REST;
DelayNS(100);
IO0SET = XCS| XDCS | REST;
while((IOPIN&DREQ)==0);
DelayNS (1);
WRITE_VSCOMMAND(SCI_MODE,0x08,0x20);//CHU SHI HUA
DelayNS (1);
WRITE_VSCOMMAND(SCI_AUDATA,0xBB,0x81);//CHU SHI HUA
DelayNS (1);
WRITE_VSCOMMAND(SCI_BASS,0x00,0x55);//CHU SHI HUA
DelayNS (1);
WRITE_VSCOMMAND(SCI_CLOCKF,0x98,0x00);
DelayNS (1);
WRITE_VSCOMMAND(SCI_VOL,0x20,0x20);
DelayNS (1);
SEND_SDI(0xFF);
SEND_SDI(0xFF);
SEND_SDI(0xFF);
SEND_SDI(0xFF);
//return (0);
}
/*********************************************************************************************************
** Function name: SINE_TEST
** Descriptions:
** input parameters: 无
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
void SINE_TEST(void)
{
uint8 x=0;
while((IOPIN&DREQ)==0);
SEND_SDI(0x53);
SEND_SDI(0xef);
SEND_SDI(0x6e);
SEND_SDI(x);
SEND_SDI(0x00);
SEND_SDI(0x00);
SEND_SDI(0x00);
SEND_SDI(0x00);
LDelayNS(1000);
//IO0SET = XDCS;
}
/*********************************************************************************************************
** Function name: main
** Descriptions: SPI做主机
** input parameters: 无
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
int main(void)
{
PINSEL0 = PINSEL0 & 0xFFFFFF00; //SET P0.0~P0.3 IS GPIO
MSPIInit(); /*初始化SPI接口 */
IO0DIR= XCS | XDCS | REST; /* setXCS | XDCS | REST is output */
IO0SET = REST;
restVS();
SINE_TEST();
while(1);
return (0);
}
页:
[1]