OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 10972|回复: 6
打印 上一主题 下一主题

LPC1768控制VS1053,SPI读寄存器为0。VS1053部分的代码是版主的,问题应该在SPI初始化部分,求解

[复制链接]

1

主题

1

帖子

0

精华

新手入门

积分
25
金钱
25
注册时间
2012-5-3
在线时间
0 小时
跳转到指定楼层
楼主
发表于 2012-5-3 11:35:09 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式

贴出部源码

void  SPIInit(void)

  /* 初始化SPI引脚   */  
 
 LPC_PINCON->INSEL0 |= (0x03ul << 30);                             /* 设置P0.15脚为SCK脚           */
 LPC_PINCON->INSEL1 &= ~(0x03 << 0);
 LPC_GPIO0->FIODIR   |=  SPI_CS;                                    /* 设置SPI的片选引脚            */
 CE_High();
 LPC_PINCON->INSEL1 |=  (0x03 << 2) | (0x03 << 4);                 /* 设置P0.17、P0.18             */
                                /* 引脚为SPI引脚                */

              /* 初始化SPI寄存器   */   
 //这里说明一下,SPI时钟为24M,然后0X40分频(64分频),这里对吗?     
 LPC_SPI->SPCCR  =  0x40;                                             /* 设置SPI时钟分频              */
 LPC_SPI->SPCR   =   (0 << 2) |                                      /* SPI控制器每次传输            */
               /* 发送和接收8位数据            */
    (1 << 3) |                                      /* CPHA = 0, 数据在SCK          */
               /* 的第一个时钟沿采样           */
    (1 << 4) |                                      /* CPOL = 0, SCK 为高有效       */
    (1 << 5) |                                      /* MSTR = 1, SPI 处于主模式     */
    (0 << 6) |                                      /* LSBF = 0, SPI 数据           */
               /* 传输MSB (位7)在先            */
    (0 << 7);                                       /* SPIE = 0, SPI 中断被禁止     */
}
//--------------------------------
void SPIx_SetSpeed(uint8_t SpeedSet)
{
 //0x100=256,0x80=128,0x40=64;
 LPC_SPI->SPCCR  =  SpeedSet;
}
//这里设两种速度,8分频为高速,64分频为低速。

unsigned char SPIx_ReadWriteByte(unsigned char TxData)
{
 uint32_t  temp = 0;
 LPC_SPI->SPDR = TxData;
 while (0 == ( LPC_SPI->SPSR & 0x80));           /* 等待SPIF置位,               */
                                       /* 即等待数据发送完毕           */
 temp = (uint32_t) LPC_SPI->SPSR;               /* 清除SPIF标志                 */
 temp =  temp ;

 return (INT8U)(LPC_SPI->SPDR); 
}
//--------------------------------------------
//这里去读寄存器的时候,例如temp=SPIx_ReadWriteByte(0xff);TEMP会是0,量过信号线,信号线动作正常。求解????是不是频率设得有问题?
uint16_t VS_RD_Reg(uint8_t address)

     uint16_t temp=0;
    while(GPIO_ReadInputDataBit(LPC_GPIO0,DREQ_pin0)==0);//非等待空闲状态 
     SPIx_SetSpeed(SPI_SPEED_64);//低速 
     TXDCS_SET(1);//VS_XDCS=1;       //MP3_DATA_CS=1;
     TCS_SET(0);//VS_XCS=0;        //MP3_CMD_CS=0;
     SPIx_ReadWriteByte(VS_READ_COMMAND);//发送VS10XX的读命令
     SPIx_ReadWriteByte(address);        //地址
     temp=SPIx_ReadWriteByte(0xff);  //读取高字节
     temp=temp<<8;
     temp+=SPIx_ReadWriteByte(0xff);  //读取低字节
     TCS_SET(1);//VS_XCS=1;      //MP3_CMD_CS=1; 
     SPIx_SetSpeed(SPI_SPEED_8);//高速
    return temp;

至于VO53部分全是抄版本的,应该不会是问题。



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


关闭

原子哥极力推荐上一条 /1 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2026-1-22 18:57

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表