Доброго дня всем!
Помогите с следующей проблемой.
Возникла необходимость сделать 4 порта RS-232 к которым будут обращаться по I2C.
Для реализации на 2313 (там USI из которого делаю TWI) пользуюсь аппнотами и программами Atmel.
В отдельности прием и передача работает,если на слейве в цикле пишу следующее:
для приема(относительно I2C)
if(USI_TWI_Data_In_Receive_Buffer())
{
temp=USI_TWI_Receive_Byte();
USART_interrupt_transmit(temp2);
}
для передачи
if(DataInUARTReceiveBuffer())
{
temp=USART_interrupt_receive();
USI_TWI_Transmit_Byte(temp);
}
необходимо сделать управление,чтобы можно было писать на уарт и читать с него
делаю следующее:
for(;;)
{
if(USI_TWI_Data_In_Receive_Buffer())
{
temp=USI_TWI_Receive_Byte(); - читаю команду,что слейву делать
}
switch (temp) - вибираю необходимое действие
{
case TWI_MASTER_WRITE_4BYTE_UART: - пробую писать на уарт 4 байта
for(i=0;i<3;i++)
{
temp2=USI_TWI_Receive_Byte();
USART_interrupt_transmit(temp2);
}
break;
case....
}
}
то есть анализирую байт после адреса как команду что слейву делать.
мастером шлю:
первая посылка:
адрес и код команды TWI_MASTER_WRITE_4BYTE_UART
вторая посылка:
адрес,01,02,03,04
но в терминале вижу
01 02 04...01 02 04 так далее
скорость на уарте низкая-4800
на I2C <100 khz
буфер и со стороны I2C и со стороны уарта.(16 байт)
что я не так делаю?
премного благодарен Всем,кто отзовется