Немного допилив его удалось сделать так, чтобы usb определялся как неизвестное устройство (раньше и этого не было).
Однако дальше процесс не идет (прикрепил скриншот программного анализатора на ПК).
Т.е. нет запросов GET_STATUS (0x00), GET_DESCRIPTOR (0x06) и т.д.
Вот кратко мой код (большая часть кода которая была для uart я удалил или закомментировал, т.к. он мне пока не нужен):
CODE
//1) Инициализация периферии и тактового генератора
SCU_MCLKSourceConfig(SCU_MCLK_OSC);
SCU_AHBPeriphClockConfig(__VIC, ENABLE);
SCU_AHBPeriphReset(__VIC, DISABLE);
/*USB clock = MCLK= 48MHz*/
SCU_USBCLKConfig(SCU_USBCLK_MCLK2);
SCU_AHBPeriphClockConfig(__USB48M, ENABLE);
/*Enable USB clock*/
SCU_AHBPeriphClockConfig(__USB, ENABLE);
SCU_AHBPeriphReset(__USB, DISABLE);
//2) Настраиваем ножку port2 pin7 (USBCLK) на выход:
SCU->GPIOOUT[0x02] = 0x4000;
// 3) Настройка прерывания по умолчанию:
VIC_DeInit();
VIC_InitDefaultVectors();
//4) Настройка прерывания для usb:
void USB_Interrupts_Config(void)
{
VIC_Config(USBLP_ITLine, VIC_IRQ, 3);
VIC_ITCmd(USBLP_ITLine, ENABLE);
}
SCU_MCLKSourceConfig(SCU_MCLK_OSC);
SCU_AHBPeriphClockConfig(__VIC, ENABLE);
SCU_AHBPeriphReset(__VIC, DISABLE);
/*USB clock = MCLK= 48MHz*/
SCU_USBCLKConfig(SCU_USBCLK_MCLK2);
SCU_AHBPeriphClockConfig(__USB48M, ENABLE);
/*Enable USB clock*/
SCU_AHBPeriphClockConfig(__USB, ENABLE);
SCU_AHBPeriphReset(__USB, DISABLE);
//2) Настраиваем ножку port2 pin7 (USBCLK) на выход:
SCU->GPIOOUT[0x02] = 0x4000;
// 3) Настройка прерывания по умолчанию:
VIC_DeInit();
VIC_InitDefaultVectors();
//4) Настройка прерывания для usb:
void USB_Interrupts_Config(void)
{
VIC_Config(USBLP_ITLine, VIC_IRQ, 3);
VIC_ITCmd(USBLP_ITLine, ENABLE);
}
Обработчик прерывания USB_Istr() в файле usb_istr.c срабатывает, чтобы запустился код на обработку
запросов должна сработать вот эта вот ветка:
Код
#if (IMR_MSK & ISTR_CTR)
if (wIstr & ISTR_CTR & wInterrupt_Mask)
{
/* servicing of the endpoint correct transfer interrupt */
/* clear of the CTR flag into the sub */
CTR_LP();
if (wIstr & ISTR_CTR & wInterrupt_Mask)
{
/* servicing of the endpoint correct transfer interrupt */
/* clear of the CTR flag into the sub */
CTR_LP();
Т.е. бит CTR в регистре USB_ISTR говорящей об успешности транзакции должен сработать. Однако этого почему-то не происходит.
(Приложил к сообщению свой проект,
проект делал в keil находиться по пути "um0290\str91x demos\Virtual Com Port\project\RVMDK"
).
Подскажите пожалуйста в чем может быть проблема ? Как правильно произвести инициализацию ?