Маски прерываний USB не загружаются STM32L151CC

В настоящее время я сталкиваюсь со странной проблемой с библиотеками USB STM. Я могу успешно загрузить прошивку на плату STM32L152D-EVAL (которая использует STM32L152ZD), однако я не могу изменить тот же код для работы на моей плате форм-фактора, которая использует вышеупомянутый STM32L151CC.

Пройдя по коду с помощью отладчика (ULINK2, использующего IDE KEIL uVision4), я заметил, что код зависнет при установке маски прерывания в функции USB_SIL_Init()

uint32_t USB_SIL_Init(void)
{
  /* USB interrupts initialization */
  /* clear pending interrupts */
  _SetISTR(0);
  wInterrupt_Mask = IMR_MSK;
  /* set interrupts mask */
  _SetCNTR(wInterrupt_Mask);
  return 0;
}

Более конкретно, _SetCNTR(wInterrupt_Mask); это то, что дает мне ошибку. Я не изменил значение IMR_MSK между любой доской. Это значение дается как

#define IMR_MSK (CNTR_CTRM | CNTR_WKUPM | CNTR_SUSPM | CNTR_ERRM | CNTR_SOFM \ | CNTR_ESOFM | CNTR_RESETM )

который 0xBF00

_SetCNTR определяется следующим образом

 #define _SetCNTR(wRegValue)  (*CNTR   = (uint16_t)wRegValue)

С CNTR определяется как

/* Control register */
#define CNTR    ((__IO unsigned *)(RegBase + 0x40))

А также RegBase является

#define RegBase (0x40005C00L)  /* USB_IP Peripheral Registers base address */

В настоящее время я просматриваю документацию STM по этому вопросу, но, похоже, не могу найти ничего, что конкретно относится к состояниям по умолчанию для двух разных чипов. Я предполагаю, что это как-то связано с базовым адресом, однако таблица показывает, что это правильный адрес.

Кто-нибудь может мне помочь в этом?

Спасибо!

0 ответов

Другие вопросы по тегам