_Евген_ 0 3 часа назад Опубликовано 3 часа назад (изменено) · Жалоба 19 часов назад, _Евген_ сказал: Знатоки, кто подскажет почему при попытке прочитать состояние из регистра 0x01C0E000 (VE_BASE+VE_CTRL) в F1C100s, да собственно и любого регистра группы VE_BASE - программа зависает?С доступом к регистрам других блоков (TVE,TVD...) проблем нет! Отладчика нет - что-то считать после этого не знаю как (загружаю через sunxi-fel exec). Начальная настройка следующая(запуск все в том же проекте F1C100s_projects/projects/tv_in_test/main.c😞 ve_init(){ clk_pll_init(PLL_VE, 99, 8); // 24*99/8 = 297MHz <- copy-past от TVD clk_pll_enable(PLL_VE); clk_enable(CCU_BUS_CLK_GATE1, 0); // VE bus clock clk_enable(CCU_DRAM_CLK_GATE, 0); // DRAM access clock intc_disable_irq(IRQ_VE); clk_reset_clear(CCU_BUS_SOFT_RST1, 0); u32 ctrl=readl(VE_BASE + VE_CTRL); <- тут виснет Помог код(рабочий) из проекта jpgdec (автор ozelot): /* Hardware JPEG Decoding */ CCU->PLL_VE_CTRL = (1u << 31) | (1 << 24) | (12 << 8); // 312MHz while(!(CCU->PLL_VE_CTRL & (1 << 28))); CCU->VE_CLK |= (1u << 31); CCU->BUS_CLK_GATING1 |= 1; CCU->BUS_SOFT_RST1 &= ~1; CCU->BUS_SOFT_RST1 |= 1; CCU->DRAM_GATING |= 1; SYS->CTRL[0] &= 0x80000000; SYS->CTRL[0] |= 0x7fffffff; SYS->CTRL[1] &= 0xefffffff; printf("VE Version 0x%X 0x%X\r\n", VE->VERSION >> 16, VE->CTRL); По итогу для считывания версии: // Configure video engine clocks clk_pll_init(PLL_VE, 99, 8); // 24*99/8 = 297MHz <- работает и с 312МГц от ozelot clk_pll_enable(PLL_VE); CCU->VE_CLK |= (1u << 31); // вставлено из jpgdec!TODO: -> clk_ve_config in f1c100s_clock! clk_enable(CCU_BUS_CLK_GATE1, 0); // VE bus clock clk_enable(CCU_DRAM_CLK_GATE, 0); // DRAM access clock clk_reset_set(CCU_BUS_SOFT_RST1, 0); clk_reset_clear(CCU_BUS_SOFT_RST1, 0); u32 version=readl(VE_BASE + VE_VERSION) >> 16; Изменено 3 часа назад пользователем _Евген_ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться