Доброго дня всем!
Помогите с следующей проблемой. Возникла необходимость сделать 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 байт)
что я не так делаю?
премного благодарен Всем,кто отзовется
Сообщение отредактировал MichaZ - Jan 27 2006, 13:29
|