¿Por qué EP0 está deshabilitado en USB_RESET en Atmega32u4?

0

Uso atmega32u4 (arduino pro micro), alimentado desde usb.

En la ficha técnica de atmega32u4 pág. 267 se afirma:

  

Cuando se detecta un reinicio de USB en la línea USB (estado SE0 con una duración mínima de 2.5μs), el controlador realiza las siguientes operaciones:

     

• todos los puntos finales están deshabilitados

     

• el punto final de control predeterminado permanece configurado

Sin embargo, este ejemplo demuestra que el punto final de control está deshabilitado. ¿Cuál es la razón de ello?

#include <avr/io.h>

void main(void)
{
  UHWCON |= 1 << UVREGE; /* enable internal USB pads regulator */

  /* start pll */
  PLLCSR |= 1 << PINDIV;
  PLLCSR |= 1 << PLLE;
  while (!(PLLCSR & (1<<PLOCK))) ;

  /* start usb controller */
  USBCON |= 1 << USBE;
  USBCON &= ~(1 << FRZCLK);

  /* configure control endpoint */
  UENUM = 0;
  UECONX |= 1 << EPEN;
  UECFG0X = (0 << 6) | 0; /* control type, out direction */
  UECFG1X |= (2 << 4) | (0 << 2); /* size 32, one bank */
  UECFG1X |= 1 << ALLOC;


  USBCON |= 1 << OTGPADE; /* enable VBUS pad */
  while (!(USBSTA & (1 << VBUS))) ; /* wait until VBUS line detects power from host */
  UDCON &= ~(1 << DETACH); /* pull up D+ (attach) */

  while(1) {
    if (!(UECFG1X & (1 << ALLOC))) {
      DDRB |= 1 << PB0;
      PORTB |= 1 << PB0;
    }
  }
}

Construir con:

avr-gcc -c -pipe -gdwarf-2 -g2 -mmcu=atmega32u4 -fshort-enums -fno-inline-small-functions -fpack-struct -Wall -fno-strict-aliasing -funsigned-char -funsigned-bitfields -ffunction-sections -I. -DF_CPU=16000000UL -mrelax -fno-jump-tables -x c -Os -std=gnu99 -Wstrict-prototypes test.c -o test.o
avr-gcc test.o -o test.elf -lm -Wl,-Map=test.map,--cref -Wl,--gc-sections -Wl,--relax -mmcu=atmega32u4
avr-objcopy -O ihex -R .eeprom -R .fuse -R .lock -R .signature test.elf test.hex
    
pregunta Igor Liferenko

0 respuestas

Lea otras preguntas en las etiquetas