Маски прерываний 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 по этому вопросу, но, похоже, не могу найти ничего, что конкретно относится к состояниям по умолчанию для двух разных чипов. Я предполагаю, что это как-то связано с базовым адресом, однако таблица показывает, что это правильный адрес.
Кто-нибудь может мне помочь в этом?
Спасибо!