Переглянути джерело

Fix USB initilaize on LUFA

- Add print messages of USB intialize procesure.
- call out sei() in earlier stage. LUFA API doc of USB_Init() says:
interrupts must be enabled within 500ms ... to ensure that the host does
not time out whilst enumerating the device
- remove matrix_init() from suspend_wakeup_init(). It is not needed in
  fact and if matrix_init() takes long time to initialize it prevents
host emnumerating the device.
led_matrix
tmk 10 роки тому
джерело
коміт
7d692c492c
3 змінених файлів з 7 додано та 6 видалено
  1. 0
    3
      common/keyboard.c
  2. 1
    2
      common/suspend.c
  3. 6
    1
      protocol/lufa/lufa.c

+ 0
- 3
common/keyboard.c Переглянути файл



void keyboard_init(void) void keyboard_init(void)
{ {
// TODO: configuration of sendchar impl
print_set_sendchar(sendchar);

timer_init(); timer_init();
matrix_init(); matrix_init();
#ifdef PS2_MOUSE_ENABLE #ifdef PS2_MOUSE_ENABLE

+ 1
- 2
common/suspend.c Переглянути файл

// run immediately after wakeup // run immediately after wakeup
void suspend_wakeup_init(void) void suspend_wakeup_init(void)
{ {
// clear matrix and keyboard state
matrix_init();
// clear keyboard state
clear_keyboard(); clear_keyboard();
#ifdef BACKLIGHT_ENABLE #ifdef BACKLIGHT_ENABLE
backlight_init(); backlight_init();

+ 6
- 1
protocol/lufa/lufa.c Переглянути файл



// for Console_Task // for Console_Task
USB_Device_EnableSOFEvents(); USB_Device_EnableSOFEvents();
print_set_sendchar(sendchar);
} }


int main(void) __attribute__ ((weak)); int main(void) __attribute__ ((weak));
int main(void) int main(void)
{ {
SetupHardware(); SetupHardware();
sei();
while (USB_DeviceState != DEVICE_STATE_Configured) ;
print("USB configured.\n");

keyboard_init(); keyboard_init();
host_set_driver(&lufa_driver); host_set_driver(&lufa_driver);
#ifdef SLEEP_LED_ENABLE #ifdef SLEEP_LED_ENABLE
sleep_led_init(); sleep_led_init();
#endif #endif
sei();


print("Keyboard start.\n");
while (1) { while (1) {
while (USB_DeviceState == DEVICE_STATE_Suspended) { while (USB_DeviceState == DEVICE_STATE_Suspended) {
suspend_power_down(); suspend_power_down();