##// END OF EJS Templates
Fixed some issues on SCARD driver!
Fixed some issues on SCARD driver!

File last commit:

r60:17402611bd25 dev_alexis
r61:efd3992e476b dev_alexis
Show More
VS10XX.c
72 lines | 2.2 KiB | text/x-c | CLexer
/*------------------------------------------------------------------------------
#-- 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
#-------------------------------------------------------------------------------*/
#include <spi.h>
#include <VS10XX.h>
#include <core.h>
//#include <bsp.h>
void vs10XXopen(vs10XXDev *codec, spi_t dev, void (*setxCS)(char), void (*setxRST)(char), void (*setxDCS)(char), int (*getDREQ)())
{
codec->SPIdev = dev;
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);
}
void vs10XXsoftreset(vs10XXDev* dev)
{
vs10XXcmdwrite(dev,VSMODE,(1<<2));
}
int vs10XXcmdread(vs10XXDev* dev,char address)
{
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);
return result;
}
void vs10XXcmdwrite(vs10XXDev* dev,char address,int value)
{
while(!dev->getDREQ());
dev->setxCS(0);
spiputw(dev->SPIdev,2<<8);
spiputw(dev->SPIdev,address);
spiputw(dev->SPIdev,value>>8);
spiputw(dev->SPIdev,value);
dev->setxCS(1);
}