Ксения (25.03.2009 13:37, просмотров: 201) ответил IgorV на 1 вариант получился так:
На 0005 еще надо инфу принять и в UDADDR загрузить, а то потом работать не будет: void USB_Set_Address( void)
{
U8 tmp = UEDATX & 0x7F;
UDADDR = (UDADDR & (1<<ADDEN))|tmp;
UEINTX &= ~(1 << RXSTPI); // Шлем ACK
UEINTX &= ~(1 << TXINI); // Шлем ZLP (Zero Lenght Packet)
while( !(UEINTX & (1 << TXINI))); // Ждем подтверждения приема ZLP
UDADDR |= (1 << ADDEN);
}
Эти строки взяты мной из чужого проекта и этот отрывок нормально работает, хотя и противоречит тому, что сказано в дататашите на МК (22.7 Address Setup).