Толькочто научил LPC2103 передавать слово и считывать слово, уменя обмен с устройство - я ему команду 4 байта, и сразу же читаю его состояне тоже 4 байта (DEV_CMD_SIZE, DEV_STATE_SIZE)
Посмотрите и лишнее выкиньте.
Код
void twi_0_ISR(void)
{
//portBASE_TYPE Tmp = I2C0STAT;
switch (I2C0STAT) //чтение состояния шины TWI #0
{
portBASE_TYPE pbTmp;
// режим ВЕДУЩИЙ-ПРЕДЕТЧИК
// СТАРТ and Send byte условие
case ( 0x08 ): //сформировано состояние СТАРТ
I2C0CONCLR = 0x20; // сброс состояния СТАРТ
I2C0DAT = twi_0_SlaveAddress; // запись SLA+W
break;
case (0x10): // сформировано состояние ПОВСТАР
twi_0_Data = (char*)&TwiDebugWordRx;
I2C0CONCLR = 0x20; // сброс состояния ПОВСТАР
I2C0DAT = twi_0_SlaveAddress + 1; // запись SLA+R
break;
case (0x18): //передан address+W, получен ACK
I2C0DAT = twi_0_Data[0]; //запись на шину data первого байта пердаваймого сообщения
break;
case (0x20):
//передан пакет address+W, получен NACK
I2C0CONSET = 0x10; //установка состояния СТОП
xQueueSendFromISR( qhTwi_0_SignaledQueue , (void*)&I2C0STAT , 0 );
break;
case (0x28): //передан data, получен ASK
if (twi_0_ByteTransfered < DEV_CMD_SIZE - 1 )
{
twi_0_ByteTransfered ++;
I2C0DAT = twi_0_Data[twi_0_ByteTransfered]; //запись на шину data
}
else
{
// начинаем прием 4 байтов
//сформируем состояние ПОВСТАР, разрешение подтверждения
I2C0CONSET = I2C1CONSET_STA;
}
break;
case (0x30) : //передан data, получен NASK
I2C0CONSET = 0x10; //установка состояния СТОП
xQueueSendFromISR( qhTwi_0_SignaledQueue , (void*)&I2C0STAT , 0 );
break;
// режим ВЕДУЩИЙ-ПРИЕМНИК
case (0x40) : //передан address+R, получен ACK
twi_0_ByteTransfered = 0;
I2C0CONSET = 0x04; //разрешение подтверждения ASK ведомым
break;
case (0x48) : //передан address+R, получен NACK
I2C0CONSET = 0x10; //установка состояния СТОП
xQueueSendFromISR( qhTwi_0_SignaledQueue , (void*)&I2C0STAT , 0 );
break;
case (0x50) : //принят data, получен ASK
twi_0_Data[twi_0_ByteTransfered] = I2C0DAT; //чтение байта
twi_0_ByteTransfered++;
if ( twi_0_ByteTransfered == DEV_STATE_SIZE )
{
I2C0CONSET = 0x10; //установка состояния СТОП
xQueueSendFromISR( qhTwi_0_SignaledQueue , (void*)&I2C0STAT , 0 );
}
break;
case (0x58): //ринят data, получен NASK
I2C0CONSET = 0x10; //установка состояния СТОП
xQueueSendFromISR( qhTwi_0_SignaledQueue , (void*)&I2C0STAT , 0 );
break;
default :
break;
}
// сброс флага прерывания TWI
I2C0CONCLR = 0x08;
// сброс прерывания в VIC контроллере
VICVectAddr = 0;
}
Сообщение отредактировал klen - Aug 17 2006, 21:44