forked from len0rd/rockbox
as3525: reverting I2C2 to non-interrupts version
Interrupts version is cause of freeze on USB extraction. Also non-interrupts version much simpler and faster. Change-Id: I30a2993cdcaa85abfba77ca06bfacd5b6b4353e2
This commit is contained in:
parent
ce90c0481a
commit
c7daef36c5
4 changed files with 126 additions and 402 deletions
|
|
@ -26,40 +26,18 @@
|
|||
/* Read 10-bit channel data */
|
||||
unsigned short adc_read(int channel)
|
||||
{
|
||||
unsigned short data = 0;
|
||||
|
||||
if ((unsigned)channel >= NUM_ADC_CHANNELS)
|
||||
return 0;
|
||||
unsigned char buf[2];
|
||||
|
||||
ascodec_lock();
|
||||
|
||||
/* Select channel */
|
||||
if (ascodec_write(AS3514_ADC_0, (channel << 4)) >= 0)
|
||||
{
|
||||
unsigned char buf[2];
|
||||
ascodec_write(AS3514_ADC_0, (channel << 4));
|
||||
|
||||
/*
|
||||
* The AS3514 ADC will trigger an interrupt when the conversion
|
||||
* is finished, if the corresponding enable bit in IRQ_ENRD2
|
||||
* is set.
|
||||
* Previously the code did not wait and this apparently did
|
||||
* not pose any problems, but this should be more correct.
|
||||
* Without the wait the data read back may be completely or
|
||||
* partially (first one of the two bytes) stale.
|
||||
*/
|
||||
ascodec_wait_adc_finished();
|
||||
|
||||
|
||||
/* Read data */
|
||||
if (ascodec_readbytes(AS3514_ADC_0, 2, buf) >= 0)
|
||||
{
|
||||
data = (((buf[0] & 0x3) << 8) | buf[1]);
|
||||
}
|
||||
}
|
||||
ascodec_readbytes(AS3514_ADC_0, 2, buf);
|
||||
|
||||
ascodec_unlock();
|
||||
|
||||
return data;
|
||||
|
||||
return (((buf[0] & 0x3) << 8) | buf[1]);
|
||||
}
|
||||
|
||||
void adc_init(void)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue