VS10XX.c
72 lines
| 2.2 KiB
| text/x-c
|
CLexer
r53 | /*------------------------------------------------------------------------------ | |||
#-- This file is a part of the libuc, microcontroler library | ||||
#-- Copyright (C) 2011, Alexis Jeandet | ||||
#-- | ||||
#-- This program is free software; you can redistribute it and/or modify | ||||
#-- it under the terms of the GNU General Public License as published by | ||||
#-- the Free Software Foundation; either version 3 of the License, or | ||||
#-- (at your option) any later version. | ||||
#-- | ||||
#-- This program is distributed in the hope that it will be useful, | ||||
#-- but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
#-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||||
#-- GNU General Public License for more details. | ||||
#-- | ||||
#-- You should have received a copy of the GNU General Public License | ||||
#-- along with this program; if not, write to the Free Software | ||||
#-- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||||
#------------------------------------------------------------------------------- | ||||
#-- Author : Alexis Jeandet | ||||
#-- Mail : alexis.jeandet@gmail.com | ||||
#-------------------------------------------------------------------------------*/ | ||||
r60 | #include <spi.h> | |||
#include <VS10XX.h> | ||||
#include <core.h> | ||||
r53 | //#include <bsp.h> | |||
r60 | void vs10XXopen(vs10XXDev *codec, spi_t dev, void (*setxCS)(char), void (*setxRST)(char), void (*setxDCS)(char), int (*getDREQ)()) | |||
{ | ||||
r53 | codec->SPIdev = dev; | |||
r60 | codec->setxCS = setxCS; | |||
codec->setxDCS = setxDCS; | ||||
codec->setxRST = setxRST; | ||||
codec->getDREQ = getDREQ; | ||||
codec->setxDCS(1); | ||||
codec->setxCS(1); | ||||
codec->setxRST(0); | ||||
delay_100us(2); | ||||
codec->setxRST(1); | ||||
r53 | } | |||
void vs10XXsoftreset(vs10XXDev* dev) | ||||
{ | ||||
vs10XXcmdwrite(dev,VSMODE,(1<<2)); | ||||
} | ||||
int vs10XXcmdread(vs10XXDev* dev,char address) | ||||
{ | ||||
r60 | int result; | |||
while(!dev->getDREQ()); | ||||
dev->setxCS(0); | ||||
spiputw(dev->SPIdev,3); | ||||
spiputw(dev->SPIdev,address); | ||||
result = (0xFF00 & (spigetw(dev->SPIdev)<<8)) + (0xFF & spigetw(dev->SPIdev)); | ||||
dev->setxCS(1); | ||||
r53 | return result; | |||
} | ||||
void vs10XXcmdwrite(vs10XXDev* dev,char address,int value) | ||||
{ | ||||
r60 | while(!dev->getDREQ()); | |||
dev->setxCS(0); | ||||
spiputw(dev->SPIdev,2<<8); | ||||
spiputw(dev->SPIdev,address); | ||||
spiputw(dev->SPIdev,value>>8); | ||||
r53 | spiputw(dev->SPIdev,value); | |||
r60 | dev->setxCS(1); | |||
r53 | } | |||
r60 | ||||